您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2552|回复: 0

5行代码搞定基于Auth的权限认证

[复制链接]

111

主题

112

帖子

375

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
375
QQ
发表于 2013-8-7 21:25:51 | 显示全部楼层 |阅读模式
在这两天的工作中,用到了基于Auth的权限认证。我在系统中要根据不同的用户,判断用户的各种属性值来给该用户赋予不同的权限。比如:
1、用户是否是管理员?是否具有管理员操作权限?
2、用户积分是否达到某个值,达到了不同值具有不同的权限?
3、用户所在部门是否符合规则,具有某些权限?
4、用户等级是否符合规定值,具有某些特殊权限?
。。。。。。
等等,还有很多很多规则

其实,用Auth来判断用户权限,其原理就是,根据事先订立好的规则来判断该用户指定的属性是否符合规则要求。

通常情况下,只是一个简单的判断,就是通过$auth->check();返回值,来判断该用户是否符合规则。有些时候这样的判断我们在控制器里做,判断后执行不同的代码,或者是在模板中调用,判断后显示不同的模板内容,比如不同的用户显示不同菜单等,这样在模板调用的时候,就会带来很多麻烦。

为了能在整个项目中方便调用,我这里把他写在Common/common.php中,写了一个函数。
  1. /*
  2. $rule,要验证的规则名称;
  3. $uid,用户的id;
  4. $relation,规则组合方式,默认为‘or’,以上三个参数都是根据Auth的check()函数来的,
  5. $t,符合规则后,执行的代码
  6. $f,不符合规则的,执行代码,默认为抛出字符串‘没有权限’
  7. */
  8. function authcheck($rule,$uid,$relation='or',$t,$f='没有权限'){
  9.     import('ORG.Util.Auth');
  10.     $auth=new Auth();
  11.     return $auth->check($rule,$uid,$relation)?$t:$f;
  12. }
复制代码
调用例子:

在模板中调用(例如,判断用户是否具有管理员权限,有显示管理菜单,没有则不显示)
  1. <a href="{:U(GROUP_NAME.'/Login/logout')}" target="_self">退出</a>
  2. <a href="{:U(GROUP_NAME.'/User/changepass')}" target="_self">修改密码</a>
  3. <!--//这里要判断用户权限//-->
  4. {:authcheck('adminmenu',$uid,'or','<a href="/Home/Admin/index">管理中心</a>','')}
复制代码
在控制器中调用:
例如:用户符合规则后,执行函数haha(),不符合的,执行函数nohaha()
  1. class IndexAction extends CommonAction{
  2.     public function index(){
  3.     authcheck('topmenu',session('uid'),'or',$this->haha(),$this->nohaha());
  4.     }
  5.    
  6.     public function haha(){
  7.         echo '符合规则';   
  8.     }
  9.     public function nohaha(){
  10.        echo '不符合规则';
  11.    }
  12. }
复制代码
在控制器中调用的时候,灵活性更大一点,传入的$t 和 $f 两个参数可以是字符串、函数、数组、甚至是true和false都可以。根据自己项目不同的使用场景可以自己进行处理...

简单5行代码,一个函数,搞定整个项目的Auth用户权限认证.~~hah ~~

原文链接:thinkphp.cn


回复

使用道具 举报

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

本版积分规则

      本站部分内容来自互联网,如有侵权,请提前告知,谢谢! WEB开发技术交流群
    Archiver|手机版| QQ

GMT+8, 2018-1-20 16:44 , Processed in 0.071600 second(s), 30 queries .

© 2012-2013 Powered by Discuz! X3. Theme By Yeei!

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