RBAC的授权一定要到操作吗
时间:2011-12-10
来源:互联网
             请问高手们,RBAC的授权一定要到操作吗?有没有授权给模块,全部的操作都继承有权限的做法?
比如:
Node表中有
id name title pid level
2 Article 文章管理 1 2
3 Photo 图片管理 1 2
4 Insert 插入 3 3
5 Update 修改 3 3
在授权的时候,access表中
授了Article模块,由于模块在节点中没有下一层操作的节点,就具有了Article的全部操作权限
由于Photo模块有下一层的操作节点,就必须要再单独授操作权限。
            比如:
Node表中有
id name title pid level
2 Article 文章管理 1 2
3 Photo 图片管理 1 2
4 Insert 插入 3 3
5 Update 修改 3 3
在授权的时候,access表中
授了Article模块,由于模块在节点中没有下一层操作的节点,就具有了Article的全部操作权限
由于Photo模块有下一层的操作节点,就必须要再单独授操作权限。
作者: jxxysong 发布时间: 2011-12-10
是不是大家也和我一样,后台的模块比较多,有些模块权限又不想继续细化到操作权限上。
我对RBAC进行了一点小的修改,基本实现了目的,看看大家有什么斧正之处不?!
我的想法是:进行节点表的判断,如果模块(level=2)下没有操作(level=3),就只验证到模块段即可。
-     //权限认证的过滤器方法
 
-     static public function AccessDecision($appName=APP_NAME)
 
-     {
 
-         //检查是否需要认证
 
-         if(RBAC::checkAccess()) {
 
-             //存在认证识别号,则进行进一步的访问决策
 
-             $accessGuid   =   md5($appName.MODULE_NAME.ACTION_NAME);
 
-             if(empty($_SESSION[C('ADMIN_AUTH_KEY')])) {
 
-                 if(C('USER_AUTH_TYPE')==2) {
 
-                     //加强验证和即时验证模式 更加安全 后台权限修改可以即时生效
 
-                     //通过数据库进行访问检查
 
-                     $accessList = RBAC::getAccessList($_SESSION[C('USER_AUTH_KEY')]);
 
-                 }else {
 
-                     // 如果是管理员或者当前操作已经认证过,无需再次认证
 
-                     if( $_SESSION[$accessGuid]) {
 
-                         return true;
 
-                     }
 
-                     //登录验证模式,比较登录后保存的权限访问列表
 
-                     $accessList = $_SESSION['_ACCESS_LIST'];
 
-                 }
 
-                 //判断是否为组件化模式,如果是,验证其全模块名
 
-                 $module = defined('P_MODULE_NAME')?  P_MODULE_NAME   :   MODULE_NAME;            
 
-                
 
-                 /*  
 
-                  * 若模块节点下未设置操作节点,默认为具有全部操作权限
 
-                  * 相当于仅验证至模块节点,不再继续验证操作节点
 
-                  * modify by jxxysong 2011-12-10
 
-                 */
 
-                 $db    = Db::getInstance();
 
-                         $table = C('RBAC_NODE_TABLE');
 
-                         $sql = "SELECT id, name
 
-                                         FROM ".$table."
 
-                                                 WHERE pid = (
 
-                                                         SELECT id
 
-                                                         FROM xp_node
 
-                                                         WHERE name = '{$module}'
 
-                                                         AND STATUS =1
 
-                                                         AND LEVEL =2 )
 
-                                                 AND STATUS =1
 
-                                                 AND LEVEL =3 ";
 
-                         $nodes = $db->query($sql);
 
-                         if (count($nodes)>0){
 
-                                 $listAccess = $accessList[strtoupper($appName)][strtoupper($module)][strtoupper(ACTION_NAME)];        
 
-                         }else{
 
-                                 $listAccess = $accessList[strtoupper($appName)][strtoupper($module)];
 
-                         }                        
 
-                 /* end modify */
 
-                 if(!isset($listAccess)) {
 
-                     $_SESSION[$accessGuid]  =   false;
 
-                     return false;
 
-                 }
 
-                 else {
 
-                     $_SESSION[$accessGuid]        =        true;
 
-                 }
 
-             }else{
 
-                 //管理员无需认证
 
-                                 return true;
 
-                         }
 
-         }
 
-         return true;
 
- }
作者: jxxysong 发布时间: 2011-12-10
 相关阅读 更多  
      
    热门阅读
-   office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具 office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具阅读:74 
-   如何安装mysql8.0 如何安装mysql8.0阅读:31 
-   Word快速设置标题样式步骤详解 Word快速设置标题样式步骤详解阅读:28 
-   20+道必知必会的Vue面试题(附答案解析) 20+道必知必会的Vue面试题(附答案解析)阅读:37 
-   HTML如何制作表单 HTML如何制作表单阅读:22 
-   百词斩可以改天数吗?当然可以,4个步骤轻松修改天数! 百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!阅读:31 
-   ET文件格式和XLS格式文件之间如何转化? ET文件格式和XLS格式文件之间如何转化?阅读:24 
-   react和vue的区别及优缺点是什么 react和vue的区别及优缺点是什么阅读:121 
-   支付宝人脸识别如何关闭? 支付宝人脸识别如何关闭?阅读:21 
-   腾讯微云怎么修改照片或视频备份路径? 腾讯微云怎么修改照片或视频备份路径?阅读:28 















