使用中间件字符串检查用户访问

时间:2018-01-19 11:42:01

标签: php laravel laravel-5 middleware policies

我有一个带有中间件规则的字符串(如在路由中):

$middleware = "can:index,App\Models\Order";

是否有可能检查给定用户是否具有此中间件规则的访问权限?

2 个答案:

答案 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.
}

当然,做更多的错误检查等是明智的。