权限增加排序字段

This commit is contained in:
zhl 2021-05-08 11:40:09 +08:00
parent 452774d9b8
commit 9a7fe7c73e
6 changed files with 62 additions and 18 deletions

View File

@ -56,6 +56,7 @@ export class AdminServer {
preValidation: async function (request: FastifyRequest, reply: FastifyReply) { preValidation: async function (request: FastifyRequest, reply: FastifyReply) {
request.roles = config.roles; request.roles = config.roles;
request.permissions = config.permissions; request.permissions = config.permissions;
request.depts = config.depts;
await this.zAuth(request, reply); await this.zAuth(request, reply);
} }
}, controller); }, controller);

View File

@ -2,22 +2,26 @@ import BaseController from '../../common/base.controller'
import { permission, router } from '../../decorators/router' import { permission, router } from '../../decorators/router'
import { ZError } from '../../common/ZError' import { ZError } from '../../common/ZError'
import { AdminPermission } from '../../models/admin/AdminPermission' import { AdminPermission } from '../../models/admin/AdminPermission'
import { AdminRole } from '../../models/admin/AdminRole'
class PermissionController extends BaseController { class PermissionController extends BaseController {
@permission('permission:update') @permission('permission:update')
@router('post /permission') @router('post /permission')
async saveRole(req) { async saveRole(req) {
const { datas } = req.params const { datas } = req.params
for (let data of datas) { for (let i = 0, len = datas.length; i < len; i++) {
const record = (await AdminPermission.findOrCreate({_id: data._id})).doc; const data = datas[i]
const record = (await AdminPermission.findOrCreate({ _id: data._id })).doc;
record.name = data.name record.name = data.name
record.actions = data.actions record.actions = data.actions
record.sort = i
await record.save() await record.save()
} }
return {} let ids = datas.map(o => o._id)
const result = await AdminPermission.deleteMany({ _id: { $nin: ids }, show: true })
return {deleteCount: result.deletedCount, saveCount: datas.length}
} }
@permission('permission:read') @permission('permission:read')
// @role('sysadmin') // @role('sysadmin')
@router('get /permissions') @router('get /permissions')
@ -27,7 +31,7 @@ class PermissionController extends BaseController {
if (!user.isSysAdmin()) { if (!user.isSysAdmin()) {
queryData.show = true queryData.show = true
} }
const records = await AdminPermission.find(queryData) const records = await AdminPermission.find(queryData).sort({sort: 1})
return records.map(o => o.toJson()) return records.map(o => o.toJson())
} }

View File

@ -12,6 +12,7 @@ export class RouterMap {
roles?: string[], roles?: string[],
permissions?: string[][], permissions?: string[][],
data?: RouterData[] data?: RouterData[]
depts?: string[]
}> = new Map() }> = new Map()
} }
@ -108,3 +109,31 @@ export function permission(permissions?: string | string[]) {
} }
} }
} }
/**
* dept修饰器的, id是否存在
*/
export function dept(depts?: string | string[]) {
return (target: BaseController, name: string, value: PropertyDescriptor) => {
let deptList: string[] = []
if (depts) {
if (Array.isArray(depts)) {
deptList = depts
} else {
deptList = [depts]
}
}
// @ts-ignore
const key = target[name]
let deptObj = { depts: deptList }
if (RouterMap.decoratedRouters.has(key)) {
let objCurrent = RouterMap.decoratedRouters.get(key)
Object.assign(objCurrent, deptObj)
// @ts-ignore
RouterMap.decoratedRouters.set(target[name], objCurrent)
} else {
// @ts-ignore
RouterMap.decoratedRouters.set(target[name], deptObj)
}
}
}

View File

@ -1,4 +1,3 @@
import { import {
getModelForClass, getModelForClass,
index, index,
@ -9,30 +8,40 @@ import { dbconn } from 'decorators/dbconn'
import { BaseModule } from '../Base' import { BaseModule } from '../Base'
@dbconn() @dbconn()
@index({ name: 1, action: 1 }, { unique: true }) @modelOptions({
@modelOptions({schemaOptions: {collection: "admin_permission", _id: false, timestamps: true}}) schemaOptions: {
export class AdminPermissionClass extends BaseModule{ collection: 'admin_permission',
_id: false,
timestamps: true
}
})
export class AdminPermissionClass extends BaseModule {
@prop() @prop()
public _id: string; public _id: string
@prop() @prop()
public name: string; public name: string
@prop() @prop()
public actions: string[]; public actions: string[]
@prop() @prop()
public comment?: string; public comment?: string
@prop({default: true}) @prop({default: 999})
public sort: number
@prop({ default: true })
public show: boolean public show: boolean
public toJson() { public toJson() {
return { return {
id: this._id, id: this._id,
label: this.name, label: this.name,
children: this.actions.map(o=>{return {id: `${this._id}:${o}`, label: o}}), children: this.actions.map(o => {
return { id: `${ this._id }:${ o }`, label: o }
}),
comment: this.comment comment: this.comment
} }
} }
@ -40,4 +49,4 @@ export class AdminPermissionClass extends BaseModule{
} }
export const AdminPermission = getModelForClass(AdminPermissionClass, {existingConnection: AdminPermissionClass.db}); export const AdminPermission = getModelForClass(AdminPermissionClass, { existingConnection: AdminPermissionClass.db })

View File

@ -14,7 +14,6 @@ declare module 'fastify' {
interface FastifyRequest { interface FastifyRequest {
jwtVerify: Function; jwtVerify: Function;
permissions?: string[][];
} }
} }

4
typings/extend.d.ts vendored
View File

@ -4,6 +4,8 @@ declare module 'fastify' {
interface FastifyRequest{ interface FastifyRequest{
roles?: string[], roles?: string[],
user?: any, user?: any,
token?: string token?: string,
permissions?: string[][],
depts?: string[]
} }
} }