Esempio n. 1
0
 protected function get_menu()
 {
     //获取后台菜单缓存
     $AdminMenu = session('AdminMenu');
     //如果缓存为空,即初次登录
     if (count($AdminMenu) != 999) {
         if (in_array(session(C('AUTH_KEY')), C('AUTH_ADMIN'))) {
             //如果认证key存在超级管理组配置中,不读取用户权限直接读取全部可显示菜单
             $map = array('hide' => 0, 'status' => 1);
         } else {
             //如果认证key不存在超级管理组配置中,读取用户权限,根据权限获取用户组
             //实例化Auth权限管理类
             $Auth = new \Common\Libs\Auth();
             //获取当前用户 所在的所有组(即一个用户可以存在于多个用户组中)
             $groups = $Auth->getGroups(session(C('AUTH_KEY')));
             $ids = array();
             if (count($groups) < 1) {
                 $this->error('你没有系统的任何权限!', U('Public/logout'));
             }
             foreach ($groups as $g) {
                 $ids = array_merge($ids, explode(',', trim($g['rules'], ',')));
             }
             $ids = array_unique($ids);
             $map = array('id' => array('in', $ids), 'hide' => 0, 'status' => 1);
         }
         //根据前面生成的查询条件 读取用户组所有权限规则
         $rules = M('AuthRule')->where($map)->field('id,pid,name,title,type,show_type,icon')->order('sort asc')->select();
         //循环所有的记录为其 解析数据
         foreach ($rules as $rid => $rules_one) {
             if ($rules_one['type'] == 1) {
                 //即系统内部权限菜单
                 $rules[$rid]['url'] = U($rules_one['name']);
             } elseif ($rules_one['type'] == 2) {
                 //只为菜单
             } elseif ($rules_one['type'] == 3) {
                 //外部链接
                 $rules[$rid]['url'] = $rules_one['condition'];
             } else {
                 //其他情况
                 $rules[$rid]['url'] = U($rules_one['name']);
             }
             if ($rules_one['icon'] == '') {
                 $rules[$rid]['icon'] = 'icon-other';
             }
         }
         $AdminMenu = list_to_tree2($rules, $pk = 'id', $pid = 'pid', 'children');
         session('AdminMenu', null);
         session('AdminMenu', $AdminMenu);
     }
     return $AdminMenu;
 }
Esempio n. 2
0
function Is_Auth($Auth_Rule)
{
    $Auth = new \Common\Libs\Auth();
    $AUTH_KEY = session(C('AUTH_KEY'));
    //判断当前认证key是否不在 超级管理组配置中,或者当前模块是否为非认证模块
    if (!is_admin($AUTH_KEY) && !in_array(CONTROLLER_NAME, explode(",", C("NOT_AUTH_MODULE")))) {
        //当前权限表达式
        $Auth_Rule = MODULE_NAME . '/' . CONTROLLER_NAME . '/' . ACTION_NAME;
        if (!$Auth->check($Auth_Rule, $AUTH_KEY)) {
            return false;
        } else {
            return true;
        }
    } else {
        return true;
    }
}