实用PHP会员权限控制实现原理分析


Posted in PHP onMay 29, 2011

我的通用权限系统设计是更换权限时候尽量不要涉及到代码修改,来自chinaunix论坛,今天转过来看看。希望对大家有所帮助,对PHP100的朋友有个很高的提升。

/* 
*控制访问表 

* acl值 功能 

* 1 需要登录 

* 2 自身修改 

* 4 需要组的权限集合 

* 8 需要身份访问集合 

* 16 身份被禁止访问 

* 32 可访问的日期 

* 64 可访问的周日 

* 128 可访问的时间 

* 256 输入密码才能访问 

* 512 超级管理使用 

*/ 

class aclACL extends acl { 

public $routername="acl"; 

public $aclid='2'; //权限资源ID,如果登录人员没有拥用这个权限那么其(下面)它值都为0也不能访问 

public $roledisable=array(9); //禁用身份 

public $pwd=123456; //密码访问 ACL->noPwd(); 

public $date=array('begin'=>0,'end'=>0); //允许日期之间 

public $hours=array('begin'=>0,'end'=>0); //一日内小时区间 

public $weeks=array('begin'=>0,'end'=>0); //一周内周一到周七 

public $aclgroup=array("create"=>"4,45,8"); //create需要的组才能创建 

public $aclrole=array("all"=>"6","create"=>"7,95,78"); //create需要的角色才能创建,该组需要ID为6的角色才能访问 

public $acl=array("all"=>0, 

"index"=>4, //表列4表示检查组的组合 

"delete"=>1, //删除只登录后删除,当然呆以设置为2或4 

"update"=>1, //更新提交只能登录后才能更新,在这里做也防止非法、post,edit是不能访问显示编辑内容页 

"createForm"=>1, //也不能新提交数据库 

"edit"=>0, //登录才显示编辑框 

"show"=>0, //不用登录也能显示 

"create"=>1); //创新表单需要登录操作 可以设置某个组才能创建 

} 

?> 
 

这个是要认证的文件模块是acl

每当用户访问acl模块时候,如果开启了认证那么会调用这个类

然后这个类会根据$acl 的all或index等值去做认证检查。

把这个文件放在router/acl目录里面就可以了,框架会自动认证如果用户没有相应的正向授权是无法访问相应的限制的。

比如crud create方法 负向权限为17 那按照前面解释应该是 需要登录和组授权 就是$aclgroup 数组中create的4 45 8三个组,

首先会员没有登录将提示登录,如果会员不在这三个组是无法访问该方法的会提示没有权限。

目前router可以自己根据情况开启用acl控制

方法是在xxxxRouter.class.php文件中 添加 public function isAcl(){}

可以返回权限文件名比如返回curd,那么自动会调用curdACL.class.php类和名

curdRouter类设置验证

