Exemplo n.º 1
0
 /**
  * 生成菜单
  * 从配置文件中取出菜单的数组
  * 查看这个数组是否存在childs元素
  * 如果存在childs元素则用这个数组与当前用户允许的访问的模块和操作进行匹配
  * 如果匹配到了就把其放入menu数组中去
  * 如果不存在childs则根据link来切割获取module和action
  * 并判断其是否在允许访问的列表中,如果在则将其允许访问的标志放入menu中去
  */
 protected function menu()
 {
     $a = $_SESSION;
     if (isset($_SESSION[C('USER_AUTH_KEY')])) {
         // 显示菜单项
         $menu = array();
         if (isset($_SESSION['menu1' . $_SESSION[C('USER_AUTH_KEY')]])) {
             // 如果已经缓存,直接读取缓存
             // $menu = $_SESSION['menu' . $_SESSION[C('USER_AUTH_KEY')]];
         } else {
             $list = C('MENU');
             if (isset($_SESSION['_ACCESS_LIST'])) {
                 // $accessList = $_SESSION['_ACCESS_LIST'];
                 $accessList = Rbac::getAccessList($_SESSION[C('USER_AUTH_KEY')]);
             } else {
                 $accessList = Rbac::getAccessList($_SESSION[C('USER_AUTH_KEY')]);
             }
             // var_dump($accessList);exit();
             $menu = $this->get_menu($list, $accessList);
             // $_SESSION['menu' . $_SESSION[C('USER_AUTH_KEY')]] = $menu;
         }
         // var_dump($menu);exit();
         $this->assign('menu', $menu);
     }
 }
Exemplo n.º 2
0
/**
 * @param string $access
 * @return bool
 */
function check_access($access = "")
{
    $path = explode('/', strtoupper($access));
    $accessList = \Org\Util\Rbac::getAccessList($_SESSION[get_opinion('USER_AUTH_KEY')]);
    if ((int) $_SESSION[get_opinion('USER_AUTH_KEY')] == 1 || $accessList[$path[0]][$path[1]][$path[2]] != '') {
        return true;
    } else {
        return false;
    }
}
Exemplo n.º 3
0
 /**
  * 得到菜单
  * @return array
  */
 protected function getMenu()
 {
     $menu = C('MENU');
     // 主菜单
     $mainMenu = array();
     // 已被映射过的键值
     $mapped = array();
     // 访问权限
     $access = $_SESSION['_ACCESS_LIST'];
     if (empty($access)) {
         $authId = $_SESSION[C('USER_AUTH_KEY')];
         $access = \Org\Util\Rbac::getAccessList($authId);
     }
     $authGroup = strtoupper(C('GROUP_AUTH_NAME'));
     // 处理主菜单
     foreach ($menu as $key => $menuItem) {
         // 不显示无权限访问的主菜单
         if (!$_SESSION[C('ADMIN_AUTH_KEY')] && !array_key_exists(strtoupper($key), $access[$authGroup])) {
             continue;
         }
         // 主菜单是否存在映射
         if (isset($menuItem['mapping'])) {
             // 映射名
             $mapping = $menuItem['mapping'];
             // 新的菜单键值
             if (!empty($mapped[$mapping])) {
                 $key = "{$mapped[$mapping]}-{$key}";
                 $mapping = $mapped[$mapping];
             } else {
                 $key = "{$mapping}-{$key}";
             }
             // 需要映射的键值已存在,则删除
             if (isset($mainMenu[$mapping])) {
                 $mainMenu[$key]['name'] = $mainMenu[$mapping]['name'];
                 $mainMenu[$key]['target'] = $mainMenu[$mapping]['target'];
                 unset($mainMenu[$mapping]);
                 $mapped[$mapping] = $key;
             }
             continue;
         }
         $mainMenu[$key]['name'] = $menuItem['name'];
         $mainMenu[$key]['target'] = $menuItem['target'];
         //如果默认的target用户无权访问,则显示sub_menu中的用户有权访问的第一个页面
         $actions = $access[$authGroup][strtoupper($key)];
         $action = explode('/', strtoupper($mainMenu[$key]['target']));
         while (!$_SESSION[C('ADMIN_AUTH_KEY')] && !array_key_exists($action[1], $actions)) {
             $nextSubMenu = next($menu[$key]['sub_menu']);
             if (empty($nextSubMenu)) {
                 break;
             }
             $mainMenu[$key]['target'] = key(current($nextSubMenu));
             $action = explode('/', strtoupper($mainMenu[$key]['target']));
         }
     }
     // 子菜单
     $subMenu = array();
     $ctrlName = CONTROLLER_NAME;
     if (isset($menu[$ctrlName]['mapping'])) {
         $ctrlName = $menu[$ctrlName]['mapping'];
     }
     $actions = $access[$authGroup];
     // 主菜单如果为隐藏,则子菜单也不被显示
     foreach ($menu[$ctrlName]['sub_menu'] as $item) {
         // 子菜单是否需要显示
         if (isset($item['hidden']) && true === $item['hidden']) {
             continue;
         }
         $route = array_shift(array_keys($item['item']));
         $action = explode('/', strtoupper($route));
         // 不显示无权限访问的子菜单
         if (!$_SESSION[C('ADMIN_AUTH_KEY')] && (!array_key_exists($action[0], $actions) || !array_key_exists($action[1], $actions[$action[0]]))) {
             continue;
         }
         // 子菜单是否有配置
         if (!isset($item['item']) || empty($item['item'])) {
             continue;
         }
         $routes = array_keys($item['item']);
         $itemNames = array_values($item['item']);
         $subMenu[$routes[0]] = $itemNames[0];
     }
     unset($menu);
     return array('main_menu' => $mainMenu, 'sub_menu' => $subMenu);
 }