Controller构造函数中的Laravel策略

时间:2017-12-26 01:10:07

标签: php laravel

我使用策略类授权某些用户(作者或管理员)更新和删除Post Model中的记录。这是一个简单的CRUD。问题是:如何立即对特定方法进行策略检查?例如,我可以在PostController构造函数中使用中间件来检查用户是否已记录,但是我该如何处理类似于需要参数的策略呢?

PostController中

public function __construct()
{
  $this->middleware('auth', ['except' => ['index', 'show']]);
}

PostPolicy

class PostPolicy
{
  use HandlesAuthorization;

  public function before($user)
  {
    if ($user->hasRole('admin')) {
      return true;
    }
  }

  public function manage($user, $post)
  {
    return $user->id == $post->user_id;
  }
}

AuthServiceProvider

public function boot()
{
  $this->registerPolicies();

  Gate::define('manage-post', 'App\Policies\PostPolicy@manage');
}

我试过了:

$this->middleware('can:manage-post', ['except' => ['index', 'show']]);

但它没有用。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我只是注册政策并使用它而不是单独写出“能力”。

can:manage,post

manage操作,post用于门(资源)的路径参数。

Laravel 5.5 Docs - Authorization - Authorizing Actions - via Middleware