0

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

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

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

4

2 回答 2

0

这就是 laravel 策略在中间件中定义授权规则的方式。见这里:https ://laravel.com/docs/5.5/authorization#via-middleware

为您授权的模型创建一个策略类,然后将该策略注册到模型。

于 2018-01-19T11:47:21.510 回答
0

可以查看给定用户是否被授权以多种不同方式执行特定操作。一种是在您的问题中使用中间件并将其附加到路由或组。这里有一些其他的方法:

使用对象can上的方法User。该can方法继承自Authorizable特征(因此它不仅限于用户):

if ($user->can('index', 'App\Models\Order')) {
    // User is allowed to index orders.
}

在控制器上使用该authorize方法。该authorize方法是从 trait 继承的AuthorizesRequests(因此这不仅限于控制器)。如果授权失败,此方法会抛出异常:

$this->authorize('index', 'App\Models\Order');

在视图中,可以使用@canBlade 指令来查看用户是否被授权执行给定的操作:

@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.
}

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

于 2018-01-19T13:11:25.580 回答