免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1752 | 回复: 0
打印 上一主题 下一主题

PHP项目权限设置 [复制链接]

论坛徽章:
2
IT运维版块每日发帖之星
日期:2015-06-26 22:20:00IT运维版块每日发帖之星
日期:2015-06-29 22:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-23 02:25 |只看该作者 |倒序浏览


    以前开发的系统都是中小型系统,而且面向的多是业务固定的企业。因此,以前自己设计的权限管理都是通过一张二维表表示的:

  1. id _in _read _write _dump _backup
  2. 1001 1    1    0    0     0
  3. 1002  0    0    0    0     0
  4. 1003  1    1     1    1     0
    于是,一个小型矩阵就出现了,配合数据库MySql中的相关字段:
  1. id name gender    acl     email
  2. 1001 张三     男   11000   ok@ok.com
    再写一个readAcl类,每次根据具体的值得出相应的权限。这是小打小闹而已,因为:
    1、数据大量冗余
    当数据多的时候,就是说系统使用人数多的时候,或者部门业务较多,表中列就有二三十行的情况下,就会产生浪费,引发数据库反映变慢,究其原因在于这种方式太精细化了,可以控制每个人的每个活动。其实不需要这么设置,因为很多人只有几个项目有权限,别的权限相就都是0,如果真的发生了那样的事情,呵呵,咱们看到的表会是一个处处是0,几乎都看不见1的一个大表格。这不是浪费是什么。
    2、可扩展性差
    数据冗余就说明了,此处需要改进,而且那么多重复数据,第一眼看去就想给他面向对象进行拆分进行重用,呵呵,可惜那是数据库,虽不能面向对象,但可以拆表。其实,大家可以设想一下,如果这个公司业务发展情况良好,不久又兼并了一个新业务,那么咱就得在这个大表中再新增添一个列,又出现N多个0和极少量的1。如果说这你可以容忍,那么每次都对这个表增加列你还能容忍么?增加列之后,人员数据表里的acl字段值你就必须每次都重写一遍,因为之前是11000(五位),现在所有人都变为110000(六位),如果还有别的表也用到这个值呢?别忘了,你还得对PHP程序进行修改呢。
    总之,你说麻烦不麻烦。


    我靠,那怎么办?
    是的,我也发愁ing。突然我想到了Linux,这可是可以一机带超多个用户的系统,它的权限设计是按组来分的。灵感告诉我,这是个好点子。于是我查看了Discuz和Joomla的用户权限设置,思路都是一样:按组分配权限。
    万岁,首先还是那张用户表,可以固定字段罗
  1. id name gender    group    email
  2. 1001 张三     男      0     ok@ok.com
    这张表里变得更简单了,就一个数,代表组ID。
    接着设定组权限表:
  1. id _in _read _write _dump _backup
  2. 0 1    1    1    1     1
  3.  0    0    0    0     0
  4.  1    1     0    1     0
    如果遇到需要新增业务的话,直接对组权限表增加列即可,并不影响别的表。
    接下来就是一个简单的组员表了。
  1. gid id
  2. 0 1001
  3. 0 1003
  4. 1 1129
  5. ............

    这种做法在遇到超大量数据时都没有问题。关键是极好地解决了权限分配问题。其实看起来是种树状结构:
  1. groupA:
  2. 张三
  3. 李四
  4. groupB:
  5. 王五
  6. 赵六
  7. 陈七
  8. groupC:
  9. 周八
      这一点,就写到这吧。




您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP