我有一个带有中间件规则的字符串(如在路由中):
$middleware = "can:index,App\Models\Order";
是否有可能检查给定用户是否具有此中间件规则的访问权限?
答案 0 :(得分:0)
这就是laravel策略在中间件中定义授权规则的方式。见这里:https://laravel.com/docs/5.5/authorization#via-middleware
为要授权的模型创建策略类,然后将策略注册到模型。
答案 1 :(得分:0)
可以查看给定用户是否有权以多种不同方式执行某项操作。一种是在您的问题中使用中间件并将其附加到路由或组。以下是其他一些方法:
在can
对象上使用User
方法。 can
方法继承自Authorizable
特征(因此不仅限于用户):
if ($user->can('index', 'App\Models\Order')) {
// User is allowed to index orders.
}
在控制器上使用authorize
方法。 authorize
方法继承自AuthorizesRequests
特征(因此,这不仅限于控制器)。如果授权失败,此方法将引发异常:
$this->authorize('index', 'App\Models\Order');
在视图中,可以使用@can
Blade指令查看用户是否有权执行给定的操作:
@can('index', 'App\Models\Order')
This user can index orders.
@endcan
如果你有那个特定的字符串,你可以做一些操作来提取你需要的位,然后将它传递给上述方法之一:
$middleware = "can:index,App\Models\Order";
list($rule, $parameters) = explode(':', $middleware);
list($ability, $model) = explode(',', $parameters);
if ($user->can($ability, $model)) {
// User can index orders.
}
当然,做更多的错误检查等是明智的。