laravel授权@can指令始终失败

时间:2016-02-16 10:10:38

标签: php laravel authorization laravel-5.1

我正在尝试在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

我错过了什么?

2 个答案:

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