/** * UserRole 模型定义 * @file UserRole.js * @description 定义用户角色关联模型,用于实现用户和角色的多对多关系 */ const { DataTypes } = require('sequelize'); const BaseModel = require('./BaseModel'); const { sequelize } = require('../config/database-simple'); class UserRole extends BaseModel { /** * 获取用户角色分配记录 * @param {Number} userId 用户ID * @param {Number} roleId 角色ID * @returns {Promise} 用户角色分配记录 */ static async findUserRole(userId, roleId) { return await this.findOne({ where: { user_id: userId, role_id: roleId } }); } /** * 获取用户的所有角色分配记录 * @param {Number} userId 用户ID * @returns {Promise} 用户角色分配记录列表 */ static async findUserRoles(userId) { return await this.findAll({ where: { user_id: userId } }); } /** * 获取角色的所有用户分配记录 * @param {Number} roleId 角色ID * @returns {Promise} 角色用户分配记录列表 */ static async findRoleUsers(roleId) { return await this.findAll({ where: { role_id: roleId } }); } /** * 分配用户角色 * @param {Number} userId 用户ID * @param {Number} roleId 角色ID * @returns {Promise} 用户角色分配记录 */ static async assignRole(userId, roleId) { const [userRole, created] = await this.findOrCreate({ where: { user_id: userId, role_id: roleId }, defaults: { assigned_at: new Date() } }); return { userRole, created }; } /** * 移除用户角色 * @param {Number} userId 用户ID * @param {Number} roleId 角色ID * @returns {Promise} 移除结果 */ static async removeRole(userId, roleId) { const deleted = await this.destroy({ where: { user_id: userId, role_id: roleId } }); return deleted > 0; } } // 初始化UserRole模型 UserRole.init({ user_id: { type: DataTypes.INTEGER, allowNull: false, primaryKey: true, references: { model: 'users', key: 'id' }, onDelete: 'CASCADE' }, role_id: { type: DataTypes.INTEGER, allowNull: false, primaryKey: true, references: { model: 'roles', key: 'id' }, onDelete: 'CASCADE' }, assigned_at: { type: DataTypes.DATE, defaultValue: DataTypes.NOW } }, { sequelize, tableName: 'user_roles', modelName: 'UserRole', timestamps: false }); module.exports = UserRole;