在我的應用程序上,我使用默認的Laravel ACL爲用戶定義了隨後與角色和權限關聯的能力。Laravel在除用戶以外的模型中定義能力
我有一個hasMany和belongsTo的關係,其中一個用戶屬於一個公司模型,一個公司有很多用戶。我想定義具有不同能力的「類型」,與用戶能力分開。例如,一家公司可能是一家擁有不同能力的「建築師」公司,而不是「承包商」公司,而每家公司的用戶都具有「公司管理員」角色,可以在公司添加或刪除用戶,的「普通」用戶。
現在我有工作的一部分,用戶可以有一個角色,但我有點失去了如何實現公司「類型或角色」。我在想,我必須創建自己的AuthServiceProvider
,將其命名爲其他名稱並將其註冊到laravel服務提供商中,以及我自己實施的Gate注入公司模型而不是用戶?
現在我確定我的用戶的能力在我AuthServiceProvider,並使用Gate
外觀檢查,例如:
註冊能力的AuthServiceProvider。
//AuthServiceProvider
/**
* Register any application authentication/authorization services.
*
* @param \Illuminate\Contracts\Auth\Access\Gate $gate
* @return void
*/
public function boot(GateContract $gate)
{
parent::registerPolicies($gate);
foreach ($this->getPermissions() as $permission) {
$gate->define($permission->name, function ($user) use ($permission) {
return $user->hasPermission($permission);
});
}
}
然後檢查UserController上的用戶能力。
//UserController
/**
* Edit the user's email.
*
* @param User $user
*/
public function edit(User $user)
{
if(Gate::allows('edit', $user){
$user->email = $this->request->input('email');
$user->save();
}
}
我希望能夠做同樣的一種檢查與本公司模式,即:
// Check if the Company that the user belongs to is allowed to create posts
CompanyGate::allows('create-post');
你能不能繼續注入用戶,然後查詢了用戶的公司的關係? –
我想要做的是在我的應用程序的幾個位置檢查公司的能力。例如,「建築師」公司可能會創建一個職位,但「承包商」公司可能不會。 – enriqg9
你可以發佈一些示例代碼,你可能會檢查這些能力 –