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