【发布时间】:2016-05-14 00:07:25
【问题描述】:
在我的应用程序中,我使用默认的 Laravel ACL 为用户定义能力,随后与角色和权限相关联。
我建立了一个 hasMany 和一个 belongsTo 关系,其中一个用户属于一个公司模型,一个公司有很多用户。我想定义具有不同能力的公司的“类型”,与用户能力分开。例如,一家公司可能是一家“架构师”公司,其能力与“承包商”公司不同,而每个公司都有一个具有“公司管理员”角色的用户,可以在其公司中添加或删除用户,以及一堆的“普通”用户。
现在我正在处理用户可以拥有角色的部分,但我对如何实现公司“类型或角色”有点迷茫。我在想我必须创建自己的AuthServiceProvider,将其命名为其他名称并在 laravel 服务提供者中注册它,以及我自己的 Gate 实现,它注入 Company 模型而不是 User?
现在我正在我的 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();
}
}
我希望能够对 Company 模型进行相同类型的检查,即:
// Check if the Company that the user belongs to is allowed to create posts
CompanyGate::allows('create-post');
【问题讨论】:
-
不能继续注入User,然后查询User上的Company关系吗?
-
我要做的是检查我的应用程序的几个位置的公司能力。例如,“建筑师”公司可能会创建帖子,但“承包商”公司可能不会。
-
您能否发布一些示例代码来检查这些功能
-
@MattMcDonald 我更新以展示我如何注册和检查用户模型能力,我希望能够以与公司模型相同的方式检查能力。
-
那么一家公司将被认证到您的应用程序中?或者用户是否会通过身份验证进入您的应用,并且该用户属于公司?