93 lines
3.6 KiB
JavaScript
93 lines
3.6 KiB
JavaScript
import express from 'express'
|
|
import { roles, rolePermissions, userRoles, permissions } from '../db/seedAuth.js'
|
|
import { nextId } from '../utils/id.js'
|
|
import { paginate } from '../utils/pagination.js'
|
|
import { sendOk, sendFail } from '../utils/response.js'
|
|
import { requireAuth } from '../middleware/requireAuth.js'
|
|
|
|
const router = express.Router()
|
|
router.use(requireAuth)
|
|
|
|
function toRoleVo(role) {
|
|
return { id: role.id, roleName: role.roleName, organizationId: role.organizationId, isBuiltIn: role.isBuiltIn }
|
|
}
|
|
|
|
router.post('/role/page', (req, res) => {
|
|
const { roleName, page, pageSize } = req.body || {}
|
|
let list = roles
|
|
if (roleName) list = list.filter((r) => r.roleName.includes(roleName))
|
|
const result = paginate(list, page, pageSize)
|
|
sendOk(res, { ...result, records: result.records.map(toRoleVo) })
|
|
})
|
|
|
|
router.post('/role/detail', (req, res) => {
|
|
const { roleId } = req.body || {}
|
|
const role = roles.find((r) => r.id === roleId)
|
|
if (!role) return sendFail(res, '角色不存在', 404)
|
|
const permissionIdList = rolePermissions.filter((rp) => rp.roleId === roleId).map((rp) => rp.permissionId)
|
|
sendOk(res, { ...toRoleVo(role), permissionIdList })
|
|
})
|
|
|
|
router.post('/role/create', (req, res) => {
|
|
const { roleName, organizationId, isBuiltIn } = req.body || {}
|
|
if (!roleName) return sendFail(res, '角色名称不能为空', 400)
|
|
const id = nextId('role')
|
|
const role = { id, roleName, organizationId, isBuiltIn: !!isBuiltIn }
|
|
roles.push(role)
|
|
sendOk(res, toRoleVo(role), '创建成功')
|
|
})
|
|
|
|
router.post('/role/update', (req, res) => {
|
|
const { id, roleName, organizationId } = req.body || {}
|
|
const role = roles.find((r) => r.id === id)
|
|
if (!role) return sendFail(res, '角色不存在', 404)
|
|
if (role.isBuiltIn) return sendFail(res, '内置角色不可修改', 400)
|
|
if (roleName !== undefined) role.roleName = roleName
|
|
if (organizationId !== undefined) role.organizationId = organizationId
|
|
sendOk(res, true, '更新成功')
|
|
})
|
|
|
|
router.post('/role/delete', (req, res) => {
|
|
const { roleId } = req.body || {}
|
|
const index = roles.findIndex((r) => r.id === roleId)
|
|
if (index === -1) return sendFail(res, '角色不存在', 404)
|
|
if (roles[index].isBuiltIn) return sendFail(res, '内置角色不可删除', 400)
|
|
roles.splice(index, 1)
|
|
for (let i = rolePermissions.length - 1; i >= 0; i -= 1) {
|
|
if (rolePermissions[i].roleId === roleId) rolePermissions.splice(i, 1)
|
|
}
|
|
for (let i = userRoles.length - 1; i >= 0; i -= 1) {
|
|
if (userRoles[i].roleId === roleId) userRoles.splice(i, 1)
|
|
}
|
|
sendOk(res, true, '删除成功')
|
|
})
|
|
|
|
router.get('/auth/role-permission/list-by-role', (req, res) => {
|
|
const roleId = Number(req.query.roleId)
|
|
const permissionIds = rolePermissions.filter((rp) => rp.roleId === roleId).map((rp) => rp.permissionId)
|
|
const list = permissions.filter((p) => permissionIds.includes(p.id))
|
|
sendOk(res, list)
|
|
})
|
|
|
|
router.post('/auth/role-permission/bind', (req, res) => {
|
|
const { roleId, permissionIdList } = req.body || {}
|
|
;(permissionIdList || []).forEach((permissionId) => {
|
|
if (!rolePermissions.some((rp) => rp.roleId === roleId && rp.permissionId === permissionId)) {
|
|
rolePermissions.push({ roleId, permissionId })
|
|
}
|
|
})
|
|
sendOk(res, true, '绑定成功')
|
|
})
|
|
|
|
router.post('/auth/role-permission/unbind', (req, res) => {
|
|
const { roleId, permissionIdList } = req.body || {}
|
|
for (let i = rolePermissions.length - 1; i >= 0; i -= 1) {
|
|
if (rolePermissions[i].roleId === roleId && (permissionIdList || []).includes(rolePermissions[i].permissionId)) {
|
|
rolePermissions.splice(i, 1)
|
|
}
|
|
}
|
|
sendOk(res, true, '解绑成功')
|
|
})
|
|
|
|
export default router
|