我的通用权限系统设计是更换权限时候尽量不要涉及到代码修改,来自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了。
可以看框架文件
project/router目录有一个guestbookRouter.class.php
在后台
取得guestbookRouter.class.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
相关推荐:
javascript 面向对象编程 function是方法(函数)
win2008之IIS7中FTP设置技巧
javascript 日期常用的方法
用按钮触发Javascript动态生成一个表格的代码
php self,$this,const,static,->的使用
asp.net Javascript 的几种写法与提示
让Firefox支持event对象实现代码
jquery 最简单的属性菜单
asp.net(c#)获取内容第一张图片地址的函数
extjs 学习笔记 四 带分页的grid
Windows IIS配置与Ftp服务搭建
JQuery 绑定事件时传递参数的实现方法
ORACLE常用数值函数、转换函数、字符串函数
MSSQL 提取汉字实现语句
实现JavaScript中继承的三种方式
javascript 遮照层效果
JavaScript 接收键盘指令示例
JS 实现双色表格实现代码
牛奶包装带上的秘密—让你知道牛奶真正生产日期
Python+Django在windows下的开发环境配置图解
JS获取dom 对象 ajax操作 读写cookie函数
Python 文件操作实现代码
纯CSS 链接悬停提示效果代码
PHP 字符截取 解决中文的截取问题,不用mb系列
伪静态技术介绍与优缺点分析(较完整篇)
Jquery 学习笔记(一)
理解 JavaScript 预解析
mysql 前几条记录语句之(limit)
ORACLE实例的后台进程
jquery 框架使用教程 AJAX篇
JavaScript中的JSON 中文版翻译
Apache 虚拟目录和默认首页的设置
Dojo 学习笔记入门篇 First Dojo Example
jQuery帮助之CSS尺寸(五)outerHeight、outerWidth
Win2008 蓝屏漏洞揭秘
关于Flex 初始化的research
C# 获取程序集版本、文件版本
Jquery 获取表单text,areatext,radio,checkbox,select值的代码
sqlserver 禁用触发器和启用触发器的语句
javascript的onchange事件与jQuery的change()方法比较
支持IE,Firefox的javascript 日历控件
JavaScript 工具库 Cloudgamer JavaScript Library v0.1 发布
asp 小偷采集程序原理与常用函数方法
刀片服务器五大误区解读
VBS 脚本不能运行 提示Windows无法访问指定设备路径或文件
Flex Data Binding详解
ASP实现防止网站被采集代码
点击按钮后 文本框变为Select下拉列表框
颈椎残废记 站长兄弟请注意保护好自己的身体
javascript DOM编程实例(智播客学习)