This commit is contained in:
孟帅
2023-11-25 18:36:11 +08:00
parent 40117c700d
commit 70e9f966c3
142 changed files with 5407 additions and 2058 deletions

View File

@@ -15,7 +15,6 @@ import (
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/os/gtime"
"github.com/gogf/gf/v2/text/gstr"
"github.com/gogf/gf/v2/util/gconv"
"github.com/gogf/gf/v2/util/grand"
"hotgo/internal/consts"
"hotgo/internal/dao"
@@ -403,28 +402,39 @@ func (s *sAdminMember) VerifyUnique(ctx context.Context, in *adminin.VerifyUniqu
// Delete 删除用户
func (s *sAdminMember) Delete(ctx context.Context, in *adminin.MemberDeleteInp) (err error) {
if s.VerifySuperId(ctx, gconv.Int64(in.Id)) {
err = gerror.New("超管账号禁止删除!")
return
}
memberId := contexts.GetUserId(ctx)
if memberId <= 0 {
err = gerror.New("获取用户信息失败!")
return
}
var models *entity.AdminMember
if err = s.FilterAuthModel(ctx, memberId).WherePri(in.Id).Scan(&models); err != nil {
var list []*entity.AdminMember
if err = s.FilterAuthModel(ctx, memberId).WherePri(in.Id).Scan(&list); err != nil {
err = gerror.Wrap(err, "获取用户信息失败,请稍后重试!")
return
}
if models == nil {
if len(list) == 0 {
err = gerror.New("需要删除的用户不存在或已删除!")
return
}
for _, v := range list {
if s.VerifySuperId(ctx, v.Id) {
err = gerror.New("超管账号禁止删除!")
return
}
count, err := dao.AdminMember.Ctx(ctx).Where("pid", v.Id).Count()
if err != nil {
err = gerror.Wrap(err, "删除用户检查失败,请稍后重试!")
return err
}
if count > 0 {
err = gerror.Newf("用户[%v]存在下级请先删除TA的下级用户", v.Id)
return err
}
}
return g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) {
if _, err = s.FilterAuthModel(ctx, memberId).WherePri(in.Id).Delete(); err != nil {
err = gerror.Wrap(err, "删除用户失败,请稍后重试!")
@@ -434,6 +444,9 @@ func (s *sAdminMember) Delete(ctx context.Context, in *adminin.MemberDeleteInp)
if _, err = dao.AdminMemberPost.Ctx(ctx).Where("member_id", in.Id).Delete(); err != nil {
err = gerror.Wrap(err, "删除用户岗位失败,请稍后重试!")
}
// 这里如果需要,可以加入更多删除用户的相关处理
// ...
return
})
}
@@ -603,6 +616,14 @@ func (s *sAdminMember) List(ctx context.Context, in *adminin.MemberListInp) (lis
mod = mod.Where(cols.RoleId, in.RoleId)
}
if in.Id > 0 {
mod = mod.Where(cols.Id, in.Id)
}
if in.Pid > 0 {
mod = mod.Where(cols.Pid, in.Pid)
}
if len(in.CreatedAt) == 2 {
mod = mod.WhereBetween(cols.CreatedAt, gtime.New(in.CreatedAt[0]), gtime.New(in.CreatedAt[1]))
}

View File

@@ -7,22 +7,23 @@ package admin
import (
"context"
"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/text/gstr"
"github.com/gogf/gf/v2/util/gconv"
"github.com/gogf/gf/v2/util/gmode"
"hotgo/api/admin/role"
"hotgo/internal/consts"
"hotgo/internal/dao"
"hotgo/internal/library/casbin"
"hotgo/internal/library/contexts"
"hotgo/internal/library/hgorm"
"hotgo/internal/model/do"
"hotgo/internal/model/entity"
"hotgo/internal/model/input/adminin"
"hotgo/internal/service"
"hotgo/utility/convert"
"hotgo/utility/validate"
)
type sAdminMenu struct{}
@@ -91,44 +92,25 @@ func (s *sAdminMenu) Edit(ctx context.Context, in *adminin.MenuEditInp) (err err
return
}
var pd *do.AdminMenu
// 维护菜单等级
if in.Pid == 0 {
in.Level = 1
} else {
if err = dao.AdminMenu.Ctx(ctx).Where("id", in.Pid).Scan(&pd); err != nil {
err = gerror.Wrap(err, consts.ErrorORM)
return g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) error {
in.Pid, in.Level, in.Tree, err = hgorm.AutoUpdateTree(ctx, &dao.AdminMenu, in.Id, in.Pid)
if err != nil {
return err
}
if pd == nil {
return gerror.New("上级菜单信息错误")
}
in.Level = gconv.Int(pd.Level) + 1
}
// 修改
in.UpdatedAt = gtime.Now()
if in.Id > 0 {
if in.Pid == in.Id {
return gerror.New("上级菜单不能是当前菜单")
}
if _, err = dao.AdminMenu.Ctx(ctx).Where("id", in.Id).Data(in).Update(); err != nil {
err = gerror.Wrap(err, "修改菜单失败!")
return err
if in.Id > 0 {
if _, err = dao.AdminMenu.Ctx(ctx).Where("id", in.Id).Data(in).Update(); err != nil {
err = gerror.Wrap(err, "修改菜单失败!")
return err
}
} else {
if _, err = dao.AdminMenu.Ctx(ctx).Data(in).Insert(); err != nil {
err = gerror.Wrap(err, "新增菜单失败!")
return err
}
}
return casbin.Refresh(ctx)
}
// 新增
in.CreatedAt = gtime.Now()
if _, err = dao.AdminMenu.Ctx(ctx).Data(in).Insert(); err != nil {
err = gerror.Wrap(err, "新增菜单失败!")
return err
}
return casbin.Refresh(ctx)
})
}
// List 获取菜单列表
@@ -215,6 +197,18 @@ func (s *sAdminMenu) GetMenuList(ctx context.Context, memberId int64) (res *role
return
}
// 生产环境下隐藏一些菜单
if gmode.IsProduct() {
newMenus := make([]*adminin.MenuRouteSummary, 0)
devMenus := []string{"Develops", "doc"} // 如果你还有其他需要在生产环境隐藏的菜单,将菜单别名加入即可
for _, menu := range allMenus {
if !validate.InSlice(devMenus, menu.Name) {
newMenus = append(newMenus, menu)
}
}
allMenus = newMenus
}
for _, v := range allMenus {
treeMap[gconv.String(v.Pid)] = append(treeMap[gconv.String(v.Pid)], v)
}