Laravel 具有基于租户的不同权限集的用户

Laravel Users with different sets of permissions based on tenant

我目前正在从事一个有点多租户的 Laravel 项目。 管理员将创建本质上是租户的公司,但用户可以是多个公司的一部分,每个公司都有一个角色或分配的个人权限。

为了使事情变得更复杂,还可以将用户分配给具有角色的项目,这将使他们能够访问该项目,即使他们不属于该项目也是如此。

用户将能够在同一门户上查看他们绑定的所有数据,因此无需切换租户。

所以权限对所有关系都变得非常混乱。 以下是我预见需要建立这样的关系的表格:

用户:

user_role(用于分配管理员用户):

公司:

user_company:

user_company_权限:

权限:

角色:

permission_role:

项目: - ID - (其他项目相关信息)

project_user: - ID - project_id - user_id - role_id

基本上,有什么简单的方法可以管理所有这些权限吗? 如果在检查权限时默认检查所有用户的公司和项目就好了,但是如果传入一个就限制为那个公司或项目。

我研究了一些权限插件,但找不到任何似乎适合我的问题的插件。

如果每个角色的权限不必是动态的,您可以将 rolepermission 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;
    }

如果稍后您确实需要动态权限,除了此方法之外,您仍然可以添加它们并在检查角色之前检查各个权限。