smab

package module
v0.0.0-...-62e58e0 Latest Latest
Warning

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

Go to latest
Published: Apr 22, 2024 License: BSD-3-Clause Imports: 29 Imported by: 0

README

mongo版本 admin管理

mab标签可选

  • t 代表前端渲染的类型

    • img 作用于表格 会把值作为 img 的src 进行图片显示
      • thumbnail 可描述为缩略图模式
    • textarea 作用于表单 会渲染为textarea输入框
    • markdown 作用于表单 会渲染为markdown编辑器
  • fk 外键

    • 例子: fk=User
    • 可选 col=[FieldName] 即指定映射字段信息 eg: fk=EventManage,col=Name 建议只使用id primitive.ObjectID类型
  • hide 隐藏显示

    • hide=form 在新增/修改时候隐藏
    • hide=add 在新增时候隐藏
    • hide=edit 在修改时隐藏
    • hide=table 在表格显示时隐藏
    • hide 在所有情况下都隐藏
图表接口
  • 发送接口不论是否在本站 直接发送 会附带4个参数
    • GET
      • chart_id
      • user_id
      • screen_id
      • chart_type
  • 返回的内容必须是一个json 可以全覆盖开始设置的配置文件
    • 内容不能传错 会错误而崩溃 (暂时不处理)

动作

  • 发送接口一定是POST请求 会附带4个必备参数
    • POST
      • record 代表选中行的数据(可能会变更请注意时间戳 太长了就不可信了)
      • t 当前时间戳
      • action 动作的名称
      • table 当前表名
      • form? 可选 如果设置了对应的scheme 则会把表单结果传递
        • 如果表单没有一个必填项 若未有任何输入则不会出现此字段信息
  • 因为是前端直接发送 会面临跨域问题 暂不考虑进行后端转发 请酌情处理 若要后端转发 请提issue 会安排

任务

  • 创建任务需要在代码层完成
  • 任务的action form 都采用表单生成器 使用post发送数据
    • POST
      • sm_task_id
      • sm_user_id
      • sm_action_name action的名称
      • built 为内置传递内容 json
      • form? 如果设置了对应的scheme 则会把表单结果传递
        • 只要设置了此字段 即时没有任何必填项 也会包含此字段请求 只是值可能为空

子应用(微前端)

  • 使用umi-qiankun 文档
  • 自动向子应用注入 package对象 内有 userToken userInfo userPer 对应当前用户token 当前用户信息 当前用户权限
    • 子应用通过 const package = useModel('@@qiankunStateFromMaster') 即可获取数据

问题

  • 权限casbin是通过本地的sqlite保存 可能不利于横向拓展 后期若有需求再变更
  • 登录未做爆破验证 可以选择自己前置rate

提示

  • 配置的图表信息参数都依赖于 charts
  • 用户的创建者对用户有管理权 即使账号的权重权限已经超过了创建者但创建者依然有最大的控制权
    • 虽然使用了rbac 但是考虑到后台的逻辑性和特殊性 还是以级别相对控制

记录

  • bson标签的flatten主要用于 mongo-go-struct-to-bson 这个库 已经放弃使用

Documentation

Index

Constants

This section is empty.

Variables

View Source
var CustomJwt = jwt.New(jwt.Config{
	ValidationKeyGetter: func(token *jwt.Token) (interface{}, error) {
		return MySecret, nil
	},
	Expiration:    true,
	SigningMethod: jwt.SigningMethodHS256,
})

CustomJwt 自定义JWT 使用办法 中间层 handler.CustomJwt.Serve, handler.TokenToUserUidMiddleware,user handler

View Source
var MySecret = []byte("8657684ae02840ead423e0d781a7a885")

Functions

func ChangeUserPassword

func ChangeUserPassword(ctx iris.Context)

ChangeUserPassword 变更用户密码

func CreateTask

func CreateTask(ctx context.Context, t *SmTask) error

CreateTask 创建任务

func DeleteTask

func DeleteTask(ctx context.Context, id string) error

DeleteTask 删除任务

func GenJwtToken

func GenJwtToken(userUid, userName string) string

GenJwtToken 生成token

func GenMarkdownVerifyTask

func GenMarkdownVerifyTask(ctx context.Context, name string, group string, desc string, content TaskMarkdownState, postUrl string, injectStrData string) error

GenMarkdownVerifyTask 快速创建一个基于markdown介绍的审核类任务

func GenTaskInjectData

