laravel - 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
?
解决方案
你可以写中间件。
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
推荐阅读
- regex - 如何匹配两个逗号之间的所有内容?
- amazon-web-services - 在 EKS 中使用其他账户的 ECR 图像
- maven - 有没有办法将 POM 参数/属性传递给 TestNG XML 文件?
- mongodb - $addFields where 条件
- 3d - Vulkan 多视图(立体 3D)功能的说明
- html - 在angular4的同一页面中显示选定的下拉值
- android - 当用户在 webview 对话框中单击时如何显示对话框
- amazon-web-services - 如何将file.log注入logstash并通过kibana显示
- python - 如何找到距其他三个点特定距离的点的坐标?
- objective-c - 如何将 URL 构建代码从 Objective-C 转换为 Swift?