我有一个带有中间件规则的字符串(例如在路由中):
$middleware = "can:index,App\Models\Order";
是否有可能检查给定用户是否有权访问此中间件规则?
我有一个带有中间件规则的字符串(例如在路由中):
$middleware = "can:index,App\Models\Order";
是否有可能检查给定用户是否有权访问此中间件规则?
这就是 laravel 策略在中间件中定义授权规则的方式。见这里:https ://laravel.com/docs/5.5/authorization#via-middleware
为您授权的模型创建一个策略类,然后将该策略注册到模型。
可以查看给定用户是否被授权以多种不同方式执行特定操作。一种是在您的问题中使用中间件并将其附加到路由或组。这里有一些其他的方法:
使用对象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');
在视图中,可以使用@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.
}
当然,做更多的错误检查等是明智的。