laravel 授权@can 指令总是失败

laravel authorization @can directive always fails

我正在尝试在 Laravel 中实施授权,遵循 this guide

订阅策略:

public function manage($user) {
    return in_array($user->type, ['developer', 'admin', 'operations']);
}

订阅控制器:

public function __construct() {
    $this->authorize('manage', Subscription::class);
}

能力manage不是SubscriptionController中的方法。该能力是授权控制器中的任何方法。

在控制器中,一切似乎都工作正常,即如果用户未被授权 add/edit/delete/view 订阅,用户将收到 403。

现在我想让某些菜单项在用户未被授权时不显示。但是我无法使 @can 指令起作用。

@can('manage', Subscription::class)
    <li><a href="{{ route('subscriptions.index') }}">Subscriptions</a></li>
@endcan

即菜单项总是不显示(授权总是失败)

我在Laravel 5.1.24

我错过了什么?

我通过添加 App\ 解决了这个问题,如:

@can('manage', App\Subscription::class)

因为 AuthServiceProvider 中的 $policies 数组以 App\Subscription 作为键。

你必须使用 role/premission 来做这样的特定对象

@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