Initial commit: 宁夏智慧养殖监管平台
This commit is contained in:
123
backend/models/UserRole.js
Normal file
123
backend/models/UserRole.js
Normal file
@@ -0,0 +1,123 @@
|
||||
/**
|
||||
* 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;
|
||||
Reference in New Issue
Block a user