php通用权限管理设计
来源:互联网 发布:php服务端开发 编辑:程序博客网 时间:2024/06/12 15:19
在这个项目设计之前,老板要求使用权限设计,我比较了一些设计方式,感觉都不错,于是综合了一下,自己写一种权限管理
在权限这一块出于安全性考虑,我验证的比较复杂,或许存在不足,如有意见可以交流
一: 管理员表(如下图)
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 ,当然权限问题是通用的,和框架没太大关系
代码如下
<?phpnamespace 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
0 0
- php通用权限管理设计
- 通用权限管理设计
- 通用权限管理设计篇
- 通用权限管理设计篇
- 通用权限管理设计篇
- 通用权限管理设计篇
- 通用权限管理设计 之 数据权限
- 通用权限管理设计 之 数据权限
- 通用权限管理设计 之 数据权限
- 通用权限管理设计 之 数据权限
- 通用权限管理设计 之 数据权限
- 通用权限管理设计 之 数据权限
- 通用权限管理设计 之 数据权限
- 通用权限管理设计 之 数据权限
- 通用权限管理设计 之 数据权限
- 通用数据权限管理系统设计
- 通用数据权限管理系统设计
- 通用数据权限管理系统设计
- Spring MVC学习(四)-------Controller接口控制器详解4
- 波特率与比特率
- 使用IDEA创建SpringBoot项目
- 微服务Spring Cloud例子
- 算法训练之递归
- php通用权限管理设计
- linux安装mysql
- java中class类
- Spring MVC学习(四)-------Controller接口控制器详解5
- 剑指offer07:用两个栈实现队列
- 《异类》读书笔记
- 事务
- 2016东莞市特长生考试 字串距离(dp)
- Spring MVC学习(四)-------Controller接口控制器详解6