首页 > 解决方案 > laravel/如何检查刀片和控制器中的权限?

问题描述

我为我的 laravel 项目创建了一些权限和角色。

web.php路由中,我可以使用一些权限定义这样的中间件:

$can = ['can:manage_global,manage_users,create_users'];
$this->get('/create', 'UserController@create')->middleware($can);

或在获得一项许可的刀片中:

@can('manage_global')
   ...
@endcan

如何检查刀片和控制器线中的多个权限值web.php

标签: laravellaravel-authentication

解决方案


你可以写中间件。

class CanAnyMiddleware
{
    public function handle($request, Closure $next, $permissions)
    {
        foreach ($permissions as $permission) {
            if ( $request->user()->can($permission)) {
                return $next($request); // allow
            }
        }

        return redirect(route('home')); // deny
    }
}

并在路由字符串中使用它。

Route::get('/create', 'UserController@create')
    ->middleware('canAny:manage_global,manage_users,create_users');

从 Laravel 5.6 开始,你可以@canany在 Blade 中使用:

@canany(['manage_global', 'manage_users', 'create_users'])
    ...
@endcanany

https://github.com/laravel/framework/pull/24137


推荐阅读