|
在这两天的工作中,用到了基于Auth的权限认证。我在系统中要根据不同的用户,判断用户的各种属性值来给该用户赋予不同的权限。比如:
1、用户是否是管理员?是否具有管理员操作权限?
2、用户积分是否达到某个值,达到了不同值具有不同的权限?
3、用户所在部门是否符合规则,具有某些权限?
4、用户等级是否符合规定值,具有某些特殊权限?
。。。。。。
等等,还有很多很多规则
其实,用Auth来判断用户权限,其原理就是,根据事先订立好的规则来判断该用户指定的属性是否符合规则要求。
通常情况下,只是一个简单的判断,就是通过$auth->check();返回值,来判断该用户是否符合规则。有些时候这样的判断我们在控制器里做,判断后执行不同的代码,或者是在模板中调用,判断后显示不同的模板内容,比如不同的用户显示不同菜单等,这样在模板调用的时候,就会带来很多麻烦。
为了能在整个项目中方便调用,我这里把他写在Common/common.php中,写了一个函数。- /*
- $rule,要验证的规则名称;
- $uid,用户的id;
- $relation,规则组合方式,默认为‘or’,以上三个参数都是根据Auth的check()函数来的,
- $t,符合规则后,执行的代码
- $f,不符合规则的,执行代码,默认为抛出字符串‘没有权限’
- */
- function authcheck($rule,$uid,$relation='or',$t,$f='没有权限'){
- import('ORG.Util.Auth');
- $auth=new Auth();
- return $auth->check($rule,$uid,$relation)?$t:$f;
- }
复制代码 调用例子:
在模板中调用(例如,判断用户是否具有管理员权限,有显示管理菜单,没有则不显示)- <a href="{:U(GROUP_NAME.'/Login/logout')}" target="_self">退出</a>
- <a href="{:U(GROUP_NAME.'/User/changepass')}" target="_self">修改密码</a>
- <!--//这里要判断用户权限//-->
- {:authcheck('adminmenu',$uid,'or','<a href="/Home/Admin/index">管理中心</a>','')}
复制代码 在控制器中调用:
例如:用户符合规则后,执行函数haha(),不符合的,执行函数nohaha()- class IndexAction extends CommonAction{
- public function index(){
- authcheck('topmenu',session('uid'),'or',$this->haha(),$this->nohaha());
- }
-
- public function haha(){
- echo '符合规则';
- }
- public function nohaha(){
- echo '不符合规则';
- }
- }
复制代码 在控制器中调用的时候,灵活性更大一点,传入的$t 和 $f 两个参数可以是字符串、函数、数组、甚至是true和false都可以。根据自己项目不同的使用场景可以自己进行处理...
简单5行代码,一个函数,搞定整个项目的Auth用户权限认证.~~hah ~~
原文链接:thinkphp.cn
|
|