Laravel中三個欄位之間的關係:角色(Roles)、團隊(Teams)和專案(Projects)。
P粉645569197
P粉645569197 2023-07-26 15:10:19
0
1
434

在Laravel中,我有一個團隊、專案、使用者、角色和權限之間的關係。

使用者可以擁有多個團隊,一個團隊可以有多個項目,而使用者可以擁有使用者角色、團隊角色和專案角色。我想知道如何取得使用者在每個專案、每個團隊以及僅限使用者的權限。


User table

  • Id
  • name
  • current_project_id
  • current_team_id
  • role_id
  • etc

Teams table

  • id
  • name

Projects table

  • id
  • name
  • description

Roles table

  • id
  • name
  • type(user,project,team)

Permissions table

  • id
  • name

Role_permission table

  • permission_id
  • role_id

project_user table

  • project_id
  • user_id
  • role_id

team_user table

  • team_id
  • user_id
  • role_id

使用者在一個專案中只能擁有一個角色,在一個團隊中也只能擁有一個角色,而在使用者本身也只能擁有一個角色,該角色可以是管理員或一般使用者。

我正在嘗試獲取使用者專案角色的方式,同時我已經跳過了團隊的程式碼,因為我認為它與專案的程式碼非常相似。


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); });


P粉645569197
P粉645569197

全部回覆 (1)
P粉471207302

根據您的解釋,我按照以下方式進行操作:

表格*************

project_user 表:

Schema::create('project_user', function (Blueprint $table) { $table->unsignedBigInteger('project_id'); $table->unsignedBigInteger('user_id'); });

permission_role 表:

Schema::create('permission_role', function (Blueprint $table) { $table->unsignedBigInteger('permission_id'); $table->unsignedBigInteger('role_id'); });

role_user 表:

Schema::create('role_user', function (Blueprint $table) { $table->unsignedBigInteger('role_id'); $table->unsignedBigInteger('user_id'); });

Models *************

使用者模型:

/** * Team Relationship * * @return BelongsToMany */ public function teams(): BelongsToMany { return $this->belongsToMany(Team::class); } /** * Project Relationship * * @return BelongsToMany */ public function projects(): BelongsToMany { return $this->belongsToMany(Project::class); } /** * Role Relationship * * @return BelongsToMany */ public function roles(): BelongsToMany { return $this->belongsToMany(Role::class, 'role_user'); }

團隊模型:

/** * User Relationship * * @return BelongsToMany */ public function users(): BelongsToMany { return $this->belongsToMany(User::class); } /** * Project Relationship * * @return HasMany */ public function projects(): HasMany { return $this->hasMany(Project::class); }

專案模型:

/** * Team Relation * * @return BelongsTo */ public function team(): BelongsTo { return $this->belongsTo(Team::class); } /** * User Relation * * @return BelongsToMany */ public function users(): BelongsToMany { return $this->belongsToMany(User::class); }

角色模型:

/** * Permission Relation * * @return BelongsToMany */ public function permissions(): BelongsToMany { return $this->belongsToMany(Permission::class, 'permission_role'); } /** * User Relation * * @return BelongsToMany */ public function users(): BelongsToMany { return $this->belongsToMany(User::class,'role_user'); }

權限模型:

/** * Role Relation * * @return BelongsToMany */ public function roles(): BelongsToMany { return $this->belongsToMany(Role::class, 'permission_role'); }

首先,我們創建我們期望的角色。例如:

角色1:名稱=超級管理員,類型=使用者

角色2:名稱=團隊主管,類型=團隊

角色3:名稱=專案開發者,類型=項目

現在,我們將期望的角色指派給我們的使用者。這些角色儲存在role_user表中。

然後,根據這些角色,您可以確定每個使用者在每個專案和團隊中的職責。


    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板
    關於我們 免責聲明 Sitemap
    PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!