【问题标题】:'can' middleware with Route::resource in Laravel'can' 中间件与 Laravel 中的 Route::resource
【发布时间】:2018-12-27 10:15:04
【问题描述】:

我想对资源的所有路由应用授权检查。例如:

  • Admin 可以创建 Doctor
  • Admin 可以更新 Doctor
  • 管理员可以查看医生
  • 管理员可以删除医生

我可以通过在资源路由上应用"can" middleware 来实现这一点,例如:

Route::resource('doctors', 'DoctorsController')->middleware('can:*,App\Doctor');

谢谢!

【问题讨论】:

    标签: laravel routes authorization middleware user-roles


    【解决方案1】:

    在 DoctorsController 构造函数中你可以使用:

    $this->middleware('can:<something>,App\Doctor');
    

    Reference: https://stackoverflow.com/questions/28729228/laravel-5-route-resources-middleware

    【讨论】:

    • 我已经检查了链接的问题,但实际上在这里我不需要特定的权限,但我需要对资源的所有权限的 can 中间件。那么我可以像-&gt;middleware('can:*, App\Doctor') 一样使用它,有或没有控制器吗???
    【解决方案2】:
    Route::resource('doctors', 'DoctorsController', ['middleware' => ['middleware1', 'middleware2', 'middleware3']]);
    

    【讨论】:

    • 这是否意味着我必须用 'DoctorsController', ['middleware' =&gt; ['can:create', 'can:update', ... ]]); 'DoctorsController', ['middleware' =&gt; ['can:create', 'can:update', ... ]]); ??? ? 之类的方式分别编写每条路线
    • 您可以创建一个自定义中间件,例如名为 ManageDoctors 的中间件,并在该中间件中检查所有权限 create, update, delete...,然后将 MangeDoctors 中间件放在资源路由上。
    • 请尝试在答案中添加更多信息以明确解决方案
    猜你喜欢
    • 2015-04-08
    • 2014-06-23
    • 2013-10-06
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 2016-02-18
    • 2021-01-07
    相关资源
    最近更新 更多