func GenTaskInjectData(input any) string

GenTaskInjectData 快速生成inject的数据 可以是struct 也可以是map

func GetQianKunConfigFunc

func GetQianKunConfigFunc(ctx iris.Context)

GetQianKunConfigFunc 获取乾坤配置信息

func GetUserInfo

func GetUserInfo(ctx iris.Context)

GetUserInfo 获取用户信息包含权限

func Index

func Index(ctx iris.Context)

Index 首页

func Login

func Login(ctx iris.Context)

Login 登录

func PolicyChange

func PolicyChange(userName, path, methods string, add bool) error

PolicyChange 权限变更

func SetTaskSuccess

func SetTaskSuccess(ctx context.Context, id string, success bool, msg string) error

SetTaskSuccess 设置任务完成

func TokenToUserUidMiddleware

func TokenToUserUidMiddleware(ctx iris.Context)

TokenToUserUidMiddleware 登录token存储信息 记录到上下文中

Types

type ActionItem

type ActionItem struct {
	Name   string `json:"name,omitempty" bson:"name,omitempty"`       // 不能重复
	ReqUri string `json:"req_uri,omitempty" bson:"req_uri,omitempty"` // 操作请求地址
	Scheme string `json:"scheme,omitempty" bson:"scheme,omitempty" `  // 需要用户填写的表单数据
}

ActionItem 操作

func CreateAction

func CreateAction(name string, toUrl string, scheme string) ActionItem

CreateAction 创建一个action

func PassAction

func PassAction(url string) ActionItem

func PassOrNotReasonAction

func PassOrNotReasonAction(passUrl string, notPassUrl string) []ActionItem

PassOrNotReasonAction 通过或者不通过的action 不通过需要输入理由 built 为内置json str

func PassOrRejectAction

func PassOrRejectAction(uri string) []ActionItem

PassOrRejectAction 通过或拒绝action 共用一个uri

func RejectAction

func RejectAction(url string) ActionItem

type CasbinConfigDefine

type CasbinConfigDefine struct {
	Uri      string
	Database string
	// contains filtered or unexported fields
}

type Configs

type Configs struct {
	Name             string
	App              *iris.Application
	ModelList        []interface{}          // 模型列表
	AbridgeName      string                 // tag的解析名称
	Prefix           string                 // 前缀
	AllowTokenLogin  bool                   // 是否允许root使用token登录
	OnFileUpload     func(ctx iris.Context) // 图片上传事件 成功返回JSON{origin:"",thumbnail:""} origin必须存在 失败则JSON{detail:"失败理由"}
	PublicKey        string                 // 公开密钥 如果有密钥则会对上传进行介入
	CasbinConfig     CasbinConfigDefine
	GlobalQianKun    []QianKunConfigExtra // 全局所有用户都能看到的前端信息
	SuperUserQianKun []QianKunConfigExtra // 仅管理员可见
	WelComeConfig    WelComeConfigDefine
}

type DefaultField

type DefaultField struct {
	Id       primitive.ObjectID `bson:"_id" json:"id" comment:"id"`
	UpdateAt time.Time          `bson:"update_at" json:"update_at" comment:"更新时间"`
	CreateAt time.Time          `json:"create_at" bson:"create_at" comment:"创建时间"`
}

func (*DefaultField) BeforeInsert

func (u *DefaultField) BeforeInsert(ctx context.Context) error

func (*DefaultField) BeforeUpdate

func (u *DefaultField) BeforeUpdate(ctx context.Context) error

func (*DefaultField) BeforeUpsert

func (u *DefaultField) BeforeUpsert(ctx context.Context) error

type FilterDataExtra

type FilterDataExtra struct {
	ModelName string   `json:"model_name" bson:"model_name" comment:"模型名称"`
	Key       []string `json:"key" bson:"key" comment:"键"`
	Value     string   `json:"value" bson:"value" comment:"值"`
}

type QianKunConfigExtra

type QianKunConfigExtra struct {
	Name  string `json:"name" bson:"name" comment:"子应用名称"`
	Entry string `json:"entry" bson:"entry" comment:"子应用 html 地址"`
	Path  string `json:"path" bson:"path" comment:"子应用访问路径"`
	Label string `json:"label" bson:"label" comment:"子应用中文名"`
}

type SmAction

