PHP会员权限控制-很详细(转)
我的通用权限系统设计是更换权限时候尽量不要涉及到代码修改,来自chinaunix论坛,今天转过来看看。希望对大家有所帮助,对PHP100的朋友有个很高的提升。部分代码我们会上传到bbs.php100.com 论坛 /* *控制访问表 * 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 functio |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |