Documentation
¶
Index ¶
- Constants
- Variables
- type AdminApi
- type AdminExtension
- type AdminMenu
- type AdminPage
- type AdminPermission
- func (a *AdminPermission) GetHttpMethodOptions() []map[string]any
- func (a *AdminPermission) GetHttpPaths() []string
- func (a *AdminPermission) HasMenu() bool
- func (a *AdminPermission) HasMethod(method string) bool
- func (a *AdminPermission) HasPath(path string) bool
- func (a *AdminPermission) IsChildOf(permission *AdminPermission) bool
- func (a *AdminPermission) IsParentOf(permission *AdminPermission) bool
- func (a *AdminPermission) PrimaryKey() string
- func (a *AdminPermission) ShouldPassThrough(ctx http.Context) bool
- type AdminPermissionMenu
- type AdminRelationship
- type AdminRole
- func (r *AdminRole) AllPermissions() []AdminPermission
- func (r *AdminRole) AttachPermission(permission *AdminPermission) error
- func (r *AdminRole) DetachPermission(permission *AdminPermission) error
- func (r *AdminRole) HasUser(user *AdminUser) (bool, error)
- func (r *AdminRole) IsAdministrator() bool
- func (r *AdminRole) PrimaryKey() string
- func (r *AdminRole) SyncPermissions(permissions []*AdminPermission) error
- type AdminRolePermission
- type AdminRoleUser
- type AdminSetting
- type AdminUser
- func (a *AdminUser) AllPermissions() []AdminPermission
- func (a *AdminUser) AttachRole(role *AdminRole) error
- func (a *AdminUser) DetachRole(role *AdminRole) error
- func (a *AdminUser) HasPermission(permission *AdminPermission) (bool, error)
- func (a *AdminUser) HasRole(slug string) (bool, error)
- func (a *AdminUser) IsAdministrator() bool
- func (a *AdminUser) IsRole(role string) (bool, error)
- func (a *AdminUser) PrimaryKey() string
- func (a *AdminUser) SyncRoles(roles []*AdminRole) error
Constants ¶
const ( Extension_Enabled_OFF uint8 = iota Extension_Enabled_ON )
const ( TYPE_ROUTE = iota + 1 TYPE_LINK TYPE_IFRAME TYPE_PAGE )
const ( IS_HOME_ON = 1 IS_HOME_OFF = 0 )
const ( Enabled_OFF uint8 = iota // 0 Enabled_ON // 1 )
Variables ¶
var HttpMethods = []string{
"GET",
"POST",
"PUT",
"DELETE",
"PATCH",
"OPTIONS",
"HEAD",
}
HTTP方法常量
Functions ¶
This section is empty.
Types ¶
type AdminApi ¶
type AdminApi struct {
ID uint `gorm:"primaryKey" json:"id"`
Title string `gorm:"not null;comment:接口名称" json:"title"`
Path string `gorm:"not null;comment:接口路径" json:"path"`
Template string `gorm:"not null;comment:接口模板" json:"template"`
Enabled uint8 `gorm:"default:1;comment:是否启用" json:"enabled"`
Args *string `gorm:"type:text;comment:接口参数" json:"args"`
CreatedAt time.Time `gorm:"autoCreateTime" json:"createdAt"`
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updatedAt"`
}
AdminApi 对应「动态 API」里的一条接口配置。
template 指向内置的动态接口模板(列表 / 详情 / 新增 / 更新 / 删除 / 排序等), args 以 JSON 形式保存模板所需参数。与 owl-admin 的差异在于模板必须是编译期 注册的 handler,不能像 PHP 那样按类名动态实例化。
func NewAdminApi ¶
func NewAdminApi() *AdminApi
type AdminExtension ¶
type AdminExtension struct {
ID uint `gorm:"primaryKey" json:"id"`
Name string `gorm:"unique;not null;comment:扩展名称" json:"name"`
IsEnabled uint8 `gorm:"default:0;comment:是否启用" json:"is_enabled"`
CreatedAt time.Time `gorm:"autoCreateTime" json:"createdAt"`
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updatedAt"`
}
AdminExtension 记录扩展的启用状态。
Go 是静态编译,无法像 PHP 那样把扩展目录丢进去就动态加载,因此这里的 表只承担「已安装扩展名单 + 启用状态」的语义:扩展本身需要在宿主编译期 注册,启停只影响菜单、静态资源与 _settings 下发的 enabled_extensions。
func NewAdminExtension ¶
func NewAdminExtension() *AdminExtension
func (*AdminExtension) PrimaryKey ¶
func (a *AdminExtension) PrimaryKey() string
PrimaryKey 返回模型主键字段名
type AdminMenu ¶
type AdminMenu struct {
ID uint
ParentId uint32
Title string
Icon string
Url string
UrlType uint8
Visible uint8
IsHome uint8
Component string
CustomOrder int `gorm:"column:custom_order"`
KeepAlive *uint8 `gorm:"column:keep_alive"`
IFrameUrl *string `gorm:"column:iframe_url"`
IsFull uint8
Extension string
CreatedAt time.Time
UpdatedAt time.Time
}
type AdminPage ¶
type AdminPage struct {
ID uint `gorm:"primaryKey" json:"id"`
Title string `gorm:"not null;comment:页面名称" json:"title"`
Sign string `gorm:"not null;comment:页面标识" json:"sign"`
Schema string `gorm:"type:text;comment:页面结构" json:"schema"`
CreatedAt time.Time `gorm:"autoCreateTime" json:"createdAt"`
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updatedAt"`
}
AdminPage 对应「页面管理」里的自定义页面。
页面结构以 amis JSON schema 的形式存在库中,前端通过 page_schema?sign=xxx 拉取并直接渲染,因此不需要为每个页面单独写控制器。
func NewAdminPage ¶
func NewAdminPage() *AdminPage
type AdminPermission ¶
type AdminPermission struct {
Name string `json:"name"`
Slug string `json:"slug"`
HttpMethod models.StringSlice `gorm:"type:json" json:"http_method"`
HttpPath models.StringSlice `gorm:"type:json" json:"http_path"`
CustomOrder int `json:"custom_order"`
ParentId uint `json:"parent_id"`
orm.Model
AdminRoles []*AdminRole `gorm:"many2many:admin_role_permissions;joinForeignKey:permission_id;joinReferences:role_id" json:"-"`
AdminMenus []*AdminMenu `gorm:"many2many:admin_permission_menu;joinForeignKey:permission_id;joinReferences:menu_id" json:"-"`
}
func (*AdminPermission) GetHttpMethodOptions ¶
func (a *AdminPermission) GetHttpMethodOptions() []map[string]any
GetHttpMethodOptions 获取HTTP方法选项
func (*AdminPermission) GetHttpPaths ¶
func (a *AdminPermission) GetHttpPaths() []string
GetHttpPaths 获取HTTP路径列表
func (*AdminPermission) HasMethod ¶
func (a *AdminPermission) HasMethod(method string) bool
HasMethod 检查权限是否包含指定的HTTP方法
func (*AdminPermission) HasPath ¶
func (a *AdminPermission) HasPath(path string) bool
HasPath 检查权限是否包含指定的路径
func (*AdminPermission) IsChildOf ¶
func (a *AdminPermission) IsChildOf(permission *AdminPermission) bool
IsChildOf 检查当前权限是否是指定权限的子级
func (*AdminPermission) IsParentOf ¶
func (a *AdminPermission) IsParentOf(permission *AdminPermission) bool
IsParentOf 检查当前权限是否是指定权限的父级
func (*AdminPermission) PrimaryKey ¶
func (a *AdminPermission) PrimaryKey() string
PrimaryKey 返回主键名称
func (*AdminPermission) ShouldPassThrough ¶
func (a *AdminPermission) ShouldPassThrough(ctx http.Context) bool
ShouldPassThrough 检查请求是否应该通过权限验证
type AdminPermissionMenu ¶
type AdminPermissionMenu struct {
PermissionID uint `gorm:"primaryKey;column:permission_id"`
MenuID uint `gorm:"primaryKey;column:menu_id"`
orm.Timestamps
}
AdminPermissionMenu 权限菜单关联表模型
type AdminRelationship ¶
type AdminRelationship struct {
ID uint `gorm:"primaryKey" json:"id"`
Model string `gorm:"not null;comment:模型" json:"model"`
Title string `gorm:"not null;comment:关联名称" json:"title"`
Type string `gorm:"not null;comment:关联类型" json:"type"`
Remark *string `gorm:"comment:备注" json:"remark"`
Args *string `gorm:"type:text;comment:关联参数" json:"args"`
Extra *string `gorm:"type:text;comment:额外参数" json:"extra"`
CreatedAt time.Time `gorm:"autoCreateTime" json:"createdAt"`
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updatedAt"`
}
AdminRelationship 记录「动态关联」配置。
Goravel 的 ORM 关联必须在 struct 上静态声明,没有 Eloquent 那样的运行时 resolveRelationUsing,因此这张表在 Go 版的定位是「关联元数据登记 + 代码预览」:后台可以把关联关系登记清楚、导出成 struct 方法,但不会像 PHP 版那样登记后立刻生效。
func NewAdminRelationship ¶
func NewAdminRelationship() *AdminRelationship
func (*AdminRelationship) PrimaryKey ¶
func (a *AdminRelationship) PrimaryKey() string
PrimaryKey 返回模型主键字段名
type AdminRole ¶
type AdminRole struct {
Name string `gorm:"size:50;not null;unique"`
Slug string `gorm:"size:50;not null;unique"`
orm.Model
// 关联关系
AdminUsers []*AdminUser `gorm:"many2many:admin_role_users;joinForeignKey:role_id;joinReferences:user_id"`
AdminPermissions []*AdminPermission `gorm:"many2many:admin_role_permissions;joinForeignKey:role_id;joinReferences:permission_id"`
}
AdminRole 角色模型
func NewAdminRole ¶
func NewAdminRole() *AdminRole
func (*AdminRole) AllPermissions ¶
func (r *AdminRole) AllPermissions() []AdminPermission
AllPermissions 获取角色的所有权限
func (*AdminRole) AttachPermission ¶
func (r *AdminRole) AttachPermission(permission *AdminPermission) error
AttachPermission 为角色分配权限
func (*AdminRole) DetachPermission ¶
func (r *AdminRole) DetachPermission(permission *AdminPermission) error
DetachPermission 移除角色权限
func (*AdminRole) IsAdministrator ¶
IsAdministrator 检查是否为超级管理员
func (*AdminRole) SyncPermissions ¶
func (r *AdminRole) SyncPermissions(permissions []*AdminPermission) error
SyncPermissions 同步角色权限
type AdminRolePermission ¶
type AdminRolePermission struct {
RoleID uint `gorm:"primaryKey;column:role_id"`
PermissionID uint `gorm:"primaryKey;column:permission_id"`
orm.Timestamps
}
AdminRolePermission 角色权限关联表模型
type AdminRoleUser ¶
type AdminRoleUser struct {
RoleID uint `gorm:"primaryKey;column:role_id"`
UserID uint `gorm:"primaryKey;column:user_id"`
orm.Timestamps
}
AdminRoleUser 角色用户关联表模型
type AdminSetting ¶
type AdminSetting struct {
Key string
Values string
orm.Timestamps
}
func NewAdminSetting ¶
func NewAdminSetting() *AdminSetting
type AdminUser ¶
type AdminUser struct {
ID uint `gorm:"primaryKey" json:"id"`
Username string `gorm:"unique;not null;comment:用户名" json:"username"`
Password string `gorm:"not null;comment:密码" json:"password"`
Enabled uint8 `gorm:"type:tinyint unsigned;default:1;comment:启用状态(1:启用,0:禁用)" json:"enabled"`
Name string `gorm:"not null;comment:姓名" json:"name"`
Avatar string `gorm:"comment:头像" json:"avatar"`
RememberToken string `gorm:"comment:记住登录" json:"remember_token"`
CreatedAt time.Time `gorm:"autoCreateTime" json:"createdAt"`
UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updatedAt"`
AdminRoles []*AdminRole `gorm:"many2many:admin_role_users;joinForeignKey:user_id;joinReferences:role_id"`
}
func NewAdminUser ¶
func NewAdminUser() *AdminUser
func (*AdminUser) AllPermissions ¶
func (a *AdminUser) AllPermissions() []AdminPermission
AllPermissions 获取用户所有权限 AllPermissions 汇总用户所有角色下的权限(按权限 ID 去重)。
之前这里写成 Model(a).With("AdminPermissions").Association("AdminRoles").Find(&permissions): 关联名是 AdminRoles,接收的却是 []AdminPermission,类型对不上必然报错, 于是非超管用户永远拿到空权限、所有接口 403。
func (*AdminUser) AttachRole ¶
AttachRole 为用户分配角色
func (*AdminUser) DetachRole ¶
DetachRole 移除用户角色
func (*AdminUser) HasPermission ¶
func (a *AdminUser) HasPermission(permission *AdminPermission) (bool, error)
HasPermission 检查用户是否拥有指定权限
func (*AdminUser) IsAdministrator ¶
IsAdministrator 检查用户是否为超级管理员