我正在尝试在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');
}
}
答案 0 :(得分:0)
对于有兴趣的人,我在role_id
数据透视表中添加了一个project_user
列,并创建了一个单独的ProjectUser
数据透视模型。然后,我分别在users()
和projects()
模型上更新了Project
和User
方法,如下所示:
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();
}
}
最后,我将以下role()
方法添加到ProjectUser
数据透视模型中,以引用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;
这两个都将返回一个角色实例,我可以将其用于授权。