示例#1
0
 public static function AccessDecision($appName = MODULE_NAME)
 {
     //检查是否需要认证
     if (RBAC::checkAccess()) {
         //存在认证识别号,则进行进一步的访问决策
         $accessGuid = md5($appName . CONTROLLER_NAME . ACTION_NAME);
         //判断是否超级管理员,是无需进行权限认证
         if (Admin::getInstance()->isAdministrator() !== true) {
             //认证类型 1 登录认证 2 实时认证
             if (C('USER_AUTH_TYPE') == 2) {
                 //加强验证和即时验证模式 更加安全 后台权限修改可以即时生效
                 //通过数据库进行访问检查
                 $accessList = RBAC::getAccessList(Admin::getInstance()->id);
             } else {
                 // 如果是管理员或者当前操作已经认证过,无需再次认证
                 if (session($accessGuid)) {
                     return true;
                 }
                 //登录验证模式,登录后保存的可访问权限列表
                 $accessList = session("_ACCESS_LIST");
             }
             //判断是否为组件化模式,如果是,验证其全模块名
             $controller = defined('P_CONTROLLER_NAME') ? P_CONTROLLER_NAME : CONTROLLER_NAME;
             if (!isset($accessList[strtoupper($appName)][strtoupper($controller)][strtoupper(ACTION_NAME)])) {
                 //验证登录
                 if (self::checkLogin() == true) {
                     //做例外处理,只要有管理员帐号,都有该项权限
                     if ($appName == "Admins" && in_array(CONTROLLER_NAME, array("Index", "Main")) && in_array(ACTION_NAME, array("index"))) {
                         session($accessGuid, true);
                         return true;
                     }
                     //如果是public_开头的验证通过。
                     if (substr(ACTION_NAME, 0, 7) == 'public_') {
                         session($accessGuid, true);
                         return true;
                     }
                     //内容模块特殊处理
                     if ($appName == 'Home' && CONTROLLER_NAME == 'Home') {
                         session($accessGuid, true);
                         return true;
                     }
                 }
                 session($accessGuid, false);
                 return false;
             } else {
                 session($accessGuid, true);
             }
         } else {
             //超级管理员直接验证通过,且检查是否登录
             if (self::checkLogin()) {
                 return true;
             }
             return false;
         }
     }
     return true;
 }