0 || $index){ $auth_rule_model = new AuthRule(); //获取角色授权id列表 $auth_group_rule_model = new AuthGroupRule(); $rule_data = $auth_group_rule_model->where(['role_id' => $login_er['role_id']])->column('rule_id'); $group = $auth_rule_model->field('rule_val,group_name')->where([['id','in',$rule_data], ['type','<>',1]])->select(); $controller_group = []; $auth_group = []; foreach ($group as $key => $value) { $auth_group[] = $value['group_name']; $controller_group[$value['group_name']][] = $value['rule_val']; } $auth_group = array_unique($auth_group); foreach ($menu as $key => &$value) { if (!in_array($value['group'], $auth_group)) { unset($menu[$key]); } else { if (empty($value['_child'])) { //只有一级 if (!in_array($value['url'], $controller_group[$value['group']])) { unset($menu[$key]); } foreach ($value['_auth'] as $k3 => $v3) { if (!in_array($v3['url'], $controller_group[$value['group']])) { unset($menu[$key]['_auth'][$k3]); } } } else { foreach ($value['_child'] as $key1 => &$val) { if (!in_array($val['url'], $controller_group[$value['group']])) { unset($menu[$key]['_child'][$key1]); } foreach ($val['_auth'] as $k1 => $v1) { if (!in_array($v1['url'], $controller_group[$value['group']])) { unset($menu[$key]['_child'][$key1]['_auth'][$k1]); unset($menu[$key]['_child'][$key1]['_auth'][$k1]); } } } } } } } //如果是总账号要把不让总账号可见的权限剔除 if($login_er['rank'] === 0){ foreach ($menu as $key => &$value) { if ($value['is_total_visible'] == 0) { unset($menu[$key]); } else { if (!empty($value['_child'])) { //只有一级 foreach ($value['_child'] as $key1 => &$val) { if ($val['is_total_visible'] == 0) { unset($menu[$key]['_child'][$key1]); } // foreach ($val['_auth'] as $k1 => $v1) { // if (!in_array($v1['url'], $controller_group[$value['group']])) { // unset($menu[$key]['_child'][$key1]['_auth'][$k1]); // unset($menu[$key]['_child'][$key1]['_auth'][$k1]); // } // } } } } } } $group_name = ''; $auth_name = []; $three_level = []; foreach ($menu as $key1 => &$menu1) { if (empty($menu1['_child'])) { //一级为最后一级 $param_base = empty($menu1['param']) ? [] : $menu1['param']; $param_r = []; if (!empty($menu1['_param'])) { $param_r = ['r' => $menu1['_param'][0]['r']]; } if (!array_key_exists('url', $menu1)) { continue; } $menu1['linkurl'] = getMenuLinkurl($menu1['module'],$menu1['group'], $menu1['url'], array_merge($param_base, $param_r)); if ($controller_name == $menu1['group']) { $menu1['cur'] = 1; //一级高亮 $group_name = $menu1['url']; //当前组和权限组 $urls = array_column($menu1['_auth'], 'url'); $auth_name = array_merge([$menu1['url']], $urls); if (!empty($menu1['_param'])) { $three_level = $menu1['_param']; $r = input('param.r'); foreach ($three_level as $k => $v) { $three_level[$k]['linkurl'] = getMenuLinkurl($menu1['module'],$menu1['group'], $menu1['url'], array_merge($param_base, ['r' => $v['r']])); if ($r == $v['r']) { $three_level[$k]['cur'] = 1; } } } } } else { foreach ($menu1['_child'] as $key2 => &$menu2) { //二级是最后一级 $param_base = empty($menu2['param']) ? [] : $menu2['param']; $param_r = []; if (!empty($menu2['_param'])) { $param_r = ['r' => $menu2['_param'][0]['r']]; } if (!array_key_exists('url', $menu2)) { continue; } $menu2['linkurl'] = getMenuLinkurl($menu1['module'],$menu1['group'], $menu2['url'], array_merge($param_base, $param_r)); $urls = array_column($menu2['_auth'], 'url'); $arr = array_merge([$menu2['url']], $urls); if ($controller_name == $menu1['group'] && in_array($action_name, $arr)) { $menu1['cur'] = 1; //一级高亮 $menu2['cur'] = 1; //二级高亮 $group_name = $menu2['url']; //当前组和权限组 $auth_name = $arr; if (!empty($menu2['_param'])) { $three_level = $menu2['_param']; $r = input('param.r'); foreach ($three_level as $k => $v) { $three_level[$k]['linkurl'] = getMenuLinkurl($menu1['module'],$menu1['group'], $menu2['url'], array_merge($param_base, ['r' => $v['r']])); if ($r == $v['r']) { $three_level[$k]['cur'] = 1; } } } } } } } // dump($menu); // exit(); return ['menu'=>$menu,'group_name'=>$group_name,'auth_name'=>$auth_name,'three_level'=>$three_level]; } /* * 生成menu.json文件 */ public function createMenu() { //获取一级权限 $auth_rule_model = new AuthRule(); $auth_rule_param_model = new AuthRuleParam(); $data = $auth_rule_model->where(array('pid' => 0, 'uid' => UID))->order('sort desc,id asc')->select(); $redata = array(); if (!empty($data)) { $idData = array(); foreach ($data as $value) { $idData[] = $value['id']; } //dump($idData); //获取二级权限 $where = []; $where[] = ['pid', 'in', $idData]; $where[] = ['type', '=', 2]; $where[] = ['uid', '=', UID]; $list = $auth_rule_model ->where( $where ) ->order('sort desc,id asc') // ->fetchSql(true) ->select(); //dump($list); $idData1 = array(); foreach ($list as $value) { $idData1[] = $value['id']; } //获取三级权限 $list_next = $auth_rule_model->where( array(['pid', "IN", $idData1], ['type', '=', 3], ['uid', '=', UID]) )->order('sort desc,id asc')->select(); //获取参数 $authParam = $auth_rule_param_model->getListByRule(); $two_level_list = []; //拼装二级权限数组 foreach ($list as $value) { $temp = array(); $temp['id'] = $value['id']; $temp['pid'] = $value['pid']; $temp['name'] = $value['title']; $temp['url'] = $value['rule_val']; $temp['is_total_visible'] = $value['is_total_visible']; $temp['_auth'] = []; foreach ($list_next as $val) { if ($val['pid'] == $value['id']) { $tem = [ 'name' => $val['title'], 'url' => $val['rule_val'] ]; $temp['_auth'][] = $tem; } } if (isset($authParam[$value['id']])) { $temp['_param'] = $authParam[$value['id']]; } $two_level_list[] = $temp; } //拼装权限组数组 foreach ($data as $value) { $temp = array(); $temp['module'] = $value['module']; $temp['group'] = $value['rule_val']; $temp['icon'] = $value['icon']; $temp['name'] = $value['title']; $temp['is_total_visible'] = $value['is_total_visible']; $temp['_child'] = []; foreach ($two_level_list as $val) { if ($val['pid'] == $value['id']) { unset($val['id']); unset($val['pid']); $temp['_child'][] = $val; } } $redata[] = $temp; } } $json_string = json_encode($redata); $res = file_put_contents('menu.json', $json_string); if ($res == FALSE) { return sendArray([], 101, '生成失败'); } return sendArray(); } }