public static 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; if (!isset($accessList[strtoupper($appName)][strtoupper($module)][strtoupper(ACTION_NAME)])) { $_SESSION[$accessGuid] = false; return false; } else { $_SESSION[$accessGuid] = true; } } else { return true; } } return true; }
protected function _initialize() { /*if (!session(C('ADMIN_AUTH_KEY'))) { $this->error('请重新登录',U('Admin/index')); } */ define('RES', THEME_PATH . 'common'); define('STATICS', TMPL_PATH . 'static'); //Input::noGPC(); $is_passed = true; if (RBAC::checkAccess()) { $is_passed = RBAC::AccessDecision(); } if ($is_passed == false) { echo '不允许查看'; exit; } $this->assign('action', $this->getActionName()); }
public function _initialize() { import('ORG.RBAC.RBAC'); // 检查认证 if (RBAC::checkAccess()) { //检查认证识别号 if (!$_SESSION[C('USER_AUTH_KEY')]) { //跳转到认证网关 redirect(PHP_FILE . C('USER_AUTH_GATEWAY')); } // 检查权限 if (!RBAC::AccessDecision()) { $this->error('没有权限!'); } } if (isset($_SESSION[C('USER_AUTH_KEY')])) { //显示菜单项 $menu = array(); if (isset($_SESSION['menu' . $_SESSION[C('USER_AUTH_KEY')]])) { //如果已经缓存,直接读取缓存 $menu = $_SESSION['menu' . $_SESSION[C('USER_AUTH_KEY')]]; } else { //读取数据库模块列表生成菜单项 $node = D("Node"); $id = $node->getField("id", "name='" . APP_NAME . "'"); $list = $node->where('level=2 AND status=1 AND pid=' . $id)->field('id,name,title')->order('seqNo asc')->findAll(); $accessList = $_SESSION['_ACCESS_LIST']; foreach ($list as $key => $module) { if (isset($accessList[strtoupper(APP_NAME)][strtoupper($module['name'])]) || $_SESSION['administrator']) { //设置模块访问权限 $module['access'] = 1; $menu[$key] = $module; } } //缓存菜单访问 $_SESSION['menu' . $_SESSION[C('USER_AUTH_KEY')]] = $menu; } $this->assign('menu', $menu); $this->assign("login", true); //显示登录用户名称 $this->assign('loginUserName', $_SESSION['loginUserName']); } parent::_initialize(); }
public function _initialize() { import('ORG.RBAC.RBAC'); /* 检查认证*/ if (!RBAC::checkAccess()) { //检查认证识别号 if (!$_SESSION[C('USER_AUTH_KEY')]) { //跳转到认证网关 redirect(PHP_FILE . C('USER_AUTH_GATEWAY')); } // 检查权限 if (!RBAC::AccessDecision()) { $this->error('没有权限!'); } } import("ORG.Util.Page"); //引用分页类 import("@.Com.ajaxpage"); //引用ajax分页类 }
public static 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; if (!isset($accessList[strtoupper($appName)][strtoupper($module)][strtoupper(ACTION_NAME)])) { $_SESSION[$accessGuid] = false; return false; } else { $_SESSION[$accessGuid] = true; } } else { //管理员无需认证 return true; } } return true; }
static function AccessDecision() { //检查是否需要认证 if (RBAC::checkAccess()) { //检查认证识别号 if (!Session::is_set(C('USER_AUTH_KEY'))) { //跳转到认证网关 redirect(PHP_FILE . C('USER_AUTH_GATEWAY')); } //存在认证识别号,则进行进一步的访问决策 $accessGuid = md5(APP_NAME . MODULE_NAME . ACTION_NAME); if (!Session::is_setLocal('administrator')) { //管理员无需认证 if (C('USER_AUTH_TYPE') == 2) { //加强验证和即时验证模式 更加安全 后台权限修改可以即时生效 //通过数据库进行访问检查 $accessList = RBAC::getAccessList(); } else { // 如果是管理员或者当前操作已经认证过,无需再次认证 if (Session::is_set($accessGuid)) { return; } //登录验证模式,比较登录后保存的权限访问列表 $accessList = Session::get('_ACCESS_LIST'); } if (!isset($accessList[strtoupper(APP_NAME)][strtoupper(MODULE_NAME)][strtoupper(ACTION_NAME)])) { throw_exception(L('_VALID_ACCESS_')); } else { Session::set($accessGuid, true); } } } return true; }
public static 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 $_SESSION[$accessGuid]; } //登录验证模式,比较登录后保存的权限访问列表 $accessList = $_SESSION['_ACCESS_LIST']; } //栏目权限 if (!isset($_SESSION[C('USER_CONTENT_KEY')])) { $table = array('role' => C('RBAC_ROLE_TABLE'), 'user' => C('RBAC_USER_TABLE')); $sql = "select role.typeids from " . $table['role'] . " as role," . $table['user'] . " as user" . " where user.user_id=" . $_SESSION[C('USER_AUTH_KEY')] . " and user.role_id=role.id and role.status=1"; //echo $sql; $rs = M()->query($sql); if ($rs) { $_SESSION[C('USER_CONTENT_KEY')] = $rs[0]['typeids']; } else { $_SESSION[C('USER_CONTENT_KEY')] = ''; } } //判断是否为组件化模式,如果是,验证其全模块名 $module = defined('P_MODULE_NAME') ? P_MODULE_NAME : MODULE_NAME; //追影改写默认为无需认证 只有设置了才验证因为没有添加进node的实在太多 $model_node = new Model(C('RBAC_NODE_TABLE'), NULL); $t2 = $model_node->where("upper(`name`)='" . strtoupper($module) . "' and level=2")->find(); if (!$t2) { $_SESSION[$accessGuid] = false; return false; } $t = $model_node->where("upper(`name`)='" . strtoupper(ACTION_NAME) . "' and level=3 and pid=" . $t2['id'])->find(); //echo $model_node->getLastSql(); if ($t) { //方法存在于node检查是否有权限 if (!isset($accessList[strtoupper($appName)][strtoupper($module)][strtoupper(ACTION_NAME)])) { $_SESSION[$accessGuid] = false; return false; } else { $_SESSION[$accessGuid] = true; return true; } } else { //方法不存在只module检查 if (!isset($accessList[strtoupper($appName)][strtoupper($module)])) { $_SESSION[$accessGuid] = false; return false; } else { $_SESSION[$accessGuid] = true; return true; } } } else { //管理员无需认证 return true; } } return true; }
function _initialize() { $this->getAuth(); //用户信息 $this->u = D('User'); if (!empty($this->uid)) { $r = $this->u->find($this->uid); //echo $this->u->getLastSql(); //var_dump($r); $this->assign('user', $r); } if (C('USER_AUTH_ON')) { import('@.ORG.Util.RBAC_WEB'); $app = 'USER'; } else { import('ORG.Util.RBAC'); $app = APP_NAME; } //var_dump(RBAC::checkAccess()); //exit('xx'); if (RBAC::checkAccess()) { //认证,临时简化版 $this->getAuth(); //var_dump($this->user);exit('s'); if (empty($this->user->uid)) { //是否登录 redirect(C('USER_AUTH_GATEWAY')); //是否有权限 } //var_dump(RBAC::AccessDecision ());exit('x'); if (!RBAC::AccessDecision($app)) { //检查认证识别号 if (!$_SESSION[C('USER_AUTH_KEY')]) { //跳转到认证网关 redirect(C('USER_AUTH_GATEWAY')); } // 没有权限 抛出错误 if (C('RBAC_ERROR_PAGE')) { // 定义权限错误页面 redirect(C('RBAC_ERROR_PAGE')); } else { if (C('GUEST_AUTH_ON')) { $this->assign('jumpUrl', PHP_FILE . C('USER_AUTH_GATEWAY')); } // 提示错误信息 $this->error(L('_VALID_ACCESS_')); } } } else { //不认证 } //exit; // 用户权限检查 /*if (C ( 'USER_AUTH_ON' ) && !in_array(MODULE_NAME,explode(',',C('NOT_AUTH_MODULE')))) { import ( 'ORG.Util.RBAC' ); if (! RBAC::AccessDecision ()) { //检查认证识别号 if (! $_SESSION [C ( 'USER_AUTH_KEY' )]) { //跳转到认证网关 redirect ( PHP_FILE . C ( 'USER_AUTH_GATEWAY' ) ); } // 没有权限 抛出错误 if (C ( 'RBAC_ERROR_PAGE' )) { // 定义权限错误页面 redirect ( C ( 'RBAC_ERROR_PAGE' ) ); } else { if (C ( 'GUEST_AUTH_ON' )) { $this->assign ( 'jumpUrl', PHP_FILE . C ( 'USER_AUTH_GATEWAY' ) ); } // 提示错误信息 $this->error ( L ( '_VALID_ACCESS_' ) ); } } }*/ $this->keywords = C('keywords'); $this->description = C('description'); }
static function AccessDecision($appName = APP_NAME) { //检查是否需要认证 if (RBAC::checkAccess()) { //检查认证识别号 if (!$_SESSION[C('USER_AUTH_KEY')]) { if (C('GUEST_AUTH_ON')) { // 开启游客授权访问 if (!isset($_SESSION['_ACCESS_LIST'])) { // 保存游客权限 RBAC::saveAccessList(C('GUEST_AUTH_ID')); } } else { // 禁止游客访问跳转到认证网关 redirect(PHP_FILE . C('USER_AUTH_GATEWAY')); } } //存在认证识别号,则进行进一步的访问决策 $accessGuid = md5($appName . MODULE_NAME . ACTION_NAME); if (!$_SESSION[C('ADMIN_AUTH_KEY')]) { //管理员无需认证 if (C('USER_AUTH_TYPE') == 2) { //加强验证和即时验证模式 更加安全 后台权限修改可以即时生效 //通过数据库进行访问检查 $accessList = RBAC::getAccessList(); } else { // 如果是管理员或者当前操作已经认证过,无需再次认证 if ($_SESSION[$accessGuid]) { return true; } //登录验证模式,比较登录后保存的权限访问列表 $accessList = $_SESSION['_ACCESS_LIST']; } //判断是否为组件化模式,如果是,验证其全模块名 $module = defined('C_MODULE_NAME') ? C_MODULE_NAME : MODULE_NAME; if (!isset($accessList[strtoupper($appName)][strtoupper($module)][strtoupper(ACTION_NAME)])) { //throw_exception(L('_VALID_ACCESS_')); return false; } else { $_SESSION[$accessGuid] = true; } } } return true; }
public static function AccessDecision($appName = APP_NAME) { //检查是否需要认证 if (RBAC::checkAccess()) { //存在认证识别号,则进行进一步的访问决策 $accessGuid = md5($appName . MODULE_NAME . ACTION_NAME); //判断是否超级管理员,是无需进行权限认证 $ADMIN_AUTH_KEY = session(C('ADMIN_AUTH_KEY')); if (empty($ADMIN_AUTH_KEY)) { //认证类型 1 登录认证 2 实时认证 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; if (!isset($accessList[strtoupper($appName)][strtoupper($module)][strtoupper(ACTION_NAME)])) { if (self::checkLogin() == true) { if ($appName == "Admin" && in_array(MODULE_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 ("Contents" == $appName && "Content" == MODULE_NAME) { session($accessGuid, true); return true; } } session($accessGuid, false); return false; } else { session($accessGuid, true); } } else { //进行登陆检测 if (self::checkLogin()) { return true; } return false; } } return true; }
public static 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]) {by wangcheng if ($_SESSION[strtolower(MODULE_NAME . '_' . ACTION_NAME)]) { return true; } //登录验证模式,比较登录后保存的权限访问列表 //$accessList = $_SESSION['_ACCESS_LIST']; $file = DConfig_PATH . "/AccessList/access_" . $_SESSION[C('USER_AUTH_KEY')] . ".php"; if (!file_exists($file)) { if (null === $authId) { $authId = $_SESSION[C('USER_AUTH_KEY')]; } $accessList = RBAC::getAccessList($authId); if (!file_exists(DConfig_PATH . "/AccessList")) { createFolder(dirname(DConfig_PATH . "/AccessList")); mkdir(DConfig_PATH . "/AccessList", 0777); } RBAC::writeover($file, "return " . RBAC::pw_var_export($accessList) . ";\n", true); if (!C("_access_list")) { foreach ($accessList as $k3 => $v3) { foreach ($accessList[$k3] as $k1 => $v1) { foreach ($accessList[$k3][$k1] as $k => $v) { $p = explode("-", $v); if ($p[1] != 5) { //过滤禁止权限 $_SESSION[strtolower($k1 . '_' . $k)] = $p[1]; } } } } C("_access_list", true); } } else { $accessList = (require $file); if (!C("_access_list")) { foreach ($accessList as $k3 => $v3) { foreach ($accessList[$k3] as $k1 => $v1) { foreach ($accessList[$k3][$k1] as $k => $v) { $p = explode("-", $v); if ($p[1] != 5) { //过滤禁止权限 $_SESSION[strtolower($k1 . '_' . $k)] = $p[1]; } } } } C("_access_list", true); } } } //判断是否为组件化模式,如果是,验证其全模块名 $module = defined('P_MODULE_NAME') ? P_MODULE_NAME : MODULE_NAME; if (!isset($accessList[strtoupper($appName)][strtoupper($module)][strtoupper(ACTION_NAME)])) { $n = substr(ACTION_NAME, 0, 6) == "lookup" ? 1 : 0; $n2 = substr(ACTION_NAME, 0, 6) == "combox" ? 1 : 0; $n3 = substr($module, 0, 7) == "MisAuto" ? 1 : 0; if ($n || $n2 || $n3) { $_SESSION[strtolower(MODULE_NAME . '_' . ACTION_NAME)] = true; } else { $_SESSION[strtolower(MODULE_NAME . '_' . ACTION_NAME)] = false; return false; } } else { $p = explode("-", $accessList[strtoupper($appName)][strtoupper($module)][strtoupper(ACTION_NAME)]); if ($p[1] != 5) { //过滤禁止权限 $_SESSION[strtolower(MODULE_NAME . '_' . ACTION_NAME)] = $p[1]; } else { return false; } } } else { //管理员无需认证 $_SESSION['a'] = true; return true; } } return true; }