[英]Laravel contextual role based authorisation
我正在嘗試在Laravel應用程序中設置基於角色的授權,但是需要在另一個模型(例如項目)的上下文中分配角色。 一個項目有很多用戶,我希望可以在該項目的上下文中為每個用戶分配一個角色。
我目前在項目和用戶之間有很多關系。 我也該如何適應角色?
class User extends Model {
public function projects()
{
return $this->belongsToMany('App\Project');
}
}
class Project extends Model {
public function users()
{
return $this->belongsToMany('App\User');
}
}
對於感興趣的任何人,我都會在project_user
數據透視表中添加一個role_id
列,並創建一個單獨的ProjectUser
數據透視模型。 然后,我按照如下方式分別在Project
和User
模型上更新了users()
和projects()
方法:
class User extends Model {
public function projects()
{
return $this->belongsToMany('Dashboard\Project')
->using('Dashboard\ProjectUser')
->withPivot('role_id')
->withTimestamps();
}
}
class Project extends Model {
public function users()
{
return $this->belongsToMany('Dashboard\User')
->using('Dashboard\ProjectUser')
->withPivot('role_id')
->withTimestamps();
}
}
最后,我在ProjectUser
數據透視模型中添加了以下role()
方法,以引用Role
模型(其中包含諸如角色名稱和描述之類的屬性)。
class ProjectUser extends Pivot
{
public function role()
{
return $this->belongsTo('Dashboard\Role');
}
}
我現在可以像這樣訪問用戶的角色:
按項目: $project->users->find($user_id)->pivot->role;
按用戶: $user->projects->find($project_id)->pivot->role;
兩者都將返回一個角色實例,我可以使用該實例進行授權。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.