admin

package
v1.18.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 23, 2026 License: MIT Imports: 7 Imported by: 0

Documentation

Index

Constants

View Source
const (
	Extension_Enabled_OFF uint8 = iota
	Extension_Enabled_ON
)
View Source
const (
	TYPE_ROUTE = iota + 1
	TYPE_LINK
	TYPE_IFRAME
	TYPE_PAGE
)
View Source
const (
	IS_HOME_ON  = 1
	IS_HOME_OFF = 0
)
View Source
const (
	Enabled_OFF uint8 = iota // 0
	Enabled_ON               // 1
)

Variables

View Source
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

func (*AdminApi) PrimaryKey

func (a *AdminApi) PrimaryKey() string

PrimaryKey 返回模型主键字段名

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

func (*AdminPage) PrimaryKey

func (a *AdminPage) PrimaryKey() string

PrimaryKey 返回模型主键字段名

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 NewPermission

func NewPermission() *AdminPermission

NewPermission 创建新的权限实例

func (*AdminPermission) GetHttpMethodOptions

func (a *AdminPermission) GetHttpMethodOptions() []map[string]any

GetHttpMethodOptions 获取HTTP方法选项

func (*AdminPermission) GetHttpPaths

func (a *AdminPermission) GetHttpPaths() []string

GetHttpPaths 获取HTTP路径列表

func (*AdminPermission) HasMenu

func (a *AdminPermission) HasMenu() bool

HasMenu 检查权限是否关联菜单

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 权限菜单关联表模型

func (AdminPermissionMenu) TableName

func (AdminPermissionMenu) TableName() string

TableName 指定表名

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) HasUser

func (r *AdminRole) HasUser(user *AdminUser) (bool, error)

HasUser 检查角色是否拥有指定用户

func (*AdminRole) IsAdministrator

func (r *AdminRole) IsAdministrator() bool

IsAdministrator 检查是否为超级管理员

func (*AdminRole) PrimaryKey

func (r *AdminRole) PrimaryKey() string

PrimaryKey 返回模型主键字段名

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 角色权限关联表模型

func (AdminRolePermission) TableName

func (AdminRolePermission) TableName() string

TableName 指定表名

type AdminRoleUser

type AdminRoleUser struct {
	RoleID uint `gorm:"primaryKey;column:role_id"`
	UserID uint `gorm:"primaryKey;column:user_id"`
	orm.Timestamps
}

AdminRoleUser 角色用户关联表模型

func (AdminRoleUser) TableName

func (AdminRoleUser) TableName() string

TableName 指定表名

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

func (a *AdminUser) AttachRole(role *AdminRole) error

AttachRole 为用户分配角色

func (*AdminUser) DetachRole

func (a *AdminUser) DetachRole(role *AdminRole) error

DetachRole 移除用户角色

func (*AdminUser) HasPermission

func (a *AdminUser) HasPermission(permission *AdminPermission) (bool, error)

HasPermission 检查用户是否拥有指定权限

func (*AdminUser) HasRole

func (a *AdminUser) HasRole(slug string) (bool, error)

HasRole 通过 Slug 检查用户是否拥有指定角色

func (*AdminUser) IsAdministrator

func (a *AdminUser) IsAdministrator() bool

IsAdministrator 检查用户是否为超级管理员

func (*AdminUser) IsRole

func (a *AdminUser) IsRole(role string) (bool, error)

IsRole 检查用户是否拥有指定角色

func (*AdminUser) PrimaryKey

func (a *AdminUser) PrimaryKey() string

PrimaryKey 返回模型主键字段名

func (*AdminUser) SyncRoles

func (a *AdminUser) SyncRoles(roles []*AdminRole) error

SyncRoles 同步用户角色

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL