完善保险前后端、养殖端小程序
This commit is contained in:
42
insurance_backend/models/MenuPermission.js
Normal file
42
insurance_backend/models/MenuPermission.js
Normal file
@@ -0,0 +1,42 @@
|
||||
const { DataTypes } = require('sequelize');
|
||||
const { sequelize } = require('../config/database');
|
||||
|
||||
const MenuPermission = sequelize.define('MenuPermission', {
|
||||
id: {
|
||||
type: DataTypes.INTEGER,
|
||||
autoIncrement: true,
|
||||
primaryKey: true,
|
||||
comment: '关联ID'
|
||||
},
|
||||
menu_id: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false,
|
||||
comment: '菜单ID'
|
||||
},
|
||||
permission_id: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false,
|
||||
comment: '权限ID'
|
||||
},
|
||||
required: {
|
||||
type: DataTypes.BOOLEAN,
|
||||
allowNull: false,
|
||||
defaultValue: true,
|
||||
comment: '是否必需权限'
|
||||
}
|
||||
}, {
|
||||
tableName: 'menu_permissions',
|
||||
timestamps: true,
|
||||
underscored: true,
|
||||
indexes: [
|
||||
{
|
||||
fields: ['menu_id', 'permission_id'],
|
||||
unique: true,
|
||||
name: 'uk_menu_permission'
|
||||
},
|
||||
{ fields: ['menu_id'] },
|
||||
{ fields: ['permission_id'] }
|
||||
]
|
||||
});
|
||||
|
||||
module.exports = MenuPermission;
|
||||
93
insurance_backend/models/Permission.js
Normal file
93
insurance_backend/models/Permission.js
Normal file
@@ -0,0 +1,93 @@
|
||||
const { DataTypes } = require('sequelize');
|
||||
const { sequelize } = require('../config/database');
|
||||
|
||||
const Permission = sequelize.define('Permission', {
|
||||
id: {
|
||||
type: DataTypes.INTEGER,
|
||||
autoIncrement: true,
|
||||
primaryKey: true,
|
||||
comment: '权限ID'
|
||||
},
|
||||
name: {
|
||||
type: DataTypes.STRING(100),
|
||||
allowNull: false,
|
||||
comment: '权限名称',
|
||||
validate: {
|
||||
len: [2, 100]
|
||||
}
|
||||
},
|
||||
code: {
|
||||
type: DataTypes.STRING(100),
|
||||
allowNull: false,
|
||||
unique: true,
|
||||
comment: '权限代码',
|
||||
validate: {
|
||||
len: [2, 100],
|
||||
is: /^[a-zA-Z0-9_:]+$/ // 只允许字母、数字、下划线和冒号
|
||||
}
|
||||
},
|
||||
description: {
|
||||
type: DataTypes.TEXT,
|
||||
allowNull: true,
|
||||
comment: '权限描述'
|
||||
},
|
||||
module: {
|
||||
type: DataTypes.STRING(50),
|
||||
allowNull: false,
|
||||
comment: '所属模块',
|
||||
validate: {
|
||||
len: [2, 50]
|
||||
}
|
||||
},
|
||||
type: {
|
||||
type: DataTypes.ENUM('menu', 'operation'),
|
||||
allowNull: false,
|
||||
defaultValue: 'operation',
|
||||
comment: '权限类型:menu-菜单权限,operation-操作权限'
|
||||
},
|
||||
parent_id: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: true,
|
||||
comment: '父权限ID'
|
||||
},
|
||||
status: {
|
||||
type: DataTypes.ENUM('active', 'inactive'),
|
||||
allowNull: false,
|
||||
defaultValue: 'active',
|
||||
comment: '状态'
|
||||
},
|
||||
sort_order: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false,
|
||||
defaultValue: 0,
|
||||
comment: '排序'
|
||||
}
|
||||
}, {
|
||||
tableName: 'permissions',
|
||||
timestamps: true,
|
||||
underscored: true,
|
||||
indexes: [
|
||||
{ fields: ['code'], unique: true },
|
||||
{ fields: ['module'] },
|
||||
{ fields: ['type'] },
|
||||
{ fields: ['parent_id'] },
|
||||
{ fields: ['status'] }
|
||||
]
|
||||
});
|
||||
|
||||
// 定义自关联关系
|
||||
Permission.hasMany(Permission, {
|
||||
as: 'children',
|
||||
foreignKey: 'parent_id',
|
||||
onDelete: 'SET NULL',
|
||||
onUpdate: 'CASCADE'
|
||||
});
|
||||
|
||||
Permission.belongsTo(Permission, {
|
||||
as: 'parent',
|
||||
foreignKey: 'parent_id',
|
||||
onDelete: 'SET NULL',
|
||||
onUpdate: 'CASCADE'
|
||||
});
|
||||
|
||||
module.exports = Permission;
|
||||
42
insurance_backend/models/RolePermission.js
Normal file
42
insurance_backend/models/RolePermission.js
Normal file
@@ -0,0 +1,42 @@
|
||||
const { DataTypes } = require('sequelize');
|
||||
const { sequelize } = require('../config/database');
|
||||
|
||||
const RolePermission = sequelize.define('RolePermission', {
|
||||
id: {
|
||||
type: DataTypes.INTEGER,
|
||||
autoIncrement: true,
|
||||
primaryKey: true,
|
||||
comment: '关联ID'
|
||||
},
|
||||
role_id: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false,
|
||||
comment: '角色ID'
|
||||
},
|
||||
permission_id: {
|
||||
type: DataTypes.INTEGER,
|
||||
allowNull: false,
|
||||
comment: '权限ID'
|
||||
},
|
||||
granted: {
|
||||
type: DataTypes.BOOLEAN,
|
||||
allowNull: false,
|
||||
defaultValue: true,
|
||||
comment: '是否授权'
|
||||
}
|
||||
}, {
|
||||
tableName: 'role_permissions',
|
||||
timestamps: true,
|
||||
underscored: true,
|
||||
indexes: [
|
||||
{
|
||||
fields: ['role_id', 'permission_id'],
|
||||
unique: true,
|
||||
name: 'uk_role_permission'
|
||||
},
|
||||
{ fields: ['role_id'] },
|
||||
{ fields: ['permission_id'] }
|
||||
]
|
||||
});
|
||||
|
||||
module.exports = RolePermission;
|
||||
@@ -65,6 +65,12 @@ const User = sequelize.define('User', {
|
||||
avatar: {
|
||||
type: DataTypes.STRING(255),
|
||||
allowNull: true
|
||||
},
|
||||
fixed_token: {
|
||||
type: DataTypes.STRING(255),
|
||||
allowNull: true,
|
||||
unique: true,
|
||||
comment: '用户固定token,用于API访问验证'
|
||||
}
|
||||
}, {
|
||||
tableName: 'users',
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
const { sequelize } = require('../config/database');
|
||||
const User = require('./User');
|
||||
const Role = require('./Role');
|
||||
const Permission = require('./Permission');
|
||||
const RolePermission = require('./RolePermission');
|
||||
const MenuPermission = require('./MenuPermission');
|
||||
const InsuranceApplication = require('./InsuranceApplication');
|
||||
const InsuranceType = require('./InsuranceType');
|
||||
const Policy = require('./Policy');
|
||||
@@ -22,6 +25,46 @@ const OperationLog = require('./OperationLog');
|
||||
User.belongsTo(Role, { foreignKey: 'role_id', as: 'role' });
|
||||
Role.hasMany(User, { foreignKey: 'role_id', as: 'users' });
|
||||
|
||||
// 角色和权限多对多关联(通过中间表)
|
||||
Role.belongsToMany(Permission, {
|
||||
through: RolePermission,
|
||||
foreignKey: 'role_id',
|
||||
otherKey: 'permission_id',
|
||||
as: 'rolePermissions'
|
||||
});
|
||||
Permission.belongsToMany(Role, {
|
||||
through: RolePermission,
|
||||
foreignKey: 'permission_id',
|
||||
otherKey: 'role_id',
|
||||
as: 'permissionRoles'
|
||||
});
|
||||
|
||||
// 角色权限关联表的直接关联
|
||||
RolePermission.belongsTo(Role, { foreignKey: 'role_id', as: 'role' });
|
||||
RolePermission.belongsTo(Permission, { foreignKey: 'permission_id', as: 'permission' });
|
||||
Role.hasMany(RolePermission, { foreignKey: 'role_id', as: 'rolePermissionRecords' });
|
||||
Permission.hasMany(RolePermission, { foreignKey: 'permission_id', as: 'permissionRoleRecords' });
|
||||
|
||||
// 菜单和权限多对多关联(通过中间表)
|
||||
Menu.belongsToMany(Permission, {
|
||||
through: MenuPermission,
|
||||
foreignKey: 'menu_id',
|
||||
otherKey: 'permission_id',
|
||||
as: 'permissions'
|
||||
});
|
||||
Permission.belongsToMany(Menu, {
|
||||
through: MenuPermission,
|
||||
foreignKey: 'permission_id',
|
||||
otherKey: 'menu_id',
|
||||
as: 'menus'
|
||||
});
|
||||
|
||||
// 菜单权限关联表的直接关联
|
||||
MenuPermission.belongsTo(Menu, { foreignKey: 'menu_id', as: 'menu' });
|
||||
MenuPermission.belongsTo(Permission, { foreignKey: 'permission_id', as: 'permission' });
|
||||
Menu.hasMany(MenuPermission, { foreignKey: 'menu_id', as: 'menuPermissions' });
|
||||
Permission.hasMany(MenuPermission, { foreignKey: 'permission_id', as: 'menuPermissions' });
|
||||
|
||||
// 保险申请和保险类型关联
|
||||
InsuranceApplication.belongsTo(InsuranceType, {
|
||||
foreignKey: 'insurance_type_id',
|
||||
@@ -82,6 +125,26 @@ Policy.hasMany(Claim, {
|
||||
as: 'claims'
|
||||
});
|
||||
|
||||
// 理赔和客户关联
|
||||
Claim.belongsTo(User, {
|
||||
foreignKey: 'customer_id',
|
||||
as: 'customer'
|
||||
});
|
||||
User.hasMany(Claim, {
|
||||
foreignKey: 'customer_id',
|
||||
as: 'customer_claims'
|
||||
});
|
||||
|
||||
// 理赔和审核人关联
|
||||
Claim.belongsTo(User, {
|
||||
foreignKey: 'reviewer_id',
|
||||
as: 'reviewer'
|
||||
});
|
||||
User.hasMany(Claim, {
|
||||
foreignKey: 'reviewer_id',
|
||||
as: 'reviewed_claims'
|
||||
});
|
||||
|
||||
// 监管任务关联
|
||||
SupervisoryTask.belongsTo(User, {
|
||||
foreignKey: 'assignedTo',
|
||||
@@ -198,6 +261,9 @@ module.exports = {
|
||||
sequelize,
|
||||
User,
|
||||
Role,
|
||||
Permission,
|
||||
RolePermission,
|
||||
MenuPermission,
|
||||
InsuranceApplication,
|
||||
InsuranceType,
|
||||
Policy,
|
||||
|
||||
Reference in New Issue
Block a user