Я совершенно новый в laravel. Я устанавливаю laravel 5.2. Я сделал с CRUD в laravel. Теперь я хочу интегрировать пакет проверки подлинности laravel. поэтому я выбираю zizaco \ доверяю.
Я следую за каждым шагом из ссылки doc. но я не понимаю, что не так. В документе не упоминается, что в каком файле я должен добавить следующий код.
$owner = new Role(); $owner->name = 'owner'; $owner->display_name = 'Project Owner'; // optional $owner->description = 'User is the owner of a given project'; // optional $owner->save(); $admin = new Role(); $admin->name = 'admin'; $admin->display_name = 'User Administrator'; // optional $admin->description = 'User is allowed to manage and edit other users'; // optional $admin->save();
и другие под кодом в документе.
Даже
class User extends Model implements AuthenticatableContract, AuthorizableContract, CanResetPasswordContract
Не упоминается о классе объектов.
я делаю
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; use Illuminate\Contracts\Auth\Access\Authorizable as AuthorizableContract; use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract;
но я получил ошибку
Trait 'App\Authenticatable' not found
Новый ученик не может найти место для размещения кода. Я ищу много, но я не могу получить идеальный документ, который дает правильное направление.
Где создавать роли, разрешения? Кто-нибудь, пожалуйста, помогите мне.
После создания первого заданного процесса
создать пример промежуточного программного обеспечения роли CheckRole
<?php namespace App\Http\Middleware; use Closure; class CheckRole { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @param $role * @return mixed */ public function handle($request, Closure $next, $role) { if (\Auth::user()->hasRole($role)) { return $next($request); } else { return response()->view('errors.401'); } } }
теперь создайте Check Permission
<?php namespace App\Http\Middleware; use Closure; class CheckPermission { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @param $permission * @return mixed */ public function handle($request, Closure $next, $permission) { if (\Auth::user()->can($permission)) { return $next($request); } else { return response()->view('errors.401'); } } }
добавьте эти middlewares в kernal.php
'role' => CheckRole::class, 'permission' => CheckPermission::class
1.Install "zizaco/entrust": "5.2.x-dev" 2.add provider and aliases in app.php 3.php artisan vendor:publish 4.php artisan migrate
Теперь добавьте в user.php
use Illuminate\Auth\Authenticatable; use Illuminate\Database\Eloquent\Model; use Illuminate\Auth\Passwords\CanResetPassword; use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract; use Illuminate\Contracts\Auth\CanResetPassword as CanResetPasswordContract; use Zizaco\Entrust\Traits\EntrustUserTrait; class User extends Model implements AuthenticatableContract, CanResetPasswordContract { use Authenticatable, CanResetPassword, EntrustUserTrait; }
Далее Создать модель для роли
use Zizaco\Entrust\EntrustRole class Role extends EntrustRole { protected $table = 'roles'; protected $fillable = ['name', 'display_name', 'description'] }
Теперь создайте модель для допуска
use Zizaco\Entrust\EntrustPermission; class Permission extends EntrustPermission { protected $table = 'permissions'; protected $fillable = ['name', 'display_name', 'description']; }
Теперь создайте таблицу посева для ролей и разрешений
UserTableSeeder.php <?php use Illuminate\Database\Seeder; use App\Permission; use App\Role; use App\User; class UserTableSeeder extends seeder { public function run() { Permission::truncate(); Role::truncate(); User::truncate(); \DB::table('role_user')->delete(); \DB::table('permission_role')->delete(); //create a user $veeru = User::create([ 'name' => 'veeru', 'email' => 'something@something.com', 'password' => bcrypt('qwerty'), ]); //create a role of admin $admin = Role::create([ 'name' => 'admin', 'display_name' => 'Admin', 'description' => 'Only one and only admin', ]); //create a permission for role $manage_users = Permission::create([ 'name' => 'manage-users-roles-and-permissions', 'display_name' => 'Manage Users,Roles and Permissions', 'description' => 'Can manage users,roles and permission"s', ]); //here attaching permission for admin role $admin->attachPermission($manage_users); //here attaching role for user $veeru->attachRole($admin); //here iam creating another role and permisssion $application = Role::create([ 'name' => 'appapirequestlogs', 'display_name' => 'AppApiRequestLogs', 'description' => 'This has full control on Application Core Request logs', ]); $corereq = Permission::create([ 'name' => 'appapireqlogindex', 'display_name' => 'AppApiReqLogIndex', 'description' => 'This has control on Application Core Request Logs index only', ]); here attaching roles and permissions $application->attachPermission($corereq); $veeru->attachRole($application); }
После посева, который создает файл маршрутов и контроллер для ролей и разрешений
routes.php
Route::group(['middleware' => 'web'], function () { Route::group(['prefix' => 'admin'], function () { Route::controller('roles', 'RolesController'); Route::controller('permissions', 'PermissionsController'); Route::controller('users', 'UsersController'); }); });
RolesController.php
use App\Permission; use App\Role; use Illuminate\Http\Request; use App\Http\Requests; class RolesController extends Controller { function __construct() { $this->middleware('auth'); $this->middleware('role:admin'); $this->middleware('permission:manage-users-roles-and-permissions'); } public function getIndex(Request $request) { $roles = Role::with('perms')->get(); return view('roles.index', ['roles' => $roles]); } public function getCreate() { return view('roles.create'); } public function postCreate(Request $request) { $role = Role::create([ 'name' => $request->name, 'display_name' => $request->display_name, 'description' => $request->description ]); return redirect()->to('admin/roles/index'); } public function getUpdate($id) { $role = Role::findOrFail($id); return view('roles.update', ['role' => $role]); } public function postUpdate(Request $request) { $role = Role::findOrFail($request->get('id')); $role->name = $request->get('name'); $role->display_name = $request->get('display_name'); $role->description = $request->get('description'); $role->save(); return redirect(); } public function getDelete($id) { $role = Role::findOrFail($id); $role->delete(); return redirect(); } public function getAttach(Request $request) { $role = Role::where('id', '=', $request->id)->with('perms')->first(); $permissions_id = $role->perms->pluck('id')->toArray(); $permissionsNotAttached = Permission::whereNotIn('id', $permissions_id)->get(); return view('roles.attach', compact('role', 'permissionsNotAttached')); } public function postAttach(Request $request) { $role = Role::findOrFail($request->id); $permission = Permission::findOrFail($request->permission); $role->attachPermission($permission); return redirect(); } public function getDetach(Request $request) { $role = Role::findOrFail($request->role_id); $permission = Permission::findOrFail($request->permission_id); $role->detachPermission($permission); return redirect()->to('/admin/roles/index'); } }
Аналогичным образом создайте PermissionsController.php
use App\Http\Requests\PermissionRequest; use App\Permission; use App\Http\Requests; class PermissionsController extends Controller { public function __construct() { $this->middleware('auth'); $this->middleware('role:admin'); $this->middleware('permission:manage-users-roles-and-permissions'); } public function getIndex() { $permissions = Permission::all(); return view('permissions.index', ['permissions' => $permissions]); } public function getCreate() { return view('permissions.create'); } public function postCreate(Request $request) { $permission = Permission::create([ 'name' => $request->name, 'display_name' => $request->display_name, 'description' => $request->description ]); return redirect(); } public function getUpdate($id) { $permission = Permission::findOrFail($id); return view('permissions.update', ['permission' => $permission]); } public function postUpdate(Request $request) { $permission = Permission::findOrFail($request->get('id')); $permission->name = $request->get('name'); $permission->display_name = $request->get('display_name'); $permission->description = $request->get('description'); $permission->save(); return redirect(); } public function getDelete($id) { $permission = Permission::findOrFail($id); $permission->delete(); return redirect(); } }
Теперь создайте роль с именем и добавьте к нему разрешения. пример:
1.create a role name festivals. 2.now create multiple permissions for that ->fesindex (only forr index viewing) ->fesedit (only for edit and update) ->fesadd (only for adding) ->fesdelete (only for deleting) 3.now attach which permissions you want to give to that role festivals 4.if you want a user to see only index page then for role festivals attach only fesindex 5.if you want a user to see index and add a new festival then create a new role for him and add fesindex and fes add
Теперь созданные разрешения помещаются в ваш контроллер
function __construct(FestivalRepository $repo) { $this->middleware('auth'); $this->middleware('permission:fesindex', ['only' => 'getFestivals']); $this->middleware('permission:fesedit', ['only' => ['getFestival', 'postUpdateFestival']]); $this->middleware('permission:fesadd', ['only' => ['getAddFestival', 'postAddFestival']]); $this->middleware('permission:fesapprove', ['only' => 'getChangeStatus']); $this->middleware('permission:fesdelete', ['only' => 'getDeleteFestival']); }
здесь getFestivals, getAddFestival и т. д. – это методы в контроллере.