通用权限系统设计实现
2015-04-25 14:36
471 查看
<?php /* *控制访问表 * 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类设置验证
<?php 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); }
<?php /* *登录信息基本类 *权限表可以缓存数据,登录时候恢复。 */ class mybase { b9aa 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目录里面
<?php class myUser extends mybase { } ?>
![](http://cupic.img168.net/bbsfile/forum/month_1004/10041621002a08c3f5d3d41769.gif)
![](http://cupic.img168.net/bbsfile/forum/month_1004/1004162100ade51a52e1de4c85.png)
相关文章推荐
- 用户权限设计 ASP.NET系统用户权限设计与实现、用户认证管理设计方案、通用数据权限管理系统设计
- 通用权限系统框架功能实现设计
- 通用权限系统框架功能实现设计
- C# ASP.NET 权限设计 完全支持多数据库多语言包的通用权限管理系统组件源码
- 简洁常用权限系统的设计与实现(一):构造权限菜单树的N(N>=4)种方法
- 通用系统的权限设计
- 通用权限控制系统--系统设计
- 实现业务系统中的用户权限管理--设计篇
- 【通用权限管理】角色的分类管理,角色-用户组-职位职务-系统角色的设计上的迷惑也解开
- 通用用户权限系统设计
- 通用权限管理系统组件 (GPM - General Permissions Manager) 中实现按部门组织机构设置权限
- 通用权限实现的核心设计思想
- 设计实现业务系统中的用户权限管理
- 实现业务系统中的用户权限管理--设计篇
- 用户和角色:通用权限管理系统数据库表结构如何设计?
- 我的权限系统设计实现MVC4 + WebAPI + EasyUI + Knockout
- 用户权限设计(三)——通用数据权限管理系统设计
- 实现业务系统中的用户权限管理--设计篇
- 设计与实现的简单和经常使用的权限系统(五岁以下儿童):不维护节点的深度level,手工计算level,树形结构
- J2ee通用系统权限设计