Laravel 具有基于租户的不同权限集的用户
Laravel Users with different sets of permissions based on tenant
我目前正在从事一个有点多租户的 Laravel 项目。
管理员将创建本质上是租户的公司,但用户可以是多个公司的一部分,每个公司都有一个角色或分配的个人权限。
为了使事情变得更复杂,还可以将用户分配给具有角色的项目,这将使他们能够访问该项目,即使他们不属于该项目也是如此。
用户将能够在同一门户上查看他们绑定的所有数据,因此无需切换租户。
所以权限对所有关系都变得非常混乱。
以下是我预见需要建立这样的关系的表格:
用户:
- id
user_role(用于分配管理员用户):
- user_id
- role_id
公司:
- id
user_company:
- id
- user_id
- company_id
- role_id
user_company_权限:
- id
- user_company_id
- permission_id
权限:
- id
- 名字
角色:
- id
- 名字
permission_role:
- id
- permission_id
- role_id
项目:
- ID
- (其他项目相关信息)
project_user:
- ID
- project_id
- user_id
- role_id
基本上,有什么简单的方法可以管理所有这些权限吗?
如果在检查权限时默认检查所有用户的公司和项目就好了,但是如果传入一个就限制为那个公司或项目。
我研究了一些权限插件,但找不到任何似乎适合我的问题的插件。
如果每个角色的权限不必是动态的,您可以将 role
和 permission
table 替换为策略。只需在 user_company
table 中添加一个 role
字段(我个人会将其设为字符串以便于阅读)。
然后在 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;
}
如果稍后您确实需要动态权限,除了此方法之外,您仍然可以添加它们并在检查角色之前检查各个权限。
我目前正在从事一个有点多租户的 Laravel 项目。 管理员将创建本质上是租户的公司,但用户可以是多个公司的一部分,每个公司都有一个角色或分配的个人权限。
为了使事情变得更复杂,还可以将用户分配给具有角色的项目,这将使他们能够访问该项目,即使他们不属于该项目也是如此。
用户将能够在同一门户上查看他们绑定的所有数据,因此无需切换租户。
所以权限对所有关系都变得非常混乱。 以下是我预见需要建立这样的关系的表格:
用户:
- id
user_role(用于分配管理员用户):
- user_id
- role_id
公司:
- id
user_company:
- id
- user_id
- company_id
- role_id
user_company_权限:
- id
- user_company_id
- permission_id
权限:
- id
- 名字
角色:
- id
- 名字
permission_role:
- id
- permission_id
- role_id
项目: - ID - (其他项目相关信息)
project_user: - ID - project_id - user_id - role_id
基本上,有什么简单的方法可以管理所有这些权限吗? 如果在检查权限时默认检查所有用户的公司和项目就好了,但是如果传入一个就限制为那个公司或项目。
我研究了一些权限插件,但找不到任何似乎适合我的问题的插件。
如果每个角色的权限不必是动态的,您可以将 role
和 permission
table 替换为策略。只需在 user_company
table 中添加一个 role
字段(我个人会将其设为字符串以便于阅读)。
然后在 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;
}
如果稍后您确实需要动态权限,除了此方法之外,您仍然可以添加它们并在检查角色之前检查各个权限。