在我的应用程序中,我使用默认的Laravel ACL来定义用户的能力,随后与角色和权限相关联。
我设置了hasMany和belongsTo关系,其中用户属于公司模型,公司有许多用户。我想定义"类型"具有不同能力的公司,与用户能力分开。例如,一家公司可能是一名建筑师"公司的能力不同于承包商"公司,虽然每个公司都有一个角色为"公司管理员"的用户,可以添加或删除他们公司的用户,以及一堆" Regular"用户。
现在我正在处理用户可以担任角色的部分,但我对如何实施公司"类型或角色"有点迷失。我想我必须创建自己的AuthServiceProvider
,将其命名为其他并在laravel服务提供商中注册,以及我自己的Gate实现注入公司模型而不是用户?
现在我在我的AuthServiceProvider中定义我的用户能力,并使用Gate
Facade进行检查,例如:
在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)
目前您的User
模型上似乎已定义了hasPermission
功能。
您可以在Company
模型上创建一个类似的方法来检查给定公司的角色和权限。
如果您想使用Gate
,您仍然需要通过经过身份验证的用户检查权限,它始终会在经过身份验证的用户的上下文中验证权限 - 但是当用户属于公司时,您可以跳到公司的权限。
类似于以下内容:
$gate->define('create-post', function ($user) {
return $user->company->hasPermission('create-post');
});