0

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

用户:

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 1 , is Adminand he can add_admin, delete_admin,approve_order

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

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

有一个小场景:

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

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

用户权限:

Id | user_id | permission_id
____________________________
1  | 1       | 4

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

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

4

3 回答 3

1

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

  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 角色。凯瑟琳有她的个人角色。

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

于 2018-12-16T13:15:39.003 回答
0

好问题...您可以在不创建新表 User_permissions 的情况下为具有不同权限的另一个客户端创建新角色

于 2018-12-16T13:05:55.063 回答
0

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

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

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

于 2018-12-16T13:18:39.983 回答