class curdRouter extends controller{ 

//返回 RBAC 控制访问列表验证类默认是跟router同名也就是curd 

//可以不写这个函数,那么不会启用通用权限系统。 

public function isAcl(){} 

public function index() 

{ 

$booktype=M("booktype"); 

$this->pager=C("pager");//取得分类 

$this->pager->setPager($booktype->count(),10,'page');//取得数据总数中,设置每页为10 

$this->assign("list",$booktype->orderby("bookid desc")->limit($this->pager->offset(),10)->fetch()->getRecord()); 

} 

public function login(){ //登录页面 

} 

public function logout(){ //退出页面 

MY()->logout(); //退出登录 

redirect(url_for("guestbook/index"),"退出成功",3); 

} 

public function noAcl($mask) { //处理一下如果没有权限转向登录 

redirect(url_for("guestbook/login"),"需要登录",3); 

} 

public function loginpost() { //登录提交地方 简单处理下登录认证 

if($_POST['author']=='queryphp'&&md5($_POST['pwd'])==md5('123456')) 

{ 

MY()->setLogin(); //设置登录状态 

redirect(url_for("guestbook/adminlist"),"登录成功",3); 

} 

redirect(url_for("guestbook/login"),"登录失败",3); 

}

/* 

*登录信息基本类 

*权限表可以缓存数据,登录时候恢复。 

*/ 

class mybase { 

public $options=array(); 

public $uid; 

public $username; 

public $isadmin; 

public $role=array(); //我使用的身份 

public $group=array(); //我所在组 

public $grouprole=array(); //组的身份 

public $mygroupMar=array(); //我拥有管理的组 

public $mygroupOwn=array(); //属于我的组 

public $acl=array(); //主动控制表 groupacl和myacl控制权限集合 内容是rbac的rbacid 

public $groupacl=array(); //组拥用的控制权限 

public $myacl=array(); //我的身份拥用的控制权限 

public $loginfaild=0; //登录失败次数 如果超过这个数应该禁止IP登录几分种

这是基本

可以把myUser.class.php放在项目lib目录里面

复制代码使用MY()函数就可以取得myUser了。

实用PHP会员权限控制实现原理分析

 

实用PHP会员权限控制实现原理分析

 

实用PHP会员权限控制实现原理分析

 
实用PHP会员权限控制实现原理分析
实用PHP会员权限控制实现原理分析
实用PHP会员权限控制实现原理分析
实用PHP会员权限控制实现原理分析
实用PHP会员权限控制实现原理分析
实用PHP会员权限控制实现原理分析
实用PHP会员权限控制实现原理分析
实用PHP会员权限控制实现原理分析
实用PHP会员权限控制实现原理分析
实用PHP会员权限控制实现原理分析
实用PHP会员权限控制实现原理分析
实用PHP会员权限控制实现原理分析
实用PHP会员权限控制实现原理分析
实用PHP会员权限控制实现原理分析
实用PHP会员权限控制实现原理分析
实用PHP会员权限控制实现原理分析
实用PHP会员权限控制实现原理分析
实用PHP会员权限控制实现原理分析
实用PHP会员权限控制实现原理分析
实用PHP会员权限控制实现原理分析
实用PHP会员权限控制实现原理分析
实用PHP会员权限控制实现原理分析
实用PHP会员权限控制实现原理分析

 

可以看框架文件

project/router目录有一个guestbookRouter.class.php

在后台

实用PHP会员权限控制实现原理分析

 

取得guestbookRouter.class.php类名和方法。

然后给这些方法加权限

实用PHP会员权限控制实现原理分析

 

右边有一个应用权限,有一个取消权限,如果取消权限表示没有权限限制

也就是删除权限文件

应用权限 表示给这个类添加权限,会生成一个权限文件。

在project/router/acl/生成 guestbookACL.class.php文件

程序在加载guestbookRouter.class.php时候会检查有没有guestbookACL.class.php权限文件

有就使用权限检证,没有就没有。这样加减权限跟guestbookRouter.class.php文件入口没有一点改动

所以将来加权限方法很方便。
http://queryphp.googlecode.com/files/queryphp_2011_01_27.zip

PHP 相关文章推荐
杏林同学录(九)
Oct 09 PHP
phpmyadmin里面导入sql语句格式的大量数据的方法
Jun 05 PHP
PHP数组循环操作详细介绍 附实例代码
Feb 03 PHP
php上传apk后自动提取apk包信息的使用(示例下载)
Apr 26 PHP
浅析Yii中使用RBAC的完全指南(用户角色权限控制)
Jun 20 PHP
php实现可以设置中奖概率的抽奖程序代码分享
Jan 19 PHP
php操作redis中的hash和zset类型数据的方法和代码例子
Jul 05 PHP
PHP获取当前完整URL地址的函数
Dec 21 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
May 20 PHP
实例分析PHP将字符串转换成数字的方法
Jan 27 PHP
PHP join()函数用法与实例讲解
Mar 11 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
Aug 24 PHP
允许phpmyadmin空密码登录的配置方法
May 29 #PHP
php统计文件大小,以GB、MB、KB、B输出
May 29 #PHP
PHP之数组学习
May 29 #PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
May 29 #PHP
php连接数据库代码应用分析
May 29 #PHP
PHP文件上传原理简单分析
May 29 #PHP
php修改时间格式的代码
May 29 #PHP
You might like
浅析关于PHP位运算的简单权限设计
2013/06/30 PHP
支持生僻字且自动识别utf-8编码的php汉字转拼音类
2014/06/27 PHP
php序列化函数serialize() 和 unserialize() 与原生函数对比
2015/05/08 PHP
大家都应该掌握的PHP关联数组使用技巧
2015/12/25 PHP
YII框架中使用memcache的方法详解
2017/08/02 PHP
CI框架简单分页类用法示例
2020/06/06 PHP
php上传图片并给图片打上透明水印的代码
2010/06/07 Javascript
Ajax执行顺序流程及回调问题分析
2012/12/10 Javascript
JavaScript模块随意拖动示例代码
2014/05/27 Javascript
基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式
2015/10/28 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
JavaScript判断数字是否为质数的方法汇总
2016/06/02 Javascript
JS中递归函数
2016/06/17 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
vue.js框架实现表单排序和分页效果
2017/08/09 Javascript
Angular实现类似博客评论的递归显示及获取回复评论的数据
2017/11/06 Javascript
webpack+react+antd脚手架优化的方法
2018/04/02 Javascript
NodeJS服务器实现gzip压缩的示例代码
2018/10/12 NodeJs
vue自定义指令directive的使用方法
2019/04/07 Javascript
基于js实现逐步显示文字输出代码实例
2020/04/02 Javascript
Vue实现Layui的集成方法步骤
2020/04/10 Javascript
vue cli3适配所有端方案的实现
2020/04/13 Javascript
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
[06:57]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD 选手采访
2021/03/11 DOTA
Python版名片管理系统
2018/11/30 Python
关于numpy.where()函数 返回值的解释
2019/12/06 Python
Python Pillow.Image 图像保存和参数选择方式
2020/01/09 Python
pandas中的数据去重处理的实现方法
2020/02/10 Python
详解python内置常用高阶函数(列出了5个常用的)
2020/02/21 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
2020/03/18 Python
理肤泉美国官网:La Roche-Posay
2018/01/17 全球购物
焊接专业毕业生求职信
2013/10/01 职场文书
2015仓库保管员年终工作总结
2015/05/13 职场文书
单位同意报考证明
2015/06/17 职场文书
党员心得体会范文2016
2016/01/23 职场文书
长辈生日祝福语大全(72句)
2019/08/09 职场文书