type SmAction struct {
	DefaultField `bson:",inline,flatten"`
	CreateUserId primitive.ObjectID `json:"create_user_id" bson:"create_user_id" comment:"创建者"`
	UserId       primitive.ObjectID `json:"user_id" bson:"user_id" comment:"用户"`
	Scope        string             `json:"scope" bson:"scope" comment:"作用范围"` // 表名
	Name         string             `json:"name" bson:"name" comment:"操作名称"`
	Scheme       string             `json:"scheme" bson:"scheme" comment:"表单定义" mab:"t=textarea"`
	PostUrl      string             `json:"post_url" bson:"post_url" comment:"发送接口"`
}

type SmActionReq

type SmActionReq struct {
	Record map[string]any `json:"record" form:"record"`
	T      string         `json:"t" form:"t"`
	Action string         `json:"action" form:"action"`
	Table  string         `json:"table" form:"table"`
}

SmActionReq 动作请求基础

type SmDashBoard

type SmDashBoard struct {
	DefaultField  `bson:",inline,flatten"`
	ScreenId      primitive.ObjectID `json:"screen_id" bson:"screen_id"` // 屏幕ID
	Name          string             `json:"name" bson:"name"`           // 图表名称
	ChatType      string             `json:"chat_type" bson:"chat_type"` // 图表类型
	DataUri       string             `json:"data_uri" bson:"data_uri"`   // 数据请求接口
	Extra         dashBoardExtra     `json:"extra" bson:"extra"`
	Config        string             `json:"config" bson:"config"`                 // 配置文件 json字符串
	RefreshSecond uint64             `json:"refresh_second" bson:"refresh_second"` // 数据刷新间隔 0则是不刷新
	CreateUserId  primitive.ObjectID `json:"create_user_id" bson:"create_user_id"`
}

SmDashBoard 图表

type SmDashBoardScreen

type SmDashBoardScreen struct {
	DefaultField `bson:",inline,flatten"`
	Priority     uint64               `json:"priority" bson:"priority"`     // 优先级 越大越提前
	Name         string               `json:"name" bson:"name"`             // 屏幕名称
	IsDefault    bool                 `json:"is_default" bson:"is_default"` // 是否为默认
	CreateUserId primitive.ObjectID   `json:"create_user_id" bson:"create_user_id"`
	ViewUserId   []primitive.ObjectID `json:"view_user_id" bson:"view_user_id"` // 有权查看的用户
}

SmDashBoardScreen 仪表台屏幕 只有管理员能够操作

type SmTask

type SmTask struct {
	DefaultField `bson:",inline,flatten"`
	Name         string             `json:"name,omitempty" bson:"name,omitempty" comment:"任务名称"`
	Desc         string             `json:"desc,omitempty" bson:"desc,omitempty" comment:"任务描述"`
	Type         uint8              `json:"type,omitempty" bson:"type,omitempty" comment:"任务类型"` // 任务类型
	Group        string             `json:"group,omitempty" bson:"group,omitempty" comment:"任务组"`
	Tags         []string           `json:"tags,omitempty" bson:"tags,omitempty" comment:"标签组"`
	Content      string             `json:"content,omitempty" bson:"content,omitempty" comment:"任务内容" mab:"t=markdown"` // 任务内容 markdown格式
	InjectData   string             `json:"inject_data,omitempty" bson:"inject_data,omitempty" comment:"t=textarea"`    // 任务注入的json字符串 可以自行序列化回去
	Action       []ActionItem       `json:"action,omitempty" bson:"action,omitempty" comment:"按钮组"`
	ExpTime      time.Time          `json:"exp_time,omitempty" bson:"exp_time,omitempty" comment:"任务过期时间"`       // 任务过期时间
	ToUser       primitive.ObjectID `json:"to_user,omitempty" bson:"to_user,omitempty" comment:"操作的用户"`          // 展示的用户
	CreateUser   primitive.ObjectID `json:"create_user,omitempty" bson:"create_user,omitempty" comment:"创建用户"`   // 创建的用户
	Success      bool               `json:"success,omitempty" bson:"success,omitempty" comment:"操作完成?"`          // 操作完成
	Msg          string             `json:"msg,omitempty" bson:"msg,omitempty" comment:"操作结果"`                   // 操作结果
	AllowDelete  bool               `json:"allow_delete,omitempty" bson:"allow_delete,omitempty" comment:"允许删除"` // 是否允许删除
}

SmTask 任务

func GenTask

func GenTask(name string, desc ...string) *SmTask

GenTask 生成任务

