Роли Laravel с пакетом Spatie

#php #mysql #laravel #laravel-permission

#php #mysql #laravel #laravel-разрешение

Вопрос:

Как я могу установить правило для пользователя, чтобы он не вводил определенный маршрут?

Я добавил столбец в таблицу разрешений, назовите маршрут и введите маршруты вручную, и я создал промежуточное программное обеспечение, но проблема в том, что все мои контроллеры являются ресурсными, поэтому существует много маршрутов, так что как лучше всего это сделать?

 public function handle($request, Closure $next)
{
    $routeName = $request->route()->getName();  //users.create
    $permission = Permission::whereRaw("FIND_IN_SET('$routeName',routes)")->first();  //find route
    if($permission)
    {
        if(!$request->user()->can($permission->name))
        {
            abort(403);
        }
    }
    return $next($request);
}
 

Ответ №1:

Вы можете использовать промежуточное программное обеспечение для защиты маршрутов.

Вы можете группировать маршруты следующим образом:

 Route::group(['middleware' => ['can:publish articles']], function () {
    //
});
 

Или вы можете защитить маршруты на контроллере следующим образом:

 public function __construct()
{
    $this->middleware(['role:super-admin','permission:publish articles|edit articles']);
}
 

Для получения информации здесь: https://spatie.be/docs/laravel-permission/v3/basic-usage/middleware