Files
nxxmdata/backend/models/UserRole.js
2025-08-25 15:00:46 +08:00

123 lines
2.6 KiB
JavaScript

/**
* 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<UserRole|null>} 用户角色分配记录
*/
static async findUserRole(userId, roleId) {
return await this.findOne({
where: {
user_id: userId,
role_id: roleId
}
});
}
/**
* 获取用户的所有角色分配记录
* @param {Number} userId 用户ID
* @returns {Promise<Array>} 用户角色分配记录列表
*/
static async findUserRoles(userId) {
return await this.findAll({
where: {
user_id: userId
}
});
}
/**
* 获取角色的所有用户分配记录
* @param {Number} roleId 角色ID
* @returns {Promise<Array>} 角色用户分配记录列表
*/
static async findRoleUsers(roleId) {
return await this.findAll({
where: {
role_id: roleId
}
});
}
/**
* 分配用户角色
* @param {Number} userId 用户ID
* @param {Number} roleId 角色ID
* @returns {Promise<UserRole>} 用户角色分配记录
*/
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<Boolean>} 移除结果
*/
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;