走过平凡人生、留下平凡足迹 注册 | 登陆

FleaPHP权限解决方案

php">fleaphp提供了现成的权限解决方案——RBAC,下面我把如何使用RBAC完成权限操作进行一个
简单的介绍。

  使用该解决方案可以达到的效果如下:

1 如用户进入需验证的页面时没有登陆,则跳出出错页面(出错页面需要自己定义,下同)。
2 可设置某一个Controller为全部需要验证,或者全部不需要验证。
3 可设置某一个Controller需要以哪几种身份登陆后才可以使用。
4 可设置某一个Controller中的哪些Action需要验证,哪些Action不需要验证。
5 可设置某一个Controller中的一个Action需要以哪几种身份登陆后才可以使用。
6 个人觉得,FleaPHP里的RBAC已经将权限里所需要的绝大多数情况都考虑进去了,值得大家花时间了解一下。


  介绍之前先说明一下,我假设看这篇文章的人已经有了一定的PHP及FleaPHP的使用基础,文章
中不会描述如何解决一些基本的问题。但,我会尽量以我理解的方式给每一步做出一些说明文字。
希望这样会对大家有所帮助。

  我们先来看一张图(感谢tsingson,这图和我所讲的大部分内容都是他教我的)



  从上图中,我们可以看见RBAC在整个过程中起到什么作用。而这篇文章就是讲述在FleaPHP中如何调用RBAC。
在你希望进行权限设定的那个调度器(index.php)里加上如下代码:

 

PHP代码
  1. //应用程序要使用的 url 调度器,默认的是FLEA_Dispatcher_Simple   
  2. set_app_inf('dispatcher','FLEA_Dispatcher_Auth');   
  3.   
  4. //默认权限参数文件 其中 FILE_PATH为你安装FleaPHP的路径,默认为null   
  5. //SHOP例子里是这么设定的   
  6. //'defaultControllerACTFile' => dirname(__FILE__) . DS . 'DefaultACT.php',   
  7. //只要能出来都行   
  8. set_app_inf('defaultControllerACTFile', FILE_PATH . '/Config/DefaultACT.php');   
  9.   
  10. //用户没有权限访问控制器或控制器方法时,要调用的处理程序   
  11. set_app_inf('dispatcherAuthFailedCallback''ON_DOOR');   
  12.   
  13. //指示 RBAC 组件是否在没有找到控制器的 ACT 文件时,是否使用默认 ACT,系统默认为 false   
  14. set_app_inf('autoQueryDefaultACTFile', true);  

以上这些设定,也可以在你自己的(不要去动FleaPHP自带的那个)Default_APP_INF.php文件里完成********

然后是写下你的ON_DOOR函数,个人建议也放在调度器里比较合理。

 

PHP代码
  1. function ON_DOOR()   
  2. {   
  3.         die('没有权限');   
  4. }   
  5. //这里自由定义你希望的页面  

 

在这里给出tsingson的建议,个人觉得比较友好。

1 先显示“没有权限,需要注册会员身份并需要登录....", 给用户一个友好的反馈
2 接着 记录用户当前 URL, 以作为登录成功后,直接跳转到这个 URL ,让用户操作连续
3 最后,显示登录界面
如果你的登陆系统不是按照FleaPHP标准来的。我的意思是,你使用了属于自己的那一套判断
用户是否登陆,用户的权限是什么。那么,你需要进行以下操作。如果已经使用了FleaPHP的标准,
那就直接跳过这一步。

  在你的登陆模块里增加以下内容,以便让RBAC可以正常运行。

 

 

PHP代码
  1. $tmpRBAC = array();   
  2. //这里是用户名   
  3. $tmpRBAC['USERNAME'] = $user['uid'];   
  4.   
  5. //这里是用户表的primaryKey ID   
  6. $tmpRBAC['ID'] = $user['id'];   
  7.   
  8. //这里是你所设定的权限等级   
  9. $tmpRBAC['RBAC_ROLES'][0] = 'SYSTEM_ADMIN';   
  10.   
  11. //指示 RBAC 组件用什么键名在 session 中保存用户数据(可以直接设定,默认值为RBAC_USERDATA)   
  12. $tmpKey = get_app_inf('RBACSessionKey');   
  13.   
  14. $_SESSION[$tmpKey] = $tmpRBAC;  

最后编辑DefaultACT.php文件,大致上如下样子。

 

 

PHP代码
  1. <?php   
  2. return array(   
  3.         Login'        => array(  
  4.                 'allow' => RBAC_EVERYONE,  
  5.                 'Add'        => array(  
  6.                         'allow'        => 'SYSTEM_ADMIN',  
  7.                 ),  
  8.         ),  
  9.         'Manage'        => array(  
  10.                 'allow'        => RBAC_EVERYONE,  
  11.                 'deny'        => RBAC_NO_ROLE,   
  12.         ),   
  13. );   
  14. ?>  

 

简单说明一下Login,Manage都是Controller,对他们进行设定,就是对该Controller的权限进行设定。
大家注意,Login里有一个Add,这是指Login里的某一个方法,在这里,设定为只有SYSTEM_ADMIN才
可以操作。

Tags: php, 教程, fleaphp, mvc

« 上一篇 | 下一篇 »

Trackbacks

点击获得Trackback地址,Encode: UTF-8 点击获得Trackback地址,Encode: GB2312 or GBK 点击获得Trackback地址,Encode: BIG5

发表评论

评论内容 (必填):