rentease-backend/controllers/roleController.js

320 lines
7.1 KiB
JavaScript
Raw Normal View History

2026-03-08 16:28:33 +00:00
const { Op } = require('sequelize');
const Role = require('../models/Role');
const { logOperation } = require('../utils/logger');
// 获取角色列表
exports.getRoles = async (req, res) => {
try {
const { page = 1, pageSize = 10, name, status } = req.query;
const where = { isDeleted: 0 };
if (name) where.name = { [Op.like]: `%${name}%` };
if (status) where.status = status;
const { count, rows: roles } = await Role.findAndCountAll({
where,
limit: parseInt(pageSize),
offset: (parseInt(page) - 1) * parseInt(pageSize),
order: [['id', 'DESC']]
});
res.json({
code: 200,
message: '获取角色列表成功',
data: {
list: roles,
total: count,
page: parseInt(page),
pageSize: parseInt(pageSize)
}
});
// 记录操作日志
await logOperation({
userId: req.user.id,
username: req.user.username,
module: '角色管理',
action: '查询',
description: '获取角色列表',
method: req.method,
path: req.path,
ip: req.ip,
status: 'success'
});
} catch (error) {
console.error('获取角色列表错误:', error);
res.status(500).json({
code: 500,
message: '获取角色列表失败',
error: error.message
});
}
};
// 获取角色详情
exports.getRoleById = async (req, res) => {
try {
const { id } = req.params;
const role = await Role.findByPk(id, {
where: { isDeleted: 0 }
});
if (!role) {
return res.status(404).json({
code: 404,
message: '角色不存在'
});
}
res.json({
code: 200,
message: '获取角色详情成功',
data: role
});
// 记录操作日志
await logOperation({
userId: req.user.id,
username: req.user.username,
module: '角色管理',
action: '查询',
description: `获取角色详情ID: ${id}`,
method: req.method,
path: req.path,
ip: req.ip,
status: 'success'
});
} catch (error) {
console.error('获取角色详情错误:', error);
res.status(500).json({
code: 500,
message: '获取角色详情失败',
error: error.message
});
}
};
// 创建角色
exports.createRole = async (req, res) => {
try {
const { name, code, description, permissions, status } = req.body;
// 参数验证
if (!name || !code) {
return res.status(400).json({
code: 400,
message: '角色名称和编码不能为空'
});
}
// 检查角色编码是否已存在
const existingRole = await Role.findOne({
where: { code, isDeleted: 0 }
});
if (existingRole) {
return res.status(400).json({
code: 400,
message: '角色编码已存在'
});
}
const role = await Role.create({
name,
code,
description,
permissions,
status: status || 'active',
createBy: req.user.id,
updateBy: req.user.id
});
res.json({
code: 200,
message: '创建角色成功',
data: role
});
// 记录操作日志
await logOperation({
userId: req.user.id,
username: req.user.username,
module: '角色管理',
action: '创建',
description: `创建角色: ${name}`,
method: req.method,
path: req.path,
ip: req.ip,
status: 'success'
});
} catch (error) {
console.error('创建角色错误:', error);
res.status(500).json({
code: 500,
message: '创建角色失败',
error: error.message
});
}
};
// 更新角色
exports.updateRole = async (req, res) => {
try {
const { id } = req.params;
const { name, code, description, permissions, status } = req.body;
// 查找角色
const role = await Role.findByPk(id, {
where: { isDeleted: 0 }
});
if (!role) {
return res.status(404).json({
code: 404,
message: '角色不存在'
});
}
// 检查角色编码是否已存在(排除当前角色)
if (code && code !== role.code) {
const existingRole = await Role.findOne({
where: { code, isDeleted: 0, id: { [Op.ne]: id } }
});
if (existingRole) {
return res.status(400).json({
code: 400,
message: '角色编码已存在'
});
}
}
await role.update({
name: name || role.name,
code: code || role.code,
description: description !== undefined ? description : role.description,
permissions: permissions !== undefined ? permissions : role.permissions,
status: status || role.status,
updateBy: req.user.id
});
res.json({
code: 200,
message: '更新角色成功',
data: role
});
// 记录操作日志
await logOperation({
userId: req.user.id,
username: req.user.username,
module: '角色管理',
action: '更新',
description: `更新角色: ${role.name}`,
method: req.method,
path: req.path,
ip: req.ip,
status: 'success'
});
} catch (error) {
console.error('更新角色错误:', error);
res.status(500).json({
code: 500,
message: '更新角色失败',
error: error.message
});
}
};
// 删除角色
exports.deleteRole = async (req, res) => {
try {
const { id } = req.params;
// 查找角色
const role = await Role.findByPk(id, {
where: { isDeleted: 0 }
});
if (!role) {
return res.status(404).json({
code: 404,
message: '角色不存在'
});
}
// 检查是否有用户使用此角色
const userCount = await role.countUsers({
where: { isDeleted: 0 }
});
if (userCount > 0) {
return res.status(400).json({
code: 400,
message: '该角色下还有用户,无法删除'
});
}
// 软删除
await role.update({
isDeleted: 1,
updateBy: req.user.id
});
res.json({
code: 200,
message: '删除角色成功'
});
// 记录操作日志
await logOperation({
userId: req.user.id,
username: req.user.username,
module: '角色管理',
action: '删除',
description: `删除角色: ${role.name}`,
method: req.method,
path: req.path,
ip: req.ip,
status: 'success'
});
} catch (error) {
console.error('删除角色错误:', error);
res.status(500).json({
code: 500,
message: '删除角色失败',
error: error.message
});
}
};
// 获取所有角色(用于下拉选择)
exports.getAllRoles = async (req, res) => {
try {
const roles = await Role.findAll({
where: { isDeleted: 0, status: 'active' },
attributes: ['id', 'name', 'code']
});
res.json({
code: 200,
message: '获取角色列表成功',
data: roles
});
} catch (error) {
console.error('获取角色列表错误:', error);
res.status(500).json({
code: 500,
message: '获取角色列表失败',
error: error.message
});
}
};