在这个项目设计之前,老板要求使用权限设计,我比较了一些设计方式,感觉都不错,于是综合了一下,自己写一种权限管理

在权限这一块出于安全性考虑,我验证的比较复杂,或许存在不足,如有意见可以交流

一: 管理员表(如下图)

CREATE TABLE `czl_admin` (`adid` int(11) NOT NULL AUTO_INCREMENT,`adname` varchar(20) NOT NULL,`password` varchar(32) NOT NULL,`addlogip` varchar(18) NOT NULL DEFAULT '127.0.0.1',`adlogtime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,`adregtime` int(10) NOT NULL,`type` tinyint(1) DEFAULT '0',`rid` tinyint(3) NOT NULL DEFAULT '0',PRIMARY KEY (`adid`),UNIQUE KEY `adname` (`adname`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8

权限表

 CREATE TABLE `czl_power` (`powerid` tinyint(3) NOT NULL AUTO_INCREMENT,`controller` varchar(15) NOT NULL,`action` varchar(15) NOT NULL,`powername` varchar(15) NOT NULL,PRIMARY KEY (`powerid`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8

如下表

角色表

CREATE TABLE `czl_role` (`roleid` tinyint(4) NOT NULL AUTO_INCREMENT,`powerid` varchar(50) NOT NULL,`rolename` varchar(10) NOT NULL,PRIMARY KEY (`roleid`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8

字段和建表sql如上,

admin表中rid和角色表关联

角色表powerid和权限表关联

角色所属的权限以字符串的形式存放在表中

我使用的是tp3.2 ,当然权限问题是通用的,和框架没太大关系

代码如下

<?php
namespace Admin\Controller;
use Think\Controller;
/*
*   张鹏飞
*   2017.4.1
*   权限
**/
class BaseController extends Controller{function _initialize(){$adname = cookie('adname');$adid   = cookie('adid');if (!isset($adid) && !isset($adname)){header('location:'.U('Log/index'));die;}// 登录用户进行再次验证$where = array('adname' => passport_decrypt($adname,C('PASSWORD_KEY')),'adid'     => passport_decrypt($adid,C('PASSWORD_KEY')),);$admin = D('Admin');$adminArr = $admin->where($where)->find();if(empty($adminArr)){// 判断是否为合法数据header('location:'.U('Home/Index/index'));die;}// 对角色进行管理// 得到对应的角色以及权限$role = D('role');$roleArr = $role->find($adminArr['rid']);if(empty($roleArr)){// 若没有对应的权限则为非法用户header('location:'.U('Home/Index/index'));die;}$power = D('Power');$powerid = explode('|', $roleArr['powerid']);$where['powerid'] = ':powerid';foreach ($powerid as $k => $v) {$powerTotalArr[] = $power->field('controller,action')->where($where)->bind(':powerid',$v['powerid'])->find();}// 做两层判断// 对路径进行判断$controller = strtolower(CONTROLLER_NAME);$action = strtolower(ACTION_NAME);$flag = false;foreach ($powerTotalArr as $k => $v) {if(strtolower($v['controller']) == $controller && strtolower($v['action']) == $action){$flag = true;}}if(!$flag) exit('您没有权限');// 重组控制器和方法foreach ($powerTotalArr as $k => $v) {if(!in_array($v['controller'],$powerTotalArrStr)) $powerTotalArrStr[] = strtolower($v['controller']);$powerTotalArrStr[] = strtolower($v['controller']).'/'.strtolower($v['action']);}$this->assign('powerTotalArrStr',$powerTotalArrStr);}
}

--------------------------------------------------------------------------------------------

以下为分析过程

---------------------------------------------------------------------------------------------

登录之后会存放cookie,这里我对cookie做最基本的判断

     if (!isset($adid) && !isset($adname)){header('location:'.U('Log/index'));die;}

这里是对存放的cookie进行验证,防止有人伪造cookie

adid和adname来查数据表

       if (!isset($adid) && !isset($adname)){header('location:'.U('Log/index'));die;}

     // 登录用户进行再次验证$where = array('adname' => passport_decrypt($adname,C('PASSWORD_KEY')),'adid'    => passport_decrypt($adid,C('PASSWORD_KEY')),);$admin = D('Admin');$adminArr = $admin->where($where)->find();if(empty($adminArr)){// 判断是否为合法数据header('location:'.U('Home/Index/index'));die;}



passport_decrypt 这是解密函数,在前面的文章中有此介绍 http://blog.csdn.net/fei003/article/details/66472358 ,



对权限进行初步验证,此时访问链接的话,会拒绝并跳转  ,但是如何在页面中实现权限呢,就是说没有权限的菜单不会显示
                // 对角色进行管理
        // 得到对应的角色以及权限$role = D('role');$roleArr = $role->find($adminArr['rid']);if(empty($roleArr)){// 若没有对应的权限则为非法用户header('location:'.U('Home/Index/index'));die;



对权限进行重组,并传值到模板中,在这里如果该用户没有此权限,经过判断后则对菜单进行屏蔽处理
       foreach ($powerTotalArr as $k => $v) {if(!in_array($v['controller'],$powerTotalArrStr)) $powerTotalArrStr[] = strtolower($v['controller']);$powerTotalArrStr[] = strtolower($v['controller']).'/'.strtolower($v['action']);}$this->assign('powerTotalArrStr',$powerTotalArrStr);


加油  DREAM-FEI

php通用权限管理设计相关推荐

  1. python通用权限管理框架图_通用权限管理设计篇_设计模式

    摘要: 本文讲的是通用权限管理设计篇_设计模式, 博客地址:http://www.blogjava.net/amigoxie/  一.引言        因为做过的一些系统的权限管理的功能虽然在逐步完 ...

  2. 通用权限管理设计 之 数据权限

    阅读目录 前言 初步分析 通用查询机制 数据权限规则 实际应用 结语 前言 前一篇文章<通用权限管理设计 之 数据库设计方案>介绍了[主体]- [领域] - [权限]( who.what. ...

  3. 通用权限管理设计篇_设计模式

    摘要: 本文讲的是通用权限管理设计篇_设计模式, 博客地址:http://www.blogjava.net/amigoxie/  一.引言        因为做过的一些系统的权限管理的功能虽然在逐步完 ...

  4. (转)通用权限管理设计 之 数据权限

    转自:leo's Space http://www.cnblogs.com/leoxie2011/archive/2012/03/20/2408542.html 阅读目录 前言 初步分析 通用查询机制 ...

  5. (转)通用权限管理设计 之 数据库结构设计

    转自:leo's Space http://www.cnblogs.com/leoxie2011/archive/2011/05/19/2050626.html 通用权限管理设计 之 数据库结构设计 ...

  6. java 通用权限管理_通用权限管理设计篇(一)

    一.引言 因为做过的一些系统的权限管理的功能虽然在逐步完善,但总有些不尽人意的地方,总想抽个时间来更好的思考一下权限系统的设计. 权限系统一直以来是我们应用系统不可缺少的一个部分,若每个应用系统都重新 ...

  7. 通用权限管理设计篇(一)

    一.引言 因为做过的一些系统的权限管理的功能虽然在逐步完善,但总有些不尽人意的地方,总想抽个时间来更好的思考一下权限系统的设计. 权限系统一直以来是我们应用系统不可缺少的一个部分,若每个应用系统都重新 ...

  8. 通用权限管理设计篇(二)——数据库设计

    让我们接着来进行数据库的设计.在数据库建模时,对于N对N的关系,一般需要加入一个关联表来表示关联的两者的关系.初步估计一下,本系统至少需要十张表,分别为:权限表.用户表.角色表.组表.用户权限关联表. ...

  9. 系统权限管理设计 (转:http://blog.csdn.net/chexlong/article/details/37697555)

    权限设计(转:http://blog.csdn.net/chexlong/article/details/37697555)      1. 前言:      权限管理往往是一个极其复杂的问题,但也可 ...

最新文章

  1. How to create DBFS file system
  2. snmp在企业网中的简单应用
  3. 微信小程序项目实战知识点总结(swiper组件自适应高度,自定义弹出层,悬浮按钮,虚拟键盘)...
  4. jQuery hash 插件
  5. Windows Server 2008 配置使用动态IP和备用地址
  6. python下载网页中的pdf文件_Python读取网页上的pdf文件,输出字符串
  7. 动态规划系列问题—从小白到大佬的入门、进阶之旅!!!
  8. 做游戏,学编程(C语言) 4 flappy bird
  9. 若变量已正确定义并赋值,不符合c语言语法的表达式是____.,若变量已正确定义并赋值,表达式______不符合C语言语法.A、a*b/c; B、3.14%2 C、2,b D、a/b/...
  10. 怎么设置计算机键盘数字键,电脑右边的数字键不能用怎么办_电脑右边数字键盘用不了的修复方法...
  11. python爬虫+数据分析之NBA球员LBJ13个赛季的数据分析
  12. 专注物联网人工智能服务 云知声芯起航
  13. zigbee PRO 事件
  14. 推荐一个国学资源分享、学术交流网站:龙腾网
  15. Python编程小记:基本语法
  16. Unix 开机时如何自启动oracle
  17. 二次型的标准型、规范型
  18. ensp之 广域网的串口封装协议
  19. 你业余时间在做什么?
  20. thinkpad如何屏蔽bios更新 提示电池_华硕(圣骑)100系 200系 BIOS更新支持8代CPU软件刷新...

热门文章

  1. Fatal License Error8Unable to checkout a viewer license necessary for use of the Questa intel Starte
  2. 通过whl文件安装pymongo
  3. 如果华为手机升级EMUI10后,电池耗电很快!要记得调整这3个设置
  4. Java的数据类型和c语言数据类型的区别
  5. 小黑小波比.清空div标签内容
  6. Leetcode171. Excel 表列序号
  7. 战神引擎php,战神引擎php接口对接文档
  8. photoshop制作十二点钟光线金属字
  9. BBdoc文件管理助手V1.24升级通知 详见官网:http://www.bbdoc.cn
  10. 重磅开启!2020中国高校计算机大赛——华为云大数据挑战赛