Laravel基于上下文角色的授权

时间:2019-08-14 23:19:40

标签: php laravel

我正在尝试在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');
  }
}

1 个答案:

答案 0 :(得分:0)

对于有兴趣的人,我在role_id数据透视表中添加了一个project_user列,并创建了一个单独的ProjectUser数据透视模型。然后,我分别在users()projects()模型上更新了ProjectUser方法,如下所示:

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;

这两个都将返回一个角色实例,我可以将其用于授权。