admin

package
v0.3.0 Latest Latest
Warning

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

Go to latest
Published: Sep 26, 2021 License: MIT Imports: 20 Imported by: 0

README

admin

管理员模块,包括账号、角色、权限的管理接口;账号登录、修改密码的接口以及接口访问权限检查

依赖

Provider

HTTP接口

  • POST /pub/admin/login 账号登录
  • POST /ana/admin/logout 账号登出
  • POST /ana/admin/update-my-pass 修改当前会话账号的密码
  • GET /ana/admin/menu 查询当前会话账号的菜单
  • GET /ana/admin/query-admin-page 查询账号列表
  • GET /ana/admin/get-by-id" 根据ID获取账号信息
  • GET /ana/admin/get-by-account 根据账号获取账号信息
  • POST /ana/admin/create 添加账号
  • POST /ana/admin/update 修改账号
  • POST /ana/admin/update-password 修改指定账号的密码
  • GET /ana/admin/query-role-list 查询角色列表
  • GET /ana/admin/query-admin-role-list 查询账号的角色

Documentation

Index

Constants

View Source
const AdminSessionID = "AdminSessionID"

Variables

This section is empty.

Functions

func AdminModule

func AdminModule(ac quick.Context)

func AdminSessionCheck

func AdminSessionCheck(storage session.Storage, fnCanAccessAPI FnCanAccessAPI, logf quick.Logf) echo.MiddlewareFunc

AdminSessionCheck

func Migrate

func Migrate(db *gorm.DB) error

Types

type API

type API struct {
	ID     uint   `gorm:"primaryKey" json:"id"`
	Name   string `gorm:"type:varchar(40)" json:"name"`            // 接口名
	Method string `gorm:"type:varchar(20);not null" json:"method"` // 接口方式
	Path   string `gorm:"type:varchar(100);not null" json:"path"`  // 接口路径
}

API 是接口

type APIData

type APIData struct {
	Method string
	Path   string
}

APIData 是简化API

type APIDataList

type APIDataList []APIData

APIDataList 是简化API列表

func (*APIDataList) Scan

func (r *APIDataList) Scan(value interface{}) error

Scan 实现 driver.Scaner

func (*APIDataList) Value

func (r *APIDataList) Value() (driver.Value, error)

Value 实现driver.Valuer

type Action

type Action struct {
	ID   string `json:"id"`
	Name string `json:"name"`
}

Action 表示有权限的动作,比如用户列表界面上的“导出”按钮

type Admin

type Admin struct {
	ID        uint      `gorm:"primaryKey" json:"id"`
	Account   string    `gorm:"type:varchar(30);uniqueIndex;not null" json:"account"`
	Password  string    `gorm:"type:varchar(150);not null" json:"-"`
	Name      string    `gorm:"type:varchar(30)" json:"name"`
	Mobile    string    `gorm:"type:varchar(20)" json:"mobile"`
	Code      string    `gorm:"type:varchar(30);not null;uniqueIndex" json:"code"`
	Active    bool      `json:"active"`
	CreatedAt time.Time `json:"createdAt"`
	UpdatedAt time.Time `json:"updatedAt"`
}

Admin 是管理员

func (Admin) CheckPassword

func (o Admin) CheckPassword(pass string) bool

CheckPassword 检查传入的密码是否本实例的密码

func (*Admin) Desensitive

func (o *Admin) Desensitive()

func (*Admin) SetPassword

func (o *Admin) SetPassword(pass string) error

SetPassword 设置密码

type AdminLoginReq

type AdminLoginReq struct {
	Account  string `json:"account" validate:"nonzero"`
	Password string `json:"password" validate:"nonzero"`
	Remember bool   `json:"remember"`
}

AdminLoginReq 是管理员登录请求

type AdminRole

type AdminRole struct {
	ID      uint `gorm:"primaryKey" json:"id"`
	AdminID uint `gorm:"index" json:"adminID"`
	RoleID  uint `gorm:"index" json:"roleID"`
}

AdminRole 是管理员的角色

type CreateAdminCmd

type CreateAdminCmd struct {
	Account    string `json:"account" validate:"nonzero"`
	Password   string `json:"password" validate:"nonzero"`
	Name       string `json:"name" validate:"nonzero"`
	Mobile     string `json:"mobile" validate:"nonzero"`
	Active     bool   `json:"active"`
	RoleIDList []uint `json:"roleIdList"`
}

CreateAdminCmd 是添加管理员的命令

