corgi/src/admin/controllers/permission.controller.ts
2021-05-08 12:32:24 +08:00

50 lines
1.5 KiB
TypeScript

import BaseController from '../../common/base.controller'
import { permission, router } from '../../decorators/router'
import { ZError } from '../../common/ZError'
import { AdminPermission } from '../../models/admin/AdminPermission'
class PermissionController extends BaseController {
@permission('permission:update')
@router('post /permission')
async saveRole(req) {
const { datas } = req.params
for (let i = 0, len = datas.length; i < len; i++) {
const data = datas[i]
const record = (await AdminPermission.findOrCreate({ _id: data._id })).doc;
record.name = data.name
record.actions = data.actions
record.sort = i
record.level = data.level
await record.save()
}
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')
// @role('sysadmin')
@router('get /permissions')
async roles(req) {
const user = req.user
const queryData: any = {}
if (!user.isSysAdmin()) {
queryData.show = true
}
const records = await AdminPermission.find(queryData).sort({sort: 1})
return records.map(o => o.toJson())
}
@permission('permission:delete')
@router('delete /permission/:key')
async deleteRole(req) {
const { key } = req.params
if (!key) {
throw new ZError(10, 'record not found')
}
const result = await AdminPermission.deleteOne({ _id: key })
return { count: result.deletedCount }
}
}