簡體   English   中英

Laravel基於上下文角色的授權

[英]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數據透視模型。 然后,我按照如下方式分別在ProjectUser模型上更新了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM