chore: seed migration objects batch 13

This commit is contained in:
dev
2026-10-18 13:25:32 +08:00
parent 24f356c87c
commit 0b6f7785cf
306 changed files with 29023 additions and 0 deletions
+202
View File
@@ -0,0 +1,202 @@
// Package admin
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
package admin
import (
"context"
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/frame/g"
"hotgo/internal/consts"
"hotgo/internal/dao"
"hotgo/internal/library/dict"
"hotgo/internal/library/hgorm"
"hotgo/internal/model"
"hotgo/internal/model/entity"
"hotgo/internal/model/input/adminin"
"hotgo/internal/model/input/form"
"hotgo/internal/service"
)
type sAdminPost struct{}
func NewAdminPost() *sAdminPost {
return &sAdminPost{}
}
func init() {
service.RegisterAdminPost(NewAdminPost())
dict.RegisterFunc("adminPostOption", "岗位选项", service.AdminPost().Option)
}
// Delete 删除
func (s *sAdminPost) Delete(ctx context.Context, in *adminin.PostDeleteInp) (err error) {
exist, err := dao.AdminMemberPost.Ctx(ctx).Where(dao.AdminMemberPost.Columns().PostId, in.Id).One()
if err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return err
}
if !exist.IsEmpty() {
return gerror.New("请先解除该岗位下所有已关联用户关联关系!")
}
_, err = dao.AdminPost.Ctx(ctx).WherePri(in.Id).Delete()
return
}
// VerifyUnique 验证部门唯一属性
func (s *sAdminPost) VerifyUnique(ctx context.Context, in *adminin.VerifyUniqueInp) (err error) {
if in.Where == nil {
return
}
cols := dao.AdminPost.Columns()
msgMap := g.MapStrStr{
cols.Name: "岗位名称已存在,请换一个",
cols.Code: "岗位编码已存在,请换一个",
}
for k, v := range in.Where {
if v == "" {
continue
}
message, ok := msgMap[k]
if !ok {
err = gerror.Newf("字段 [ %v ] 未配置唯一属性验证", k)
return
}
if err = hgorm.IsUnique(ctx, &dao.AdminPost, g.Map{k: v}, message, in.Id); err != nil {
return
}
}
return
}
// Edit 修改/新增
func (s *sAdminPost) Edit(ctx context.Context, in *adminin.PostEditInp) (err error) {
// 验证唯一性
err = s.VerifyUnique(ctx, &adminin.VerifyUniqueInp{
Id: in.Id,
Where: g.Map{
dao.AdminPost.Columns().Name: in.Name,
dao.AdminPost.Columns().Code: in.Code,
},
})
if err != nil {
return
}
// 修改
if in.Id > 0 {
_, err = dao.AdminPost.Ctx(ctx).WherePri(in.Id).Data(in).Update()
return
}
// 新增
_, err = dao.AdminPost.Ctx(ctx).Data(in).OmitEmptyData().Insert()
return
}
// MaxSort 最大排序
func (s *sAdminPost) MaxSort(ctx context.Context, in *adminin.PostMaxSortInp) (res *adminin.PostMaxSortModel, err error) {
if in.Id > 0 {
if err = dao.AdminPost.Ctx(ctx).WherePri(in.Id).OrderDesc(dao.AdminPost.Columns().Sort).Scan(&res); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}
}
if res == nil {
res = new(adminin.PostMaxSortModel)
}
res.Sort = form.DefaultMaxSort(res.Sort)
return
}
// View 获取指定岗位信息
func (s *sAdminPost) View(ctx context.Context, in *adminin.PostViewInp) (res *adminin.PostViewModel, err error) {
err = dao.AdminPost.Ctx(ctx).WherePri(in.Id).Scan(&res)
return
}
// List 获取列表
func (s *sAdminPost) List(ctx context.Context, in *adminin.PostListInp) (list []*adminin.PostListModel, totalCount int, err error) {
mod := dao.AdminPost.Ctx(ctx)
cols := dao.AdminPost.Columns()
// 访问路径
if in.Name != "" {
mod = mod.WhereLike(cols.Name, "%"+in.Name+"%")
}
// 模块
if in.Code != "" {
mod = mod.Where(cols.Code, in.Code)
}
// 请求方式
if in.Status > 0 {
mod = mod.Where(cols.Status, in.Status)
}
if len(in.CreatedAt) == 2 {
mod = mod.WhereBetween(cols.CreatedAt, in.CreatedAt[0], in.CreatedAt[1])
}
totalCount, err = mod.Count()
if err != nil {
err = gerror.Wrap(err, "获取岗位列表失败!")
return
}
if totalCount == 0 {
return
}
err = mod.Page(in.Page, in.PerPage).OrderAsc(cols.Sort).Scan(&list)
return
}
// Option 岗位选项
func (s *sAdminPost) Option(ctx context.Context) (opts []*model.Option, err error) {
var list []*entity.AdminPost
if err = dao.AdminPost.Ctx(ctx).OrderAsc(dao.AdminPost.Columns().Sort).Scan(&list); err != nil {
return nil, err
}
if len(list) == 0 {
opts = make([]*model.Option, 0)
return
}
for _, v := range list {
opts = append(opts, dict.GenHashOption(v.Id, v.Name))
}
return
}
// GetMemberByStartName 获取指定用户的第一岗位
func (s *sAdminPost) GetMemberByStartName(ctx context.Context, memberId int64) (name string, err error) {
// 默认取第一岗位
postId, err := dao.AdminMemberPost.Ctx(ctx).Fields(dao.AdminMemberPost.Columns().PostId).Where(dao.AdminMemberPost.Columns().MemberId, memberId).Limit(1).Value()
if err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}
val, err := dao.AdminPost.Ctx(ctx).Fields(dao.AdminPost.Columns().Name).WherePri(postId.Int()).OrderDesc(dao.AdminPost.Columns().Id).Value()
if err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}
return val.String(), nil
}
// Status 更新状态
func (s *sAdminPost) Status(ctx context.Context, in *adminin.PostStatusInp) (err error) {
_, err = dao.AdminPost.Ctx(ctx).WherePri(in.Id).Data(dao.AdminPost.Columns().Status, in.Status).Update()
return
}
+356
View File
@@ -0,0 +1,356 @@
// Package admin
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2025 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
package admin
import (
"context"
"hotgo/internal/consts"
"hotgo/internal/dao"
"hotgo/internal/library/casbin"
"hotgo/internal/library/contexts"
"hotgo/internal/library/hgorm"
"hotgo/internal/model/entity"
"hotgo/internal/model/input/adminin"
"hotgo/internal/model/input/form"
"hotgo/internal/service"
"hotgo/utility/convert"
"hotgo/utility/tree"
"hotgo/utility/validate"
"sort"
"github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/encoding/gjson"
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/frame/g"
)
type sAdminRole struct{}
func NewAdminRole() *sAdminRole {
return &sAdminRole{}
}
func init() {
service.RegisterAdminRole(NewAdminRole())
}
// Verify 验证权限
func (s *sAdminRole) Verify(ctx context.Context, path, method string) bool {
var (
user = contexts.Get(ctx).User
err error
)
if user == nil {
g.Log().Info(ctx, "admin Verify user = nil")
return false
}
if service.AdminMember().VerifySuperId(ctx, user.Id) {
return true
}
ok, err := casbin.Enforcer.Enforce(user.RoleKey, path, method)
if err != nil {
g.Log().Infof(ctx, "admin Verify Enforce err:%+v", err)
return false
}
return ok
}
// List 获取列表
func (s *sAdminRole) List(ctx context.Context, in *adminin.RoleListInp) (res *adminin.RoleListModel, totalCount int, err error) {
var (
mod = dao.AdminRole.Ctx(ctx)
models []*entity.AdminRole
pid int64 = 0
)
// 非超管只获取下级角色
if !service.AdminMember().VerifySuperId(ctx, contexts.GetUserId(ctx)) {
pid = contexts.GetRoleId(ctx)
mod = mod.WhereLike(dao.AdminRole.Columns().Tree, "%"+tree.GetIdLabel(pid)+"%")
}
totalCount, err = mod.Count()
if err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}
if err = mod.Page(in.Page, in.PerPage).Order("sort asc,id asc").Scan(&models); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}
res = new(adminin.RoleListModel)
res.List = s.treeList(pid, models)
return
}
// GetName 获取指定角色的名称
func (s *sAdminRole) GetName(ctx context.Context, id int64) (name string, err error) {
r, err := dao.AdminRole.Ctx(ctx).Fields(dao.AdminRole.Columns().Name).WherePri(id).OrderDesc(dao.AdminRole.Columns().Id).Value()
if err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}
return r.String(), nil
}
// GetMemberList 获取指定用户的岗位列表
func (s *sAdminRole) GetMemberList(ctx context.Context, id int64) (list []*adminin.RoleListModel, err error) {
if err = dao.AdminRole.Ctx(ctx).WherePri(id).OrderDesc(dao.AdminRole.Columns().Id).Scan(&list); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
}
return
}
// GetPermissions 更改角色菜单权限
func (s *sAdminRole) GetPermissions(ctx context.Context, in *adminin.GetPermissionsInp) (res *adminin.GetPermissionsModel, err error) {
values, err := dao.AdminRoleMenu.Ctx(ctx).Fields(dao.AdminRoleMenu.Columns().MenuId).Where(dao.AdminRoleMenu.Columns().RoleId, in.RoleId).Array()
if err != nil {
return
}
if len(values) == 0 {
return
}
res = new(adminin.GetPermissionsModel)
for i := 0; i < len(values); i++ {
res.MenuIds = append(res.MenuIds, values[i].Int64())
}
return
}
// UpdatePermissions 更改角色菜单权限
func (s *sAdminRole) UpdatePermissions(ctx context.Context, in *adminin.UpdatePermissionsInp) (err error) {
err = dao.AdminRoleMenu.Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) {
if _, err = dao.AdminRoleMenu.Ctx(ctx).Where("role_id", in.RoleId).Delete(); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}
if in.MenuIds = convert.UniqueSlice(in.MenuIds); len(in.MenuIds) == 0 {
return
}
list := make(g.List, 0, len(in.MenuIds))
for _, v := range in.MenuIds {
list = append(list, g.Map{
"role_id": in.RoleId,
"menu_id": v,
})
}
if _, err = dao.AdminRoleMenu.Ctx(ctx).Data(list).OmitEmptyData().Insert(); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}
return
})
if err != nil {
return
}
return casbin.Refresh(ctx)
}
func (s *sAdminRole) Edit(ctx context.Context, in *adminin.RoleEditInp) (err error) {
if err = hgorm.IsUnique(ctx, &dao.AdminRole, g.Map{dao.AdminRole.Columns().Name: in.Name}, "名称已存在", in.Id); err != nil {
return
}
if err = hgorm.IsUnique(ctx, &dao.AdminRole, g.Map{dao.AdminRole.Columns().Key: in.Key}, "编码已存在", in.Id); err != nil {
return
}
if in.Pid, in.Level, in.Tree, err = hgorm.GenSubTree(ctx, &dao.AdminRole, in.Pid); err != nil {
return
}
// 修改
if in.Id > 0 {
err = dao.AdminRole.Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
// 更新数据
_, err = dao.AdminRole.Ctx(ctx).Fields(adminin.RoleUpdateFields{}).WherePri(in.Id).Data(in).Update()
if err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return err
}
// 如果当前角色有子级,更新子级tree关系树
return updateRoleChildrenTree(ctx, in.Id, in.Level, in.Tree)
})
return
}
// 新增
if _, err = dao.AdminRole.Ctx(ctx).Fields(adminin.RoleInsertFields{}).Data(in).OmitEmptyData().Insert(); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}
return
}
func updateRoleChildrenTree(ctx context.Context, _id int64, _level int, _tree string) (err error) {
var list []*entity.AdminRole
if err = dao.AdminRole.Ctx(ctx).Where("pid", _id).Scan(&list); err != nil {
return
}
for _, child := range list {
child.Level = _level + 1
child.Tree = tree.GenLabel(_tree, child.Pid)
if _, err = dao.AdminRole.Ctx(ctx).Where("id", child.Id).Data("level", child.Level, "tree", child.Tree).Update(); err != nil {
return
}
if err = updateRoleChildrenTree(ctx, child.Id, child.Level, child.Tree); err != nil {
return
}
}
return
}
func (s *sAdminRole) Delete(ctx context.Context, in *adminin.RoleDeleteInp) (err error) {
var models *entity.AdminRole
if err = dao.AdminRole.Ctx(ctx).Where("id", in.Id).Scan(&models); err != nil {
return
}
if models == nil {
return gerror.New("数据不存在或已删除!")
}
if models.Key == consts.SuperRoleKey {
return gerror.New("超管角色禁止删除!")
}
exist, err := dao.AdminRole.Ctx(ctx).Where("pid", models.Id).Exist()
if err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}
if exist {
return gerror.New("请先删除该角色下得所有子级!")
}
exist, err = dao.AdminMember.Ctx(ctx).Where("role_id", models.Id).Exist()
if err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}
if exist {
return gerror.New("请先删除该角色下得所有用户账号!")
}
if _, err = dao.AdminRole.Ctx(ctx).Where("id", in.Id).Delete(); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
}
return
}
func (s *sAdminRole) DataScopeSelect() (res form.Selects) {
for k, v := range consts.RoleDataNameMap {
res = append(res, &form.Select{
Value: k,
Name: v,
Label: v,
})
}
sort.Sort(res)
return res
}
func (s *sAdminRole) DataScopeEdit(ctx context.Context, in *adminin.DataScopeEditInp) (err error) {
var models *entity.AdminRole
if err = dao.AdminRole.Ctx(ctx).Where("id", in.Id).Scan(&models); err != nil {
return
}
if models == nil {
return gerror.New("角色不存在")
}
if models.Key == consts.SuperRoleKey {
return gerror.New("超管角色拥有全部权限,无需修改!")
}
if in.DataScope == consts.RoleDataDeptCustom && len(convert.UniqueSlice(in.CustomDept)) == 0 {
return gerror.New("自定义权限必须配置自定义部门!")
}
models.DataScope = in.DataScope
models.CustomDept = gjson.New(convert.UniqueSlice(in.CustomDept))
_, err = dao.AdminRole.Ctx(ctx).
Fields(dao.AdminRole.Columns().DataScope, dao.AdminRole.Columns().CustomDept).
Where("id", in.Id).
Data(models).
Update()
return
}
// treeList 角色树列表
func (s *sAdminRole) treeList(pid int64, nodes []*entity.AdminRole) (list []*adminin.RoleTree) {
list = make([]*adminin.RoleTree, 0)
for _, v := range nodes {
if v.Pid == pid {
item := new(adminin.RoleTree)
item.AdminRole = *v
item.Label = v.Name
item.Value = v.Id
child := s.treeList(v.Id, nodes)
if len(child) > 0 {
item.Children = child
}
list = append(list, item)
}
}
return
}
// VerifyRoleId 验证角色ID
func (s *sAdminRole) VerifyRoleId(ctx context.Context, id int64) (err error) {
mb := contexts.GetUser(ctx)
if mb == nil {
err = gerror.New("用户信息获取失败!")
return
}
ids, err := s.GetSubRoleIds(ctx, mb.RoleId, service.AdminMember().VerifySuperId(ctx, mb.Id))
if err != nil {
err = gerror.New("验证角色信息失败!")
return
}
if !validate.InSlice(ids, id) {
err = gerror.New("角色ID是无效的")
return
}
return
}
// GetSubRoleIds 获取所有下级角色ID
func (s *sAdminRole) GetSubRoleIds(ctx context.Context, roleId int64, isSuper bool) (ids []int64, err error) {
mod := dao.AdminRole.Ctx(ctx).Fields(dao.AdminRole.Columns().Id)
if !isSuper {
mod = mod.WhereNot(dao.AdminRole.Columns().Id, roleId).WhereLike(dao.AdminRole.Columns().Tree, "%"+tree.GetIdLabel(roleId)+"%")
}
columns, err := mod.Array()
if err != nil {
return nil, err
}
ids = g.NewVar(columns).Int64s()
return
}
+338
View File
@@ -0,0 +1,338 @@
// Package admin
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
package admin
import (
"context"
"hotgo/internal/consts"
"hotgo/internal/dao"
"hotgo/internal/library/contexts"
"hotgo/internal/library/token"
"hotgo/internal/model"
"hotgo/internal/model/entity"
"hotgo/internal/model/input/adminin"
"hotgo/internal/model/input/sysin"
"hotgo/internal/service"
"hotgo/utility/simple"
"github.com/gogf/gf/v2/crypto/gmd5"
"github.com/gogf/gf/v2/database/gdb"
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gtime"
"github.com/gogf/gf/v2/util/grand"
)
type sAdminSite struct{}
func NewAdminSite() *sAdminSite {
return &sAdminSite{}
}
func init() {
service.RegisterAdminSite(NewAdminSite())
}
// Register 账号注册
func (s *sAdminSite) Register(ctx context.Context, in *adminin.RegisterInp) (err error) {
config, err := service.SysConfig().GetLogin(ctx)
if err != nil {
return
}
if config.ForceInvite == 1 && in.InviteCode == "" {
err = gerror.New("请填写邀请码")
return
}
var data adminin.MemberAddInp
// 默认上级
data.Pid = 1
// 存在邀请人
if in.InviteCode != "" {
pmb, err := service.AdminMember().GetIdByCode(ctx, &adminin.GetIdByCodeInp{Code: in.InviteCode})
if err != nil {
return err
}
if pmb == nil {
err = gerror.New("邀请人信息不存在")
return err
}
data.Pid = pmb.Id
}
if config.RegisterSwitch != 1 {
err = gerror.New("管理员未开放注册")
return
}
if config.RoleId < 1 {
err = gerror.New("管理员未配置默认角色")
return
}
if config.DeptId < 1 {
err = gerror.New("管理员未配置默认部门")
return
}
// 验证唯一性
err = service.AdminMember().VerifyUnique(ctx, &adminin.VerifyUniqueInp{
Where: g.Map{
dao.AdminMember.Columns().Username: in.Username,
dao.AdminMember.Columns().Mobile: in.Mobile,
},
})
if err != nil {
return
}
// 验证短信验证码
err = service.SysSmsLog().VerifyCode(ctx, &sysin.VerifyCodeInp{
Event: consts.SmsTemplateRegister,
Mobile: in.Mobile,
Code: in.Code,
})
if err != nil {
return
}
data.MemberEditInp = &adminin.MemberEditInp{
Id: 0,
RoleId: config.RoleId,
PostIds: config.PostIds,
DeptId: config.DeptId,
Username: in.Username,
Password: in.Password,
RealName: "",
Avatar: config.Avatar,
Sex: 3, // 保密
Mobile: in.Mobile,
Status: consts.StatusEnabled,
}
data.Salt = grand.S(6)
data.InviteCode = grand.S(12)
data.PasswordHash = gmd5.MustEncryptString(data.Password + data.Salt)
data.Level, data.Tree, err = service.AdminMember().GenTree(ctx, data.Pid)
if err != nil {
return
}
// 提交注册信息
return g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) {
id, err := dao.AdminMember.Ctx(ctx).Data(data).OmitEmptyData().InsertAndGetId()
if err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}
// 更新岗位
if err = service.AdminMemberPost().UpdatePostIds(ctx, id, config.PostIds); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
}
return
})
}
// AccountLogin 账号登录
func (s *sAdminSite) AccountLogin(ctx context.Context, in *adminin.AccountLoginInp) (res *adminin.LoginModel, err error) {
defer func() {
service.SysLoginLog().Push(ctx, &sysin.LoginLogPushInp{Response: res, Err: err})
}()
var mb *entity.AdminMember
if err = dao.AdminMember.Ctx(ctx).Where("username", in.Username).Scan(&mb); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}
if mb == nil {
err = gerror.New("用户名或密码错误")
return
}
res = new(adminin.LoginModel)
res.Id = mb.Id
res.Username = mb.Username
if mb.Salt == "" {
err = gerror.New("用户信息错误")
return
}
if err = simple.CheckPassword(in.Password, mb.Salt, mb.PasswordHash); err != nil {
return
}
if mb.Status != consts.StatusEnabled {
err = gerror.New("账号已被禁用")
return
}
res, err = s.handleLogin(ctx, mb)
return
}
// MobileLogin 手机号登录
func (s *sAdminSite) MobileLogin(ctx context.Context, in *adminin.MobileLoginInp) (res *adminin.LoginModel, err error) {
defer func() {
service.SysLoginLog().Push(ctx, &sysin.LoginLogPushInp{Response: res, Err: err})
}()
var mb *entity.AdminMember
if err = dao.AdminMember.Ctx(ctx).Where("mobile ", in.Mobile).Scan(&mb); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}
if mb == nil {
err = gerror.New("账号不存在")
return
}
res = new(adminin.LoginModel)
res.Id = mb.Id
res.Username = mb.Username
err = service.SysSmsLog().VerifyCode(ctx, &sysin.VerifyCodeInp{
Event: consts.SmsTemplateLogin,
Mobile: in.Mobile,
Code: in.Code,
})
if err != nil {
return
}
if mb.Status != consts.StatusEnabled {
err = gerror.New("账号已被禁用")
return
}
res, err = s.handleLogin(ctx, mb)
return
}
// handleLogin .
func (s *sAdminSite) handleLogin(ctx context.Context, mb *entity.AdminMember) (res *adminin.LoginModel, err error) {
role, dept, err := s.getLoginRoleAndDept(ctx, mb.RoleId, mb.DeptId)
if err != nil {
return nil, err
}
user := &model.Identity{
Id: mb.Id,
Pid: mb.Pid,
DeptId: dept.Id,
DeptType: dept.Type,
RoleId: role.Id,
RoleKey: role.Key,
Username: mb.Username,
RealName: mb.RealName,
Avatar: mb.Avatar,
Email: mb.Email,
Mobile: mb.Mobile,
App: consts.AppAdmin,
LoginAt: gtime.Now(),
}
lt, expires, err := token.Login(ctx, user)
if err != nil {
return nil, err
}
res = &adminin.LoginModel{
Username: user.Username,
Id: user.Id,
Token: lt,
Expires: expires,
}
return
}
// getLoginRoleAndDept 获取登录的角色和部门信息
func (s *sAdminSite) getLoginRoleAndDept(ctx context.Context, roleId, deptId int64) (role *entity.AdminRole, dept *entity.AdminDept, err error) {
if err = dao.AdminRole.Ctx(ctx).Fields(dao.AdminRole.Columns().Id, dao.AdminRole.Columns().Key, dao.AdminRole.Columns().Status).WherePri(roleId).Scan(&role); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return
}
if role == nil {
err = gerror.New("角色不存在或已被删除")
return
}
if role.Status != consts.StatusEnabled {
err = gerror.New("角色已被禁用,如有疑问请联系管理员")
return
}
if err = dao.AdminDept.Ctx(ctx).Fields(dao.AdminDept.Columns().Id, dao.AdminDept.Columns().Type, dao.AdminDept.Columns().Status).WherePri(deptId).Scan(&dept); err != nil {
err = gerror.Wrap(err, "获取部门信息失败,请稍后重试!")
return
}
if dept == nil {
err = gerror.New("部门不存在或已被删除")
return
}
if dept.Status != consts.StatusEnabled {
err = gerror.New("部门已被禁用,如有疑问请联系管理员")
return
}
return
}
// BindUserContext 绑定用户上下文
func (s *sAdminSite) BindUserContext(ctx context.Context, claims *model.Identity) (err error) {
//// 如果不想每次访问都重新加载用户信息,可以放开注释。但在本次登录未失效前,用户信息不会刷新
// contexts.SetUser(ctx, claims)
// return
var mb *entity.AdminMember
if err = dao.AdminMember.Ctx(ctx).WherePri(claims.Id).Scan(&mb); err != nil {
err = gerror.Wrap(err, "获取用户信息失败,请稍后重试!")
return
}
if mb == nil {
err = gerror.Wrap(err, "账号不存在或已被删除!")
return
}
if mb.Status != consts.StatusEnabled {
err = gerror.New("账号已被禁用,如有疑问请联系管理员")
return
}
role, dept, err := s.getLoginRoleAndDept(ctx, mb.RoleId, mb.DeptId)
if err != nil {
return err
}
user := &model.Identity{
Id: mb.Id,
Pid: mb.Pid,
DeptId: dept.Id,
DeptType: dept.Type,
RoleId: mb.RoleId,
RoleKey: role.Key,
Username: mb.Username,
RealName: mb.RealName,
Avatar: mb.Avatar,
Email: mb.Email,
Mobile: mb.Mobile,
App: claims.App,
LoginAt: claims.LoginAt,
}
contexts.SetUser(ctx, user)
return
}