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