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; }