// Package admin 定义后台管理专用领域模型(RBAC)。 // 表名统一以 admin_ 为前缀,与小程序业务(users / mini_programs)物理隔离, // 因此本包模型不进小程序数据隔离逻辑。 package admin import "time" // 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 time.Time `json:"created_at"` UpdatedAt time.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 time.Time `json:"created_at"` UpdatedAt time.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 time.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"` }