【问题标题】:how to assign roles and permission to user, when role-based acces controll is not enough?当基于角色的访问控制不够时,如何为用户分配角色和权限?
【发布时间】:2019-05-17 01:23:29
【问题描述】:

在 laravel 应用程序中,我有 usersrolespermissions。角色附加到用户,权限附加到角色。

用户:

id | name   | email
______________________
1  | saba   | saba@gmail.com
2  | nika   | nika@gmail.com
3  | gio    | gio@gmail.com

角色:

id | name  
______________________
1  | Admin   
2  | Client   
3  | Service_provider    

权限:

id | name  
______________________
1  | add_admin   
2  | delete_admin   
3  | approve_order
4  | delete_order 

用户角色:

id | user_id | role_id
______________________
1  | 1       | 1
2  | 2       | 2

角色权限:

id | role_id | permission_id
____________________________
1  | 1       | 1
2  | 1       | 2
3  | 1       | 3

在此示例中,userid 1Admin,他可以是 add_admindelete_adminapprove_order

但我需要不同的管理员拥有不同的权限。在这个结构中,如果我将admin 角色附加到userid 2,他的权限将与userid 1 的权限相同.

我需要不同的管理员有不同的权限,不同的客户有不同的权限。

有一个小场景:

假设有两个用户 AB,他们想注册为客户,所以当他们注册时,我会为他们附加客户角色。他们具有相同的权限,但如果用户 A 将上传他的文档,我需要将新权限附加给用户 A,而不是用户 B

我的解决方案是创建一个新表,并在其中为用户附加权限

用户权限:

Id | user_id | permission_id
____________________________
1  | 1       | 4

所以用户的所有权限将是他的角色权限+我上面描述的表中的权限

我需要你们帮助我决定这个解决方案是好是坏,或者还有其他更好的方法吗? (这类问题的最佳做法是什么?)

【问题讨论】:

    标签: mysql laravel database-design role-based-access-control


    【解决方案1】:

    好问题...您可以为另一个具有不同权限的客户端创建新角色,而无需创建新表 User_permissions

    【讨论】:

      【解决方案2】:

      您可以考虑使用累积多角色方案

      1. 允许每个用户拥有一个有序的角色列表。

      2. 为每个需要一组特殊权限的用户创建自定义角色。

      3. 允许角色授予和撤销权限。

      假设 Ann 和 Beatrice 都是管理员,但 Beatrice 不能删除订单。 假设 Catherine 不是管理员,但有权添加管理员。

      当您可以设置这些角色时:

          Admin:  grant approve_order  grant delete_order  grant add_admin  grant delete_admin     
       Beatrice:  withdraw delete_order
      Catherine:  grant add_admin
      

      然后 Anna 具有管理员角色。 Beatrice 具有管理员角色和她的个人 Beatrice 角色。凯瑟琳有她的个人角色。

      经验告诉我,这样的系统非常灵活,但仍然足够简单,可以轻松处理许多用户的标准用户配置。但是,很难审计——很难弄清楚你的定制用户中谁有什么特权。如果您使用该系统数年,它可能会非常混乱。

      【讨论】:

        【解决方案3】:

        您可以考虑使用模板方案。使用所需权限列表为每个角色创建模板用户。

        然后在添加新用户时,选择正确的角色模板,并为用户分配与模板相同的权限。如果他们需要额外的权限,请授予他们。

        这很简单。但更新模板不会更新从该模板创建的先前现有用户的权限。

        【讨论】:

          猜你喜欢
          • 2014-01-25
          • 2020-06-22
          • 2015-11-20
          • 2019-04-30
          • 1970-01-01
          • 2010-09-11
          • 2023-04-06
          • 2015-07-22
          • 1970-01-01
          相关资源
          最近更新 更多