我目前正在研究Laravel项目,该项目有些多租户。 管理员将创建本质上是承租人的公司,但用户可以是多个公司的一部分,每个公司都有一个角色或分配有各自的权限。
为使事情变得更复杂,还可以将用户分配给具有角色的项目,即使他们不属于该项目,也可以授予他们对该项目的访问权限。
用户将能够在同一门户上看到与他们绑定的所有数据,因此没有切换租户。
因此,权限正与所有关系完全混淆。 我预见需要以下表格来建立这样的关系:
用户:
user_role(用于分配管理员用户):
公司:
user_company:
user_company_permission:
权限:
角色:
permission_role:
项目: - ID -(其他与项目有关的信息)
project_user: - ID -project_id - 用户身份 -role_id
因此,基本上,有没有一种简单的方法可以管理所有这些权限? 如果在检查权限时会默认检查所有用户的公司和项目,那将是很好的选择,但是如果传入一个用户,则将其限制为该公司或项目。
我研究了一些权限插件,但找不到适合我问题的任何东西。
答案 0 :(得分:0)
如果每个角色的权限不必都是动态的,则可以用策略替换role
和permission
表。只需在role
表中添加一个user_company
字段即可(我个人将其设为一个字符串,以便于阅读)。
然后在CompanyPolicy
中,您可以运行如下检查:
/**
* Determine whether the user can view the object.
*
* @param \App\User $user
* @param \App\Company $company
* @return mixed
*/
public function view(User $user, Company $company)
{
$allowedRoles = ['admin', 'someotherrole'];
return $user->companies()->wherePivotIn('role', $allowedRoles)->count() > 0;
}
如果以后您确实需要动态权限,则除了此方法之外,您仍然可以添加动态权限,并在检查角色之前检查各个权限。