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.

133 lines
3.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// 这里前端维护映射关系,后端只需要返回权限列表即可
// Key 为组,对象为权限相关名称
const cumstomPermissionMap = {
'api.v1.DocumentAPI': {
label: '',
path: 'ListDocument',
children: [],
pages: ['/admin/document', '/admin/document/list'],
},
'api.v1.RecycleAPI': {
label: '',
path: 'ListRecycleDocument',
children: [],
pages: ['/admin/document', '/admin/document/recycle'],
},
'api.v1.CategoryAPI': {
label: '',
path: 'ListCategory',
children: [],
pages: ['/admin/document', '/admin/document/category'],
},
'api.v1.UserAPI': {
label: '',
path: 'ListUser',
children: [],
pages: ['/admin/user', '/admin/user/list'],
},
'api.v1.FriendlinkAPI': {
label: '',
path: 'ListFriendlink',
children: [],
pages: ['/admin/friendlink'],
},
'api.v1.AttachmentAPI': {
label: '',
path: 'ListAttachment',
children: [],
pages: ['/admin/attachment'],
},
'api.v1.ReportAPI': {
label: '',
path: 'ListReport',
children: [],
pages: ['/admin/report'],
},
'api.v1.BannerAPI': {
label: '',
path: 'ListBanner',
children: [],
pages: ['/admin/banner'],
},
'api.v1.GroupAPI': {
label: '',
path: 'ListGroup',
children: [],
pages: ['/admin/user', '/admin/user/group'],
},
'api.v1.PermissionAPI': {
label: '',
path: 'ListPermission',
children: [],
pages: ['/admin/user', '/admin/user/permission'],
},
'api.v1.ConfigAPI': {
label: '',
path: 'ListConfig',
children: [],
pages: ['/admin/config'],
},
'api.v1.ArticleAPI': {
label: '',
path: 'ListArticle',
children: [],
pages: ['/admin/article'],
},
'api.v1.CommentAPI': {
label: '',
path: 'ListComment',
children: [],
pages: ['/admin/comment'],
},
'api.v1.PunishmentAPI': {
label: '',
path: 'ListPunishment',
children: [],
pages: ['/admin/user/punishment'],
},
upload: {
id: 0,
label: '',
children: [],
},
}
// 权限树
export const permissionsToTree = (permissions) => {
const tree = []
const permissionMap = JSON.parse(JSON.stringify(cumstomPermissionMap))
permissions.forEach((permission) => {
const slice = permission.path.split('/')
// GRPC和HTTP要分开处理。method===GRPC的为grpc接口其他均为HTTP
if (permission.method === 'GRPC') {
if (!permissionMap[slice[1]]) {
permissionMap[slice[1]] = {
children: [],
}
}
if (slice[2] === permissionMap[slice[1]].path) {
permissionMap[slice[1]].id = permission.id
}
permissionMap[slice[1]].children.push({
...permission,
label: permission.title || permission.path,
})
} else {
if (!permissionMap[slice[3]]) {
permissionMap[slice[3]] = {
children: [],
label: slice[3],
}
}
permissionMap[slice[3]].children.push({
...permission,
label: permission.title || permission.path,
})
}
})
Object.keys(permissionMap).forEach((key) => {
tree.push(permissionMap[key])
})
return tree
}