php通用权限管理设计
在这个项目设计之前,老板要求使用权限设计,我比较了一些设计方式,感觉都不错,于是综合了一下,自己写一种权限管理
在权限这一块出于安全性考虑,我验证的比较复杂,或许存在不足,如有意见可以交流
一: 管理员表(如下图)
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通用权限管理设计相关推荐
- python通用权限管理框架图_通用权限管理设计篇_设计模式
摘要: 本文讲的是通用权限管理设计篇_设计模式, 博客地址:http://www.blogjava.net/amigoxie/ 一.引言 因为做过的一些系统的权限管理的功能虽然在逐步完 ...
- 通用权限管理设计 之 数据权限
阅读目录 前言 初步分析 通用查询机制 数据权限规则 实际应用 结语 前言 前一篇文章<通用权限管理设计 之 数据库设计方案>介绍了[主体]- [领域] - [权限]( who.what. ...
- 通用权限管理设计篇_设计模式
摘要: 本文讲的是通用权限管理设计篇_设计模式, 博客地址:http://www.blogjava.net/amigoxie/ 一.引言 因为做过的一些系统的权限管理的功能虽然在逐步完 ...
- (转)通用权限管理设计 之 数据权限
转自:leo's Space http://www.cnblogs.com/leoxie2011/archive/2012/03/20/2408542.html 阅读目录 前言 初步分析 通用查询机制 ...
- (转)通用权限管理设计 之 数据库结构设计
转自:leo's Space http://www.cnblogs.com/leoxie2011/archive/2011/05/19/2050626.html 通用权限管理设计 之 数据库结构设计 ...
- java 通用权限管理_通用权限管理设计篇(一)
一.引言 因为做过的一些系统的权限管理的功能虽然在逐步完善,但总有些不尽人意的地方,总想抽个时间来更好的思考一下权限系统的设计. 权限系统一直以来是我们应用系统不可缺少的一个部分,若每个应用系统都重新 ...
- 通用权限管理设计篇(一)
一.引言 因为做过的一些系统的权限管理的功能虽然在逐步完善,但总有些不尽人意的地方,总想抽个时间来更好的思考一下权限系统的设计. 权限系统一直以来是我们应用系统不可缺少的一个部分,若每个应用系统都重新 ...
- 通用权限管理设计篇(二)——数据库设计
让我们接着来进行数据库的设计.在数据库建模时,对于N对N的关系,一般需要加入一个关联表来表示关联的两者的关系.初步估计一下,本系统至少需要十张表,分别为:权限表.用户表.角色表.组表.用户权限关联表. ...
- 系统权限管理设计 (转:http://blog.csdn.net/chexlong/article/details/37697555)
权限设计(转:http://blog.csdn.net/chexlong/article/details/37697555) 1. 前言: 权限管理往往是一个极其复杂的问题,但也可 ...
最新文章
- How to create DBFS file system
- snmp在企业网中的简单应用
- 微信小程序项目实战知识点总结(swiper组件自适应高度,自定义弹出层,悬浮按钮,虚拟键盘)...
- jQuery hash 插件
- Windows Server 2008 配置使用动态IP和备用地址
- python下载网页中的pdf文件_Python读取网页上的pdf文件,输出字符串
- 动态规划系列问题—从小白到大佬的入门、进阶之旅!!!
- 做游戏,学编程(C语言) 4 flappy bird
- 若变量已正确定义并赋值,不符合c语言语法的表达式是____.,若变量已正确定义并赋值,表达式______不符合C语言语法.A、a*b/c; B、3.14%2 C、2,b D、a/b/...
- 怎么设置计算机键盘数字键,电脑右边的数字键不能用怎么办_电脑右边数字键盘用不了的修复方法...
- python爬虫+数据分析之NBA球员LBJ13个赛季的数据分析
- 专注物联网人工智能服务 云知声芯起航
- zigbee PRO 事件
- 推荐一个国学资源分享、学术交流网站:龙腾网
- Python编程小记:基本语法
- Unix 开机时如何自启动oracle
- 二次型的标准型、规范型
- ensp之 广域网的串口封装协议
- 你业余时间在做什么?
- thinkpad如何屏蔽bios更新 提示电池_华硕(圣骑)100系 200系 BIOS更新支持8代CPU软件刷新...
热门文章
- Fatal License Error8Unable to checkout a viewer license necessary for use of the Questa intel Starte
- 通过whl文件安装pymongo
- 如果华为手机升级EMUI10后,电池耗电很快!要记得调整这3个设置
- Java的数据类型和c语言数据类型的区别
- 小黑小波比.清空div标签内容
- Leetcode171. Excel 表列序号
- 战神引擎php,战神引擎php接口对接文档
- photoshop制作十二点钟光线金属字
- BBdoc文件管理助手V1.24升级通知 详见官网:http://www.bbdoc.cn
- 重磅开启!2020中国高校计算机大赛——华为云大数据挑战赛