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

问题描述

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

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

最后一行许可为准。

有什么想法吗?

解决方法

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

在您的控制器中:

class TampaController extends Controller {

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

我不明白为什么会这样:

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

}

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

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

为什么会发生这种情况?

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...