【问题标题】:Laravel permission on same resource for multiple roles (Spatie)Laravel 对多个角色的同一资源的权限(Spatie)
【发布时间】:2021-10-02 16:40:31
【问题描述】:

我需要向具有不同角色的用户授予对一个资源的操作的访问权限。

我尝试了以下方法,但在 web.php 路由文件中没有运气:

  • Route::resource('trampas', 'TrampaController')->middleware('role:Administrador|Supervisor'); //访问所有操作
  • Route::resource('trampas', 'TrampaController')->middleware('role:Monitoreador|Coordinador')->only('index', 'show');

但是当我声明第二行时,第一行被取消了。

在控制器的构造方法中声明时也会发生同样的事情:

  • $this->middleware('role:Administrador');
  • $this->middleware('role:Coordinador')->only('index','show');

最后一行权限为准。

有什么想法吗?

【问题讨论】:

  • Laravel 5.8 和 Spatie v3
  • 您可能也可以在路线中执行此操作;由于路线是有序的,您可以将only 放在顶部。如果您需要 4 个角色,则需要在答案中添加它们。

标签: laravel permissions resources roles laravel-permission


【解决方案1】:

在处理请求之前,中间件必须全部通过。如果您希望 indexshow 传递其中一个角色,您需要将所有角色显式放入参数中。

在您的控制器中:

class TampaController extends Controller {

    public function __construct() {
          $this->middleware('role:Administrador|Supervisor');
          $this->middleware('role:Administrador|Supervisor|Monitoreador|Coordinador')->only('index', 'show');
    }
    // ...
}

【讨论】:

    【解决方案2】:

    我不明白为什么会这样:

    public function __construct()
    {
        $this->middleware('role:Administrador|Supervisor')->except('index', 'show');
        $this->middleware('role:Administrador|Supervisor|Monitoreador|Coordinador');
    
    }
    

    当它似乎做的与我需要的相反时。

    我需要角色管理员和主管可以访问所有操作和角色 Monitoreador y Coordinador 只能访问索引和显示操作。但它的工作方式似乎表明 Administrador 和 Supervisor 可以访问除 index 和 show 操作之外的所有操作。

    为什么会发生这种情况?

    【讨论】:

      猜你喜欢
      • 2021-05-29
      • 2019-09-19
      • 2020-09-11
      • 1970-01-01
      • 1970-01-01
      • 2020-11-01
      • 2021-08-26
      • 1970-01-01
      • 2020-03-31
      相关资源
      最近更新 更多