权限增加排序字段
This commit is contained in:
parent
452774d9b8
commit
9a7fe7c73e
@ -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);
|
||||||
|
@ -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())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -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 })
|
||||||
|
@ -14,7 +14,6 @@ declare module 'fastify' {
|
|||||||
|
|
||||||
interface FastifyRequest {
|
interface FastifyRequest {
|
||||||
jwtVerify: Function;
|
jwtVerify: Function;
|
||||||
permissions?: string[][];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
4
typings/extend.d.ts
vendored
4
typings/extend.d.ts
vendored
@ -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[]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user