多个角色对同一资源的 Laravel 权限(Spatie)

时间:2021-07-26 18:43:10

标签: laravel permissions resources roles laravel-permission

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

我尝试了以下操作,但在 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');

最后一行许可为准。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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

在您的控制器中:

class TampaController extends Controller {

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

答案 1 :(得分:0)

我不明白为什么会这样:

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

}

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

我需要管理员和主管可以访问所有操作的角色,而监控器和协调员只能访问索引和显示操作的角色。但它的工作方式似乎声明管理员和主管可以访问除索引和显示操作之外的所有操作。

为什么会发生这种情况?