__('Status 11')]; } public function getStatusTextAttr($value, $data) { $value = $value ? $value : (isset($data['status']) ? $data['status'] : ''); $list = $this->getStatusList(); return isset($list[$value]) ? $list[$value] : ''; } /** * 获取角色组的权限 * @param $id 角色组ID * @return array|false|string[] */ public function getGroupRole($id){ if(!$id){ return ['*']; } //讲师角色权限写死在代码中,不依赖数据库 if($id == self::LECTURER_GROUP_ID){ return explode(',', self::LECTURER_GROUP_RULES); } $group = self::where([ 'id'=>$id ])->field('rules')->find(); if(!$group){ return []; } return explode(",",$group['rules']); } /** * 遍历roles * @param $menu * @return array */ public function traversalRole($menu){ $roles = []; foreach ($menu as $item) { $roles[] = $item['roles']; // 获取当前项的角色 // 如果有子项,则递归处理 if (!empty($item['children'])) { $roles = array_merge($roles, $this->traversalRole($item['children'])); } } return $roles; } /** * 获取所有的权限 * @param $id 角色组ID * @return array|false|string[] */ public function getAllRoles(){ $menu = config('menu'); return $this->traversalRole($menu); } /** * 遍历菜单列表,判断 key 是否在分组权限中,并添加 selected 字段 * @param array $list 菜单列表 * @param array $groupRules 分组权限规则 * @return array 添加了 selected 字段后的菜单列表 */ public function updateMenuSelected($list, $groupRules) { foreach ($list as $key => &$item) { // 判断当前菜单 key 是否在分组权限中 if(in_array("*",$groupRules)){ $item['selected'] = true; }else{ $item['selected'] = in_array($item['roles'], $groupRules); } // 如果存在 children,递归处理 if (isset($item['children']) && is_array($item['children'])) { $item['children'] = $this->updateMenuSelected($item['children'], $groupRules); } } return $list; } /** * 补齐menu * @remark 为了方便端显示,并未展示隐藏的菜单。所以这里需要补齐隐藏菜单 * @return void */ public function patchingMenu($rules){ if(!$rules){ return $rules; } $candidateMenu = [ 'app_store'=>['app_entry'], 'config_system_basic'=>['config_system'], 'app_activity'=>['app_activity_manage','app_activity_edit'], 'app_exam'=>['app_exam_exercises_edit','app_exam_exercises_analyze'], 'app_testpaper_index'=>['app_testpaper_edit'], 'app_test'=>['app_test_analysis_index','app_test_appraise_index','app_test_appraise_detail','app_test_edit'], 'app_question_bank'=>['app_question_bank_edit'], 'course_list_article'=>['course_form','course_detail','course_batch','course_member','course_data'], 'course_list_audio'=>['course_form','course_detail','course_batch','course_member','course_data'], 'course_list_video'=>['course_form','course_detail','course_batch','course_member','course_data'], 'course_list_column'=>['course_form','course_detail','course_batch','course_member','course_data','course_column_detail','course_column_dir'], 'course_group_list'=>['course_group_detail'], 'course_group_category'=>['course_group_detail'], 'message_list'=>['message_form'], 'page_navigation_list'=>['page_navigation_diy'], 'dashboard_channel_channels'=>['dashboard_channel_channels_goods_edit'], 'live'=>['live_room','live_detail','live_form','course_form','course_detail','course_batch','course_member','course_data'], 'course_list_live'=>['live_room'], 'app_coupon'=>['app_coupon_edit','app_coupon_data'], 'app_exchange'=>['app_exchange_warehouse','app_exchange_edit'], 'order_list'=>['order_detail'], 'page_decorate_list'=>['page_decorate_diy'], 'app_pc'=>['app_pc_diy'], 'app_vip'=>['app_vip_edit','app_vip_detail'], 'user_manage_list'=>['user_manage_detail'], 'app_form'=>['app_form_edit','app_form_data'], ]; $rules = explode(",",$rules); foreach ($rules as $rule){ if(isset($candidateMenu[$rule])){ $rules = array_merge($rules, $candidateMenu[$rule]); } } return implode(",",$rules); } }