package models import ( "strings" ) type PrivItem struct { // body Key string `json:"key"` Title string `json:"title"` } type Priv struct { Key string `json:"key"` Title string `json:"title"` Children []PrivItem `json:"children"` } // constants var privList = []Priv{ {Key: "file", Title: "文件", Children: []PrivItem{ {"file/upload/post", "文件上传"}, {"file/uploadImage/post", "图像上传"}, }}, {Key: "subject", Title: "科目", Children: []PrivItem{ {"subject/post", "科目添加"}, {"subject/delete", "科目删除"}, {"subject/put", "科目修改"}, {"subject/get", "科目查询"}, }}, {Key: "knowledge", Title: "知识点", Children: []PrivItem{ {"knowledge/post", "知识点添加"}, {"knowledge/delete", "知识点删除"}, {"knowledge/put", "知识点修改"}, {"knowledge/get", "知识点查询"}, }}, {Key: "knowledgeGroup", Title: "知识点分组", Children: []PrivItem{ {"knowledge/post", "知识点分组添加"}, {"knowledge/delete", "知识点分组删除"}, {"knowledge/put", "知识点分组修改"}, {"knowledge/get", "知识点分组查询"}, }}, {Key: "directive", Title: "指令", Children: []PrivItem{ {"directive/post", "指令添加"}, {"directive/delete", "指令删除"}, {"directive/put", "指令修改"}, {"directive/get", "指令查询"}, }}, {Key: "directiveGroup", Title: "指令分类", Children: []PrivItem{ {"directiveGroup/post", "指令分类添加"}, {"directiveGroup/delete", "指令分类删除"}, {"directiveGroup/put", "指令分类修改"}, {"directiveGroup/get", "指令分类查询"}, }}, {Key: "competition", Title: "赛事", Children: []PrivItem{ {"competition/post", "赛事添加"}, {"competition/delete", "赛事删除"}, {"competition/put", "赛事修改"}, {"competition/get", "赛事查询"}, }}, {Key: "label", Title: "属性", Children: []PrivItem{ {"label/post", "属性添加"}, {"label/delete", "属性删除"}, {"label/put", "属性修改"}, {"label/get", "属性查询"}, }}, {Key: "label/value", Title: "属性值", Children: []PrivItem{ {"label/value/post", "属性值添加"}, {"label/value/delete", "属性值删除"}, {"label/value/put", "属性值修改"}, {"label/value/get", "属性值查询"}, }}, {Key: "productGroup", Title: "作品分类", Children: []PrivItem{ {"productGroup/post", "作品分类添加"}, {"productGroup/delete", "作品分类删除"}, {"productGroup/put", "作品分类修改"}, {"productGroup/get", "作品分类查询"}, }}, {Key: "product", Title: "作品", Children: []PrivItem{ {"product/post", "作品添加"}, {"product/delete", "作品删除"}, {"product/put", "作品修改"}, {"product/get", "作品查询"}, }}, {Key: "question", Title: "习题", Children: []PrivItem{ {"question/post", "习题添加"}, {"question/delete", "习题删除"}, {"question/put", "习题修改"}, {"question/get", "习题查询"}, }}, {Key: "paperType", Title: "试卷类型", Children: []PrivItem{ {"paperType/post", "试卷类型添加"}, {"paperType/delete", "试卷类型删除"}, {"paperType/put", "试卷类型修改"}, {"paperType/get", "试卷类型查询"}, }}, {Key: "paper", Title: "试卷", Children: []PrivItem{ {"paper/post", "试卷添加"}, {"paper/delete", "试卷删除"}, {"paper/put", "试卷修改"}, {"paper/get", "试卷查询"}, }}, {Key: "lessonType", Title: "课时类型", Children: []PrivItem{ {"lessonType/post", "课时类型添加"}, {"lessonType/delete", "课时类型删除"}, {"lessonType/put", "课时类型修改"}, {"lessonType/get", "课时类型查询"}, }}, {Key: "lesson", Title: "课时", Children: []PrivItem{ {"lesson/post", "课时添加"}, {"lesson/delete", "课时删除"}, {"lesson/put", "课时修改"}, {"lesson/get", "课时查询"}, }}, {Key: "lessonGroup", Title: "课程库", Children: []PrivItem{ {"lessonGroup/post", "课程库添加"}, {"lessonGroup/delete", "课程库删除"}, {"lessonGroup/put", "课程库修改"}, {"lessonGroup/get", "课程库查询"}, }}, {Key: "lessonGroupType", Title: "程库类型", Children: []PrivItem{ {"lessonGroupType/post", "程库类型添加"}, {"lessonGroupType/delete", "程库类型删除"}, {"lessonGroupType/put", "程库类型修改"}, {"lessonGroupType/get", "程库类型查询"}, }}, {Key: "lessonStep", Title: "课时步骤", Children: []PrivItem{ {"lessonStep/post", "课时步骤添加"}, {"lessonStep/delete", "课时步骤删除"}, {"lessonStep/put", "课时步骤修改"}, {"lessonStep/get", "课时步骤查询"}, }}, {Key: "role", Title: "角色", Children: []PrivItem{ {"role/post", "角色添加"}, {"role/delete", "角色删除"}, {"role/put", "角色修改"}, {"role/get", "角色查询"}, }}, {Key: "user", Title: "用户", Children: []PrivItem{ {"user/post", "用户添加"}, {"user/delete", "用户删除"}, {"user/put", "用户修改"}, {"user/get", "用户查询"}, {"user/changePassword/put", "用户修改密码"}, {"user/logout/put", "用户退出"}, {"user/info/get", "用户信息"}, }}, } func Privs() []Priv { return privList } func PrivFilter(privs string) string { privArr := strings.Split(privs, ",") t := []string{} privKeys := map[string]struct{}{} for _, priv := range privList { for _, p := range priv.Children { privKeys[p.Key] = struct{}{} t = append(t, p.Key) } } //fmt.Println(strings.Join(t, ",")) var hasUserLogout, hasUserInfo bool var rightPrivs []string for _, priv := range privArr { p := strings.TrimSpace(strings.ToLower(priv)) if _, exists := privKeys[p]; exists { rightPrivs = append(rightPrivs, p) if p == "user/logout/put" { hasUserLogout = true } if p == "user/info/get" { hasUserInfo = true } } } if !hasUserLogout { rightPrivs = append(rightPrivs, "user/logout/put") } if !hasUserInfo { rightPrivs = append(rightPrivs, "user/info/get") } return strings.Join(rightPrivs, ",") }