type DataPerm

type DataPerm struct {
	Domain string                     `json:"domain"`
	Perm   map[string]json.RawMessage `json:"perm"`
}

type DataPerms

type DataPerms []DataPerm

func (*DataPerms) Scan

func (r *DataPerms) Scan(value interface{}) error

Scan 实现 driver.Scaner

func (DataPerms) Value

func (r DataPerms) Value() (driver.Value, error)

Value 实现driver.Valuer

type FnBuildDataPermAppliers

type FnBuildDataPermAppliers func(ctx context.Context, adminID uint) []dataperm.Applier

FnBuildDataPermAppliers 根据adminID构造出数据权限适配器

type FnCanAccessAPI

type FnCanAccessAPI func(ctx context.Context, adminID uint, method, path string) bool

FnCanAccessAPI 检查adminID是否有有个接口的访问权限

type Menu struct {
	ID        uint             `gorm:"primaryKey" json:"id"`
	ParentID  uint             `json:"parentID"`
	Name      string           `gorm:"type:varchar(30);not null" json:"name"`
	Type      string           `gorm:"type:varchar(10)" json:"type"`
	URL       string           `gorm:"type:varchar(50);not null" json:"url"`
	Sort      int              `json:"sort"`
	APIList   sqlex.StringList `gorm:"type:varchar(2000)" json:"apiList"`
	CreatedAt time.Time        `json:"createdAt"`
	UpdatedAt time.Time        `json:"updatedAt"`
}

Menu 是菜单

type MenuData struct {
	ID       uint
	ParentID uint
	Name     string
	Type     string
}

MenuData 是菜单

type MenuDataList []MenuData

MenuDataList 是菜单列表

func (r *MenuDataList) Scan(value interface{}) error

Scan 实现 driver.Scaner

func (r *MenuDataList) Value() (driver.Value, error)

Value 实现driver.Valuer

type MenuList []Menu

MenuList 是菜单列表

func (ml MenuList) AsNode() MenuNode

AsNode 把菜单列表转成菜单树

func (ml MenuList) Len() int
func (ml MenuList) Less(i, j int) bool
func (ml MenuList) Swap(i, j int)
type MenuNode struct {
	ID       uint        `json:"id"`
	ParentID uint        `json:"parentID"`
	Name     string      `json:"name"`
	Type     string      `json:"type"`
	URL      string      `json:"url"`
	Children []*MenuNode `json:"children"`
	Actions  []*Action   `json:"actions"`
}

MenuNode 是菜单树

type QueryAdminPageByRoleCmd

type QueryAdminPageByRoleCmd struct {
	Page       int    `query:"page"`
	Size       int    `query:"size"`
	RoleIDList []uint `query:"roleIDList"`
	Account    string `query:"account"`
	Name       string `query:"name"`
	Mobile     string `query:"mobile"`
	Active     *bool  `query:"active"`
}

QueryAdminPageByRoleCmd 是根据角色查询管理员的命令

type QueryAdminPageCmd

type QueryAdminPageCmd struct {
	Page    int    `query:"page"`
	Size    int    `query:"size"`
	Account string `query:"account"`
	Name    string `query:"name"`
	Mobile  string `query:"mobile"`
	Active  *bool  `query:"active"`
}

QueryAdminPageCmd 是查询管理员分页列表的命令

type QueryRoleListCmd

type QueryRoleListCmd struct {
	Group string `query:"group"`
	Key   string `query:"key"`
}

QueryRoleListCmd 查询角色列表的命令

type Role

type Role struct {
	ID        uint      `gorm:"primaryKey" json:"id"`                   // 角色ID
	Group     string    `gorm:"type:varchar(30);not null" json:"group"` // 所属组
	Key       string    `gorm:"type:varchar(30);not null" json:"key"`   // 角色特性
	Name      string    `gorm:"type:varchar(30);not null" json:"name"`  // 角色名称
	DataPerms DataPerms `gorm:"type:varchar(500)" json:"dataPerm"`      // 数据权限
	CreatedAt time.Time `json:"createdAt"`
	UpdatedAt time.Time `json:"updatedAt"`
}

Role 是角色

type RoleData

type RoleData struct {
	ID   uint
	Key  string
	Name string
}

RoleData 是角色

type RoleDataList

type RoleDataList []RoleData

RoleDataList 是角色列表

func (*RoleDataList) Scan

func (r *RoleDataList) Scan(value interface{}) error

