找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1964|回复: 1

[教程] PHP会员权限控制-很详细(转)

[复制链接]
发表于 2013-4-12 09:15:32 | 显示全部楼层 |阅读模式 来自 广东省湛江市
  1. 我的通用权限系统设计是更换权限时候尽量不要涉及到代码修改,来自chinaunix论坛,今天转过来看看。希望对大家有所帮助,对PHP100的朋友有个很高的提升。部分代码我们会上传到bbs.php100.com 论坛
  2.   /*
  3.   *控制访问表
  4.   * acl值 功能
  5.   * 1 需要登录
  6.   * 2 自身修改
  7.   * 4 需要组的权限集合
  8.   * 8 需要身份访问集合
  9.   * 16 身份被禁止访问
  10.   * 32 可访问的日期
  11.   * 64 可访问的周日
  12.   * 128 可访问的时间
  13.   * 256 输入密码才能访问
  14.   * 512 超级管理使用
  15.   */
  16.   class aclACL extends acl {
  17.   public $routername='acl';
  18.   public $aclid='2'; //权限资源ID,如果登录人员没有拥用这个权限那么其(下面)它值都为0也不能访问
  19.   public $roledisable=array(9); //禁用身份
  20.   public $pwd=123456; //密码访问 ACL->noPwd();
  21.   public $date=array('begin'=>0,'end'=>0); //允许日期之间
  22.   public $hours=array('begin'=>0,'end'=>0); //一日内小时区间
  23.   public $weeks=array('begin'=>0,'end'=>0); //一周内周一到周七
  24.   public $aclgroup=array('create'=>'4,45,8'); //create需要的组才能创建
  25.   public $aclrole=array('all'=>'6','create'=>'7,95,78');  //create需要的角色才能创建,该组需要ID为6的角色才能访问
  26.   public $acl=array('all'=>0,
  27.   'index'=>4, //表列4表示检查组的组合
  28.   'delete'=>1, //删除只登录后删除,当然呆以设置为2或4
  29.   'update'=>1, //更新提交只能登录后才能更新,在这里做也防止非法、post,edit是不能访问显示编辑内容页
  30.   'createForm'=>1, //也不能新提交数据库
  31.   'edit'=>0, //登录才显示编辑框
  32.   'show'=>0, //不用登录也能显示
  33.   'create'=>1); //创新表单需要登录操作 可以设置某个组才能创建
  34.   }
  35.   ?>
  36.   复制代码这个是要认证的文件模块是acl
  37.   每当用户访问acl模块时候,如果开启了认证那么会调用这个类
  38.   然后这个类会根据$acl 的all或index等值去做认证检查。
  39.   把这个文件放在router/acl目录里面就可以了,框架会自动认证如果用户没有相应的正向授权是无法访问相应的限制的。
  40.   比如crud create方法 负向权限为17 那按照前面解释应该是 需要登录和组授权 就是$aclgroup 数组中create的4 45  8三个组,
  41.   首先会员没有登录将提示登录,如果会员不在这三个组是无法访问该方法的会提示没有权限。
  42.   目前router可以自己根据情况开启用acl控制
  43.   方法是在xxxxRouter.class.php文件中 添加 public function isAcl(){}
  44.   可以返回权限文件名比如返回curd,那么自动会调用curdACL.class.php类和名
  45.   curdRouter类设置验证
  46.   class curdRouter extends controller{
  47.   //返回 RBAC 控制访问列表验证类默认是跟router同名也就是curd
  48.   //可以不写这个函数,那么不会启用通用权限系统。
  49.   public function isAcl(){}
  50.   public function index()
  51.   {
  52.   $booktype=M('booktype');
  53.   $this->pager=C('pager');//取得分类
  54.   $this->pager->setPager($booktype->count(),10,'page');//取得数据总数中,设置每页为10
  55.   $this->assign('list',$booktype->orderby('bookid  desc')->limit($this->pager->offset(),10)->fetch()->getRecord());
  56.   }
  57.   public function login(){ //登录页面
  58.   }
  59.   public function logout(){ //退出页面
  60.   MY()->logout(); //退出登录
  61.   redirect(url_for('guestbook/index'),'退出成功',3);
  62.   }
  63.   public function noAcl($mask) { //处理一下如果没有权限转向登录
  64.   redirect(url_for('guestbook/login'),'需要登录',3);
  65.   }
  66.   public function loginpost() { //登录提交地方 简单处理下登录认证
  67.   if($_POST['author']=='queryphp'&&md5($_POST['pwd'])==md5('123456'))
  68.   {
  69.   MY()->setLogin(); //设置登录状态
  70.   redirect(url_for('guestbook/adminlist'),'登录成功',3);
  71.   }
  72.   redirect(url_for('guestbook/login'),'登录失败',3);
  73.   }
  74.   复制代码
  75.   /*
  76.   *登录信息基本类
  77.   *权限表可以缓存数据,登录时候恢复。
  78.   */
  79.   class mybase {
  80.   public $options=array();
  81.   public $uid;
  82.   public $username;
  83.   public $isadmin;
  84.   public $role=array(); //我使用的身份
  85.   public $group=array(); //我所在组
  86.   public $grouprole=array(); //组的身份
  87.   public $mygroupMar=array(); //我拥有管理的组
  88.   public $mygroupOwn=array(); //属于我的组
  89.   public $acl=array(); //主动控制表 groupacl和myacl控制权限集合 内容是rbac的rbacid
  90.   public $groupacl=array(); //组拥用的控制权限
  91.   public $myacl=array(); //我的身份拥用的控制权限
  92.   public $loginfaild=0; //登录失败次数 如果超过这个数应该禁止IP登录几分种
  93.   复制代码这是基本
  94.   可以把myUser.class.php放在项目lib目录里面
  95.   复制代码使用MY()函数就可以取得myUser了。
复制代码
 
  
  
  
  





发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2013-4-12 15:49:18 | 显示全部楼层 来自 北京市
嗯,讲解的很详细,很不错

评分

参与人数 1金币 +5 收起 理由
抢楼评分专号 + 5 很幸运,你获得了抢楼奖励!

查看全部评分

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-5-5 05:00 , Processed in 0.041759 second(s), 9 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表