处理权限PHP和MYSQL


Handling Permission PHP and MYSQL

需要处理用户权限的建议,我的应用程序有两个因素:

  1. 位置
  2. 模块

场景:

系统中的用户可能可以访问位置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个表:

主表

  1. 用户(id、名称…)
  2. 位置(id、名称…)
  3. 模块(id、名称…)

数据透视表:

  1. users_locations(id、users_id、locations_id)
  2. locations_moduls(id,locations_id,moduls_id)

在此之后,您可以使用表联接(多对多)。如果你使用laravel,这可以帮助你:https://scotch.io/tutorials/a-guide-to-using-eloquent-orm-in-laravel