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

时间:2019-04-09 16:23:04

标签: laravel permissions multi-tenant

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

为使事情变得更复杂,还可以将用户分配给具有角色的项目,即使他们不属于该项目,也可以授予他们对该项目的访问权限。

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

因此,权限正与所有关系完全混淆。 我预见需要以下表格来建立这样的关系:

用户:

  • id

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

  • user_id
  • role_id

公司:

  • id

user_company:

  • id
  • user_id
  • company_id
  • role_id

user_company_permission:

  • id
  • user_company_id
  • permission_id

权限:

  • id
  • 名称

角色:

  • id
  • 名称

permission_role:

  • id
  • permission_id
  • role_id

项目: - ID -(其他与项目有关的信息)

project_user: - ID -project_id - 用户身份 -role_id

因此,基本上,有没有一种简单的方法可以管理所有这些权限? 如果在检查权限时会默认检查所有用户的公司和项目,那将是很好的选择,但是如果传入一个用户,则将其限制为该公司或项目。

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

1 个答案:

答案 0 :(得分:0)

如果每个角色的权限不必都是动态的,则可以用策略替换rolepermission表。只需在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;
    }

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