rbac
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
// 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"`
|
||||
}
|
||||
Reference in New Issue
Block a user