50 lines
1.5 KiB
TypeScript
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 }
|
|
}
|
|
}
|