php - web后台权限设计有哪几种实现方式
黄舟
黄舟 2017-04-10 15:18:41
[PHP讨论组]

如:
菜单1

菜单2

菜单3
……

设计:
表: 主键,帐号,密码,权限

  1    *    *   1,2
  2    *    *   1,2,3
  3    *    *   2
  4    *    *   4

就是把有权限的放入【权限】字段

大家有什么好的方法

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(9)
怪我咯

比较简单的 像 ACL(访问控制列表) 这种。一般都满足项目需要。

稍复杂一些的有 RBAC (基于较色的权限控制)。

php 里面有一个不错的RBAC实现phprbac

一般情况下 ACL 就已经够用了。

巴扎黑

很高兴回答楼主的问题。

关于权限系统的设计,对于MIS系统来说,基本都是必备的。现在很多公司,都是有通用的权限系统的整套解决方案,而楼主提出的权限设计,是可行的,的确有很多的MIS是这么干的,没有问题。对了,还需要添加一张表,定义权限。

迷茫

我以前做的系统是把权限放在一个单独的字段,用一个char来放的,每一位表示一个权限,然后写一个帮助类去设置和获取每个权限。

巴扎黑

我的设计也是一个字段来判断权限,对这种设计的利弊没有多深的了解,谁有好的见解分享下

高洛峰

1.ACL
2.RBAC

有一点要说一句:使用RBAC时,大家喜欢建一张user和role的关联表,其实直接将role_id作为user的一个属性才是正道。

欢迎继续讨论。
role和node表是多对多关联的。角色A有1、2、3三个功能点,角色D有1、3、5三个功能点,现在多了一个新功能100,给角色A角色D都增加新功能100的权限。我所说的是user和role一对一关联,一个用户就一种角色。u1需要1、2、3、5、100这些功能,就建立一个角色E,角色E关联1、2、3、5、100这些功能点。u1的role属性设置为E。如果按照以往的方式,就是u1关联了角色A和角色D,查询出角色A和角色D的功能点,合并后就是u1拥有的权限。

就算权限系统向QQ那样复杂,每一级QQ等级都有不同的功能点,那就每一个等级是一个角色,每个QQ用户的等级是唯一的。那角色表最多就一百多个角色,而不是user关联一堆role。

还有一点,系统新功能添加的频繁程度和获取用户功能权限的频率肯定是不能比的。越简单往往意味着高性能和稳健。

PHP中文网

一般很多都是用RBAC 就算不是也是这种类似的逻辑 可以做实时验证和登陆验证两种

伊谢尔伦

跨部门任职的人,权限很麻烦

ringa_lee

使用rbac就可以了啊

黄舟

@Mr_Jing

来个折中,可以在user表中添加一个role_ids字段,用来存储一个或多个角色编号,多个则用逗号分隔.

这样做可以省去一张关系表,简化插入操作,否则一个用户对应多个角色就要插入多条关系记录,现在用一个字段搞定.

不过这样做也存在一个问题,就是如果后期删除了一个角色,如何才能相应地删除掉user表中role_ids字段里的角色编号呢? 我的做法是,不用理会user表role_ids字段里被删除的角色. 因为编辑用户时,根据角色表显示的可选的角色列表中,是不会出现被删除的角色的. 而且这也不会影响到正确获取用户权限的逻辑.

同理,在role角色表里也添加一个perm_ids字段,用来存储一个或多个权限编号,多个则用逗号分隔.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号