需要处理用户权限的建议,我的应用程序有两个因素:
- 位置
- 模块
场景:
系统中的用户可能可以访问位置1中的3个模块和地点2中的2个模块
现在我应该如何处理我的表
方法1:
在用户表中自行分配权限列,并使用分隔符分隔权限例如:
权限(列):loc1m1、loc1m2、loc1m3、loc2m1、loc2m2
方法2:
有一个单独的权限表:
| id | userid | location | module | status |
|----|--------|----------|--------|--------|
| 1 | 1 | loc1 | 1 | 1 |
| 2 | 1 | loc1 | 2 | 1 |
| 3 | 1 | loc1 | 3 | 1 |
| 4 | 1 | loc2 | 1 | 1 |
| 5 | 1 | loc2 | 2 | 1 |
或者,如果有更好的做法,我想知道它
每个人都有不同的权限,因此不需要定义角色。
请分享您的见解。这是模式
http://www.laravelsd.com/share/7fOnku
感谢
绝对不要执行方法1。
方法2通常是公认的方法。通过这种方式,您可以查询谁可以访问特定区域,或者某个用户可以访问哪些区域。
另一种选择是使用一个为您处理访问控制的包——我通常使用https://github.com/BeatSwitch/lock-laravel
我不确定你是否已经研究过访问控制列表,但laravel和symfony都有关于这一问题的非常好的文章,还有一些非常好的捆绑包,所以你可能有点发明了轮子。
看看这些文章:
https://medium.com/laravel-4/laravel-4-acl-a7f2fa1f9791
http://ollieread.com/blog/2014/03/18/a-simplified-laravel-acl/
软件包:
https://packagist.org/packages/jacopo/laravel-authentication-acl
https://github.com/intrip/laravel-authentication-acl
我认为您应该创建5个表:
主表
- 用户(id、名称…)
- 位置(id、名称…)
- 模块(id、名称…)
数据透视表:
- users_locations(id、users_id、locations_id)
- locations_moduls(id,locations_id,moduls_id)
在此之后,您可以使用表联接(多对多)。如果你使用laravel,这可以帮助你:https://scotch.io/tutorials/a-guide-to-using-eloquent-orm-in-laravel