在Laravel中,我有一個團隊、專案、使用者、角色和權限之間的關係。
使用者可以擁有多個團隊,一個團隊可以有多個項目,而使用者可以擁有使用者角色、團隊角色和專案角色。我想知道如何取得使用者在每個專案、每個團隊以及僅限使用者的權限。
User table
Teams table
Projects table
Roles table
Permissions table
Role_permission table
project_user table
team_user table
使用者在一個專案中只能擁有一個角色,在一個團隊中也只能擁有一個角色,而在使用者本身也只能擁有一個角色,該角色可以是管理員或一般使用者。
我正在嘗試獲取使用者專案角色的方式,同時我已經跳過了團隊的程式碼,因為我認為它與專案的程式碼非常相似。
class User extends Authenticatable { public function projectRole() { //I can't find the way to insert project_id like in where, because current_project_id is null in boot return $this->belongsToMany(Role::class, 'project_user')->where('project_id', '=', $this->current_project_id)->first(); } public function projectPermissions() { return $this->projectRole()->permissions; } public function permissions() { //I can't find the way to get all team permission, project permissions and user permissions } public function role() : BelongsTo { //Only can be User role, Admin or Support return $this->belongsTo(Role::class); } public function userPermissions() { return $this->role->permissions; } } class Role extends Model { public function permissions() { return $this->belongsToMany(Permission::class); } }
我想用權限作為門檻,傳遞給Inertia前端,我正在嘗試類似這樣的方法。
Gate::before(function ($user, $permission) { return $user->projectPermissions($user->currentProject)->contains($permission) || $user->teamPermissions($user->currentTeam)->contains($permission) || $ user->teamPermissions($user->currentTeam)->contains($permission) || $user->userPermissions()->contains($permission); });
根據您的解釋,我按照以下方式進行操作:
表格*************
project_user 表:
permission_role 表:
role_user 表:
Models *************
使用者模型:
團隊模型:
專案模型:
角色模型:
權限模型:
首先,我們創建我們期望的角色。例如:
角色1:名稱=超級管理員,類型=使用者
角色2:名稱=團隊主管,類型=團隊
角色3:名稱=專案開發者,類型=項目
現在,我們將期望的角色指派給我們的使用者。這些角色儲存在role_user表中。
然後,根據這些角色,您可以確定每個使用者在每個專案和團隊中的職責。