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




相关文章
|
5月前
|
缓存 前端开发 API
PHP 适合做什么类型的项目
【8月更文挑战第4天】PHP 适合做什么类型的项目
75 4
|
4月前
|
域名解析 关系型数据库 MySQL
基于PHPEnv的本地环境搭建—PHP第一个项目:HelloWorld(从安装到运行)
该文章指导如何使用PHPEnv搭建本地PHP开发环境,并通过一个简单的"Hello World"程序演示从安装到运行的全过程。
基于PHPEnv的本地环境搭建—PHP第一个项目:HelloWorld(从安装到运行)
|
4月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:如何提高代码的可维护性与扩展性在软件开发领域,PHP 是一种广泛使用的服务器端脚本语言。随着项目规模的扩大和复杂性的增加,保持代码的可维护性和可扩展性变得越来越重要。本文将探讨 PHP 中的设计模式,并通过实例展示如何应用这些模式来提高代码质量。
设计模式是经过验证的解决软件设计问题的方法。它们不是具体的代码,而是一种编码和设计经验的总结。在PHP开发中,合理地使用设计模式可以显著提高代码的可维护性、复用性和扩展性。本文将介绍几种常见的设计模式,包括单例模式、工厂模式和观察者模式,并通过具体的例子展示如何在PHP项目中应用这些模式。
|
4月前
|
设计模式 数据管理 测试技术
PHP中的设计模式:单一职责原则在实战项目中的应用
在软件开发中,设计模式是解决问题的最佳实践。本文通过分析单一职责原则(SRP),探讨了如何运用这一原则来提升PHP项目的可维护性和扩展性。我们将从实际案例出发,展示单一职责原则在业务逻辑分离、代码解耦和提高测试效率方面的应用。无论是新手还是经验丰富的开发者,都能从中获益,进而编写出更健壮、更灵活的PHP代码。
46 5
|
5月前
|
关系型数据库 MySQL 应用服务中间件
win7系统搭建PHP+Mysql+Apache环境+部署ecshop项目
这篇文章介绍了如何在Windows 7系统上搭建PHP、MySQL和Apache环境,并部署ECShop项目,包括安装配置步骤、解决常见问题以及使用XAMPP集成环境的替代方案。
62 1
win7系统搭建PHP+Mysql+Apache环境+部署ecshop项目
|
4月前
|
开发框架 前端开发 中间件
开源PHP项目
【9月更文挑战第2天】开源PHP项目
66 4
|
5月前
|
存储 关系型数据库 Linux
【Azure 应用服务】App Service For Linux 部署PHP Laravel 项目,如何修改首页路径为 wwwroot\public\index.php
【Azure 应用服务】App Service For Linux 部署PHP Laravel 项目,如何修改首页路径为 wwwroot\public\index.php
|
5月前
|
关系型数据库 Linux 网络安全
"Linux系统实战:从零开始部署Apache+PHP Web项目,轻松搭建您的在线应用"
【8月更文挑战第9天】Linux作为服务器操作系统,凭借其稳定性和安全性成为部署Web项目的优选平台。本文以Apache Web服务器和PHP项目为例,介绍部署流程。首先,通过包管理器安装Apache与PHP;接着创建项目目录,并上传项目文件至该目录;根据需要配置Apache虚拟主机;最后重启Apache服务并测试项目。确保防火墙允许HTTP流量,正确配置数据库连接,并定期更新系统以维持安全。随着项目复杂度提升,进一步学习高级配置将变得必要。
406 0
|
7月前
|
Ubuntu PHP Apache
蓝易云 - 如何在Ubuntu 22.04上安装PHP8.1并设置本地开发环境
以上就是在Ubuntu 22.04上安装PHP 8.1并设置本地开发环境的步骤。
372 2
|
6月前
|
PHP 开发者
如何用Composer管理PHP项目的第三方扩展包
【7月更文挑战第2天】**Composer 是PHP开发的关键工具,用于管理项目依赖。安装需PHP 5.6.4+,通过官网脚本安装。在项目根目录创建 `composer.json` 文件定义依赖,使用 `composer require` 命令安装扩展包,如Guzzle。`composer.lock` 保证版本一致。`require_once 'vendor/autoload.php';` 实现自动加载。更新依赖用 `composer update`,管理依赖提升效率和项目维护性。深入学习可发掘更多高级功能。**
183 0