2016-05-13 54 views
1

在我的應用程序上,我使用默認的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'); 
+0

你能不能繼續注入用戶,然後查詢了用戶的公司的關係? –

+0

我想要做的是在我的應用程序的幾個位置檢查公司的能力。例如,「建築師」公司可能會創建一個職位,但「承包商」公司可能不會。 – enriqg9

+0

你可以發佈一些示例代碼,你可能會檢查這些能力 –

回答

0

目前您User模型,你似乎已經定義了一個hasPermission功能。

您可以簡單地在您的Company模型上創建類似的方法來檢查給定公司的角色和權限。

如果您想要使用Gate您仍然需要通過已驗證的用戶檢查權限,它總是要驗證已驗證用戶的上下文中的權限 - 但作爲用戶屬於公司,您可以跳轉該公司的權限。

也有類似以下內容:

$gate->define('create-post', function ($user) { 

    return $user->company->hasPermission('create-post'); 
});