87 lines
3.7 KiB
Go
87 lines
3.7 KiB
Go
// Package admin 定义后台管理专用领域模型(RBAC)。
|
|
// 表名统一以 admin_ 为前缀,与小程序业务(users / mini_programs)物理隔离,
|
|
// 因此本包模型不进小程序数据隔离逻辑。
|
|
package admin
|
|
|
|
import "portal-mini-go/internal/pkg/types"
|
|
|
|
// User 是后台管理员账号。用户名全局唯一,密码以 bcrypt 哈希存储。
|
|
type User struct {
|
|
ID uint64 `gorm:"primaryKey;autoIncrement" json:"id"`
|
|
Username string `gorm:"column:username;type:varchar(64);uniqueIndex;not null" json:"username"`
|
|
PasswordHash string `gorm:"column:password_hash;type:varchar(255);not null" json:"-"`
|
|
Nickname string `gorm:"column:nickname;type:varchar(128)" json:"nickname"`
|
|
Status int8 `gorm:"column:status;type:tinyint;not null;default:1" json:"status"`
|
|
CreatedAt types.Time `json:"created_at"`
|
|
UpdatedAt types.Time `json:"updated_at"`
|
|
}
|
|
|
|
func (User) TableName() string { return "admin_users" }
|
|
|
|
// 管理员状态:0 禁用、1 启用。
|
|
const (
|
|
UserStatusDisabled int8 = 0
|
|
UserStatusEnabled int8 = 1
|
|
)
|
|
|
|
// Role 是后台角色,与权限多对多关联,再与管理员多对多关联。
|
|
type Role struct {
|
|
ID uint64 `gorm:"primaryKey;autoIncrement" json:"id"`
|
|
Code string `gorm:"column:code;type:varchar(64);uniqueIndex;not null" json:"code"`
|
|
Name string `gorm:"column:name;type:varchar(128);not null" json:"name"`
|
|
Description string `gorm:"column:description;type:varchar(512)" json:"description"`
|
|
Status int8 `gorm:"column:status;type:tinyint;not null;default:1" json:"status"`
|
|
CreatedAt types.Time `json:"created_at"`
|
|
UpdatedAt types.Time `json:"updated_at"`
|
|
}
|
|
|
|
func (Role) TableName() string { return "admin_roles" }
|
|
|
|
// Permission 是后台权限,分接口(api)与菜单(menu)两类。
|
|
// 接口权限 code 对应后端 API 守卫;菜单权限 code 用于前端动态渲染菜单树。
|
|
type Permission struct {
|
|
ID uint64 `gorm:"primaryKey;autoIncrement" json:"id"`
|
|
Code string `gorm:"column:code;type:varchar(128);uniqueIndex;not null" json:"code"`
|
|
Name string `gorm:"column:name;type:varchar(128);not null" json:"name"`
|
|
Type string `gorm:"column:type;type:varchar(16);not null;default:'api'" json:"type"`
|
|
Method string `gorm:"column:method;type:varchar(16)" json:"method"`
|
|
Path string `gorm:"column:path;type:varchar(255)" json:"path"`
|
|
ParentID uint64 `gorm:"column:parent_id;index" json:"parent_id"`
|
|
Sort int `gorm:"column:sort;not null;default:0" json:"sort"`
|
|
CreatedAt types.Time `json:"created_at"`
|
|
}
|
|
|
|
func (Permission) TableName() string { return "admin_permissions" }
|
|
|
|
// 权限类型。
|
|
const (
|
|
PermTypeAPI = "api"
|
|
PermTypeMenu = "menu"
|
|
)
|
|
|
|
// UserRole 管理员-角色关联(多对多中间表)。
|
|
type UserRole struct {
|
|
AdminID uint64 `gorm:"primaryKey;column:admin_id" json:"admin_id"`
|
|
RoleID uint64 `gorm:"primaryKey;column:role_id" json:"role_id"`
|
|
}
|
|
|
|
func (UserRole) TableName() string { return "admin_user_roles" }
|
|
|
|
// RolePermission 角色-权限关联(多对多中间表)。
|
|
type RolePermission struct {
|
|
RoleID uint64 `gorm:"primaryKey;column:role_id" json:"role_id"`
|
|
PermissionID uint64 `gorm:"primaryKey;column:permission_id" json:"permission_id"`
|
|
}
|
|
|
|
func (RolePermission) TableName() string { return "admin_role_permissions" }
|
|
|
|
// SuperAdminRoleCode 超级管理员角色 code。守卫层对其短路放行,
|
|
// 且菜单树返回完整菜单,无需逐条枚举权限分配。
|
|
const SuperAdminRoleCode = "super_admin"
|
|
|
|
// MenuNode 是菜单树节点,用于 /admin/info 返回前端渲染。
|
|
type MenuNode struct {
|
|
Permission
|
|
Children []MenuNode `json:"children,omitempty"`
|
|
}
|