123 lines
2.6 KiB
JavaScript
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; |