/** * Role 模型定义 * @file Role.js * @description 定义角色模型,用于数据库操作 */ const { DataTypes } = require('sequelize'); const BaseModel = require('./BaseModel'); const { sequelize } = require('../config/database-simple'); /** * 角色模型 * @typedef {Object} Role * @property {number} id - 角色唯一标识 * @property {string} name - 角色名称,唯一 * @property {string} description - 角色描述 * @property {Date} created_at - 创建时间 */ class Role extends BaseModel { /** * 获取具有此角色的所有用户 * @returns {Promise} 用户列表 */ async getUsers() { return await this.getUsers(); } /** * 检查角色是否已分配给指定用户 * @param {Number} userId 用户ID * @returns {Promise} 检查结果 */ async isAssignedToUser(userId) { const users = await this.getUsers({ where: { id: userId } }); return users.length > 0; } /** * 为角色分配用户 * @param {Number|Array} userId 用户ID或用户ID数组 * @returns {Promise} 分配结果 */ async assignToUser(userId) { try { if (Array.isArray(userId)) { await this.addUsers(userId); } else { await this.addUser(userId); } return true; } catch (error) { console.error('分配用户失败:', error); return false; } } /** * 从用户中移除此角色 * @param {Number|Array} userId 用户ID或用户ID数组 * @returns {Promise} 移除结果 */ async removeFromUser(userId) { try { if (Array.isArray(userId)) { await this.removeUsers(userId); } else { await this.removeUser(userId); } return true; } catch (error) { console.error('移除用户失败:', error); return false; } } } // 初始化Role模型 Role.init({ id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true }, name: { type: DataTypes.STRING(50), allowNull: false, unique: true }, description: { type: DataTypes.TEXT, allowNull: true } }, { sequelize, tableName: 'roles', modelName: 'Role', timestamps: true, createdAt: 'created_at', updatedAt: false }); /** * 导出角色模型 * @exports Role */ module.exports = Role;