func GenTaskAtRoot

func GenTaskAtRoot(name string, desc ...string) *SmTask

GenTaskAtRoot 生成root任务

func GenTaskGroupAtRoot

func GenTaskGroupAtRoot(name string, group string) *SmTask

GenTaskGroupAtRoot 生成特定组的root任务

func GetTask

func GetTask(ctx context.Context, id string) (*SmTask, error)

GetTask 获取任务

type SmUserModel

type SmUserModel struct {
	DefaultField `bson:",inline,flatten" `
	Name         string               `json:"name" bson:"name" comment:"用户名"`
	Password     string               `json:"password" bson:"password" comment:"加密密码"`
	Salt         string               `json:"salt" bson:"salt" comment:"salt"`
	Desc         string               `json:"desc" bson:"desc" comment:"描述"`
	Phone        string               `json:"phone" bson:"phone" comment:"手机号"`
	SuperUser    bool                 `json:"super_user" bson:"super_user" comment:"是否超级用户?"`
	CreateId     primitive.ObjectID   `json:"create_id" bson:"create_id" comment:"创建者ID"` // 创建者ID
	QianKun      []QianKunConfigExtra `json:"qian_kun,omitempty" bson:"qian_kun,omitempty" comment:"乾坤配置"`
	FilterData   []FilterDataExtra    `json:"filter_data" bson:"filter_data" comment:"过滤数据"`
}

SmUserModel 管理后台用户

var (
	RootUser *SmUserModel
)

func AnyGetUser

func AnyGetUser(ctx context.Context, params bson.M) (*SmUserModel, error)

AnyGetUser 任意参数获取用户

func CreateUser

func CreateUser(ctx context.Context, u *SmUserModel) (*SmUserModel, error)

CreateUser 新增用户

func IdGetUser

func IdGetUser(ctx context.Context, id string) (*SmUserModel, error)

IdGetUser id获取用户

func NameGetUser

func NameGetUser(ctx context.Context, name string) (*SmUserModel, error)

NameGetUser name获取用户

type SpAdmin

type SpAdmin struct {
	Mdb *qmgo.Database
	// contains filtered or unexported fields
}
var NowSp *SpAdmin

func New

func New(mdb *qmgo.Database, c Configs) (*SpAdmin, error)

type TaskInjectBaseReq

type TaskInjectBaseReq struct {
	SmTaskId     string `json:"sm_task_id" form:"sm_task_id" validate:"required"`
	SmUserId     string `json:"sm_user_id" form:"sm_user_id" validate:"required"`
	SmActionName string `json:"sm_action_name" bson:"sm_action_name" validate:"required"`
}

type TaskMarkdownState

type TaskMarkdownState struct {
	Stage []string
}

func (*TaskMarkdownState) Add

func (u *TaskMarkdownState) Add(n string)

func (*TaskMarkdownState) AddCodeStr

func (u *TaskMarkdownState) AddCodeStr(code string, languages ...string)

func (*TaskMarkdownState) AddImg

func (u *TaskMarkdownState) AddImg(href string, title string)

func (*TaskMarkdownState) AddTitle

func (u *TaskMarkdownState) AddTitle(text string, level uint8)

func (*TaskMarkdownState) Adds

func (u *TaskMarkdownState) Adds(layout string, inputs ...any)

func (*TaskMarkdownState) GetStr

func (u *TaskMarkdownState) GetStr(sep ...string) string

type UserChangePasswordReq

type UserChangePasswordReq struct {
	Id       string `json:"id" comment:"id" validate:"required"`
	Password string `json:"password" comment:"密码" validate:"required,min=6,max=20"`
}

UserChangePasswordReq 用户变更密码

type UserChangeRolesReq

type UserChangeRolesReq struct {
	Id   uint64 `json:"id" comment:"id" validate:"required"`
	Role string `json:"role" comment:"群组名" validate:"required"`
	Add  bool   `json:"add" comment:"添加"`
}

admin 变更用户群组

type UserLoginReq

type UserLoginReq struct {
	UserName string `json:"user_name" comment:"用户名" validate:"required,max=20,min=3"`
	Password string `json:"password" comment:"密码" validate:"required,min=3,max=20"`
}

UserLoginReq 用户登录

type WelComeConfigDefine

type WelComeConfigDefine struct {
	Title    string   `json:"title"`     // 标题
	MainText []string `json:"main_text"` //
	Desc     []string `json:"desc"`      //
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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