PHP项目权限设置

简介:     以前开发的系统都是中小型系统,而且面向的多是业务固定的企业。因此,以前自己设计的权限管理都是通过一张二维表表示的:id _in _read _write _dump _backup1001 1    1    0    0     01002  0 ...


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

  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. 周八
      这一点,就写到这吧。




相关文章
|
1天前
|
安全 PHP
从建站到拿站 -- PHP(Cookie设置)
从建站到拿站 -- PHP(Cookie设置)
21 0
|
1天前
|
PHP 数据安全/隐私保护
PHP页面如何实现设置独立访问密码
PHP网页如果需要查看信息必须输入密码,验证后才可显示出内容的代码如何实现? 对某些php页面设置单独的访问密码,如果密码不正确则无法查看内容,相当于对页面进行了一个加密
15 2
PHP页面如何实现设置独立访问密码
|
1天前
|
监控 安全 前端开发
PHP医院安全不良事件报告管理系统项目源码
不良事件上报系统,对患者安全(不良)事件实施全过程追踪管理,包括数据上报、流转审批、数据统计、原因分析、措施制定、效果追踪等环节,管理过程设置权限分级,相关人员职责明确,通过闭环管理使不良事件得到有效解决。 包含10大类医疗安全(不良)事件,即医疗事件、药品事件、护理事件、医学技术检查事件、输血事件、医院感染事件、医疗器械事件、安全管理与意外伤害事件,进一步又细分为60余类二级事件,全面覆盖医院所有临床科室、辅助科室及职能部门,从而消灭医疗安全(不良)事件管理的“盲区”。
36 1
|
1天前
|
安全 数据库连接 PHP
php网上书城|基于PHP实现网上书店商城藉项目(二)
php网上书城|基于PHP实现网上书店商城藉项目
|
1天前
|
关系型数据库 MySQL PHP
php网上书城|基于PHP实现网上书店商城藉项目(一)
php网上书城|基于PHP实现网上书店商城藉项目
|
1天前
|
安全 关系型数据库 PHP
网上书城|基于PHP实现网上书店商城藉项目
网上书城|基于PHP实现网上书店商城藉项目
|
1天前
|
安全 网络安全 Apache
Windows下Apache部署多个php项目
在 Windows 系统下,使用 Apache 服务器发布多个 PHP 项目是一项常见的任务。本文将介绍如何在 Windows 操作系统下使用 Apache 发布多个 PHP 项目。在 Windows 操作系统下使用 Apache 发布多个 PHP 项目可能有一些挑战,但是只要您按照本文的步骤进行操作,您就可以成功地完成这项任务。希望本文能够对您有所帮助。
68 0
|
1天前
|
安全 关系型数据库 PHP
php网上书城|基于PHP实现网上书店商城藉项目
php网上书城|基于PHP实现网上书店商城藉项目
|
1天前
|
存储 JavaScript 前端开发
百度搜索:蓝易云【php设置和获取Cookie教程。】
需要注意的是,为了确保在向浏览器发送任何输出之前设置Cookie,应该在 `<html>`标签之前或PHP脚本的顶部设置Cookie。
75 0