我正在尝试在this guide之后在Laravel中实施授权。
SubscriptionPolicy :
public function manage($user) {
return in_array($user->type, ['developer', 'admin', 'operations']);
}
SubscriptionController :
public function __construct() {
$this->authorize('manage', Subscription::class);
}
能力manage
不是SubscriptionController
中的方法。该功能用于授权控制器中的任何方法。
在控制器中,一切似乎都运行正常,即如果用户无权添加/编辑/删除/查看订阅,则用户获得403。
现在我想如果用户未获得授权,则不会显示某些菜单项。但是,我无法使@can
指令起作用。
@can('manage', Subscription::class)
<li><a href="{{ route('subscriptions.index') }}">Subscriptions</a></li>
@endcan
即,始终不显示菜单项(授权总是失败)。
我在Laravel 5.1.24
我错过了什么?
答案 0 :(得分:2)
我通过添加App\
来解决此问题,如:
@can('manage', App\Subscription::class)
因为$policies
中的AuthServiceProvider
数组以App\Subscription
为关键字。
答案 1 :(得分:-1)
您必须使用角色/预设来执行此类特定对象
@can('update-post', $post)
<a href="/post/{{ $post->id }}/edit">Edit Post</a>
@endcan
我的情况
@can('manage', Subscription::class->find(1))
<li><a href="{{ route('subscriptions.index') }}">Subscriptions</a></li>
@endcan