You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

190 lines
5.9 KiB

2 months ago
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, ",")
}