当基于角色的访问控制不够时,如何为用户分配角色和权限?

zf9nrax1  于 2021-06-15  发布在  Mysql
关注(0)|答案(3)|浏览(369)

在laravel应用程序中 users , roles 以及 permissions . 角色附加到用户,权限附加到角色。
用户:

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,是 Admin 他可以 add_admin , delete_admin , approve_order 但我需要不同的管理员有不同的权限。在这个结构中如果我随员 admin 角色到 userid 他的权限与 userid 我有。
我需要不同的管理员有不同的权限,不同的客户端有不同的权限。
有一个小场景:
假设有两个用户a和b,他们想注册为客户机,所以当他们注册时,我会将客户机角色附加到他们身上。他们有相同的权限,但如果用户a将上载他的文档,我需要附加新的权限给用户a,而不是用户b。
我的解决方案是创建一个新表,将权限附加到用户
用户权限:

Id | user_id | permission_id
____________________________
1  | 1       | 4

所以用户的所有权限将是其角色的权限+上表i中的权限
我需要你们帮我决定这个解决方案是好是坏,或者还有其他更好的方法吗(这类问题的最佳做法是什么?)

kuhbmx9i

kuhbmx9i1#

好问题。。。您可以向具有不同权限的其他客户端创建新角色,而无需创建新表用户权限

piok6c0g

piok6c0g2#

你可以考虑一个模板方案。为每个角色创建模板用户,并提供所需的权限列表。
然后在添加新用户时,选择正确的角色模板,并为用户分配与模板相同的权限。如果他们需要额外的权限,请授予他们。
这很简单。但是,更新模板不会更新以前使用该模板生成的现有用户的权限。

2guxujil

2guxujil3#

您可以考虑使用累积多角色方案
允许每个用户拥有一个有序的角色列表。
为每个需要特殊权限集的用户创建自定义角色。
允许角色同时授予和撤消权限。
假设安和比阿特丽斯都是管理员,但是比阿特丽斯不能删除订单。假设catherine不是管理员,但有权添加管理员。
设置这些角色时:

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

然后安娜担任行政职务。比阿特丽斯有行政的角色和她的个人比阿特丽斯的角色。凯瑟琳有她的个人角色。
经验告诉我,这样的系统非常灵活,但仍然足够简单,可以方便地为许多用户处理标准用户配置。但是,很难审计——很难弄清楚定制用户中谁拥有什么特权。如果你使用这个系统好几年了,可能会很混乱。

相关问题