Scan 实现 driver.Scaner

func (*RoleDataList) Value

func (r *RoleDataList) Value() (driver.Value, error)

Value 实现driver.Valuer

type RoleMenu

type RoleMenu struct {
	ID     uint `gorm:"primaryKey" json:"id"`
	RoleID uint `gorm:"index" json:"roleID"`
	MenuID uint `gorm:"index" json:"menuID"`
}

RoleMenu 是角色的菜单

type Roles

type Roles []Role

Roles 角色组 用来使多角色的一些判断更方便点

func (Roles) BelongGroup

func (rs Roles) BelongGroup(group string) bool

BelongGroup 判断角色是否不是归属某个组 只要有一个角色有即true

func (Roles) ContainsKey

func (rs Roles) ContainsKey(key string) bool

ContainsKey 查看角色是否包含某个key

func (Roles) IsCFDGroup

func (rs Roles) IsCFDGroup() bool

IsCFDGroup 返回是不是净菜角色

type Service

type Service interface {
	QueryAdminPage(context.Context, QueryAdminPageCmd) ([]Admin, support.Page, error)                                 // 查询管理员分页列表
	GetAdminByID(context.Context, uint) (Admin, error)                                                                // 根据ID查找管理员
	GetAdminByAccount(context.Context, string) (Admin, error)                                                         // 根据帐号查找管理员
	GetAdminByWxopenid(context.Context, string) (Admin, error)                                                        // 根据微信openid查找管理员
	CreateAdmin(context.Context, CreateAdminCmd) (Admin, error)                                                       // 创建管理员
	UpdateAdmin(context.Context, UpdateAdminCmd) error                                                                // 修改管理员
	UpdateAdminPassword(context.Context, UpdateAdminPasswordCmd) error                                                // 修改管理员密码
	QueryRoleListByAdminID(context.Context, uint) (Roles, error)                                                      // 查询管理员的角色列表
	QueryRoleIDListByAdminID(context.Context, uint) ([]uint, error)                                                   // 查询管理员的角色ID列表
	QueryMenuListByAdminID(context.Context, uint) ([]Menu, error)                                                     // 查询管理员拥有的菜单列表
	QueryRoleList(context.Context, QueryRoleListCmd) ([]Role, error)                                                  // 查询所有角色列表
	GetAdminByCode(ctx context.Context, code string) (data Admin, err error)                                          // 根据code查找管理员
	BindMiniapp(ctx context.Context, code, openid, password string) (err error)                                       // 管理员绑定小程序
	QueryAdminPageByRole(ctx context.Context, cmd QueryAdminPageByRoleCmd) (data []Admin, pg support.Page, err error) // 根据角色查询管理员
	CanAccessAPI(ctx context.Context, adminID uint, method, path string) bool                                         // 返回能否访问某个接口
	GetPermData(ctx context.Context, adminID uint) []DataPerm                                                         // 返回管理员的数据权限
}

Service 是管理员服务

func NewService

func NewService(db *gorm.DB) Service

NewService 构造管理员服务

type Session

type Session struct {
	ID       uint // 管理员ID
	Name     string
	Mobile   string
	Remember bool
}

Session 是登录信息

type UpdateAdminCmd

type UpdateAdminCmd struct {
	ID         uint   `json:"id" validate:"nonzero"`
	Account    string `json:"account" validate:"nonzero"`
	Name       string `json:"name" validate:"nonzero"`
	Mobile     string `json:"mobile" validate:"nonzero"`
	Active     bool   `json:"active"`
	RoleIDList []uint `json:"roleIdList"`
}

UpdateAdminCmd 是修改管理员的命令

type UpdateAdminPasswordCmd

type UpdateAdminPasswordCmd struct {
	ID       uint   `json:"id" validate:"nonzero"`
	Origin   string `json:"origin" vaidate:"nonzero"`
	Password string `json:"password" validate:"nonzero"`
}

UpdateAdminPasswordCmd 是修改管理员密码的命令

type WxAdmin

type WxAdmin struct {
	ID        uint      `gorm:"primaryKey" json:"id"`
	Openid    string    `gorm:"type:varchar(100);not null;uniqueIndex" json:"openid"`
	AdminID   uint      `gorm:"not null" json:"adminID"`
	CreatedAt time.Time `json:"createdAt"`
	UpdatedAt time.Time `json:"updatedAt"`
}

WxAdmin 是微信openid映射的管理员

Jump to

Keyboard shortcuts

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