mirror of
https://github.com/bufanyun/hotgo.git
synced 2025-09-26 05:06:40 +08:00
Update member.go
更新多角色
This commit is contained in:
parent
4594cc3b7e
commit
86929ce16a
@ -478,9 +478,11 @@ func (s *sAdminMember) Edit(ctx context.Context, in *adminin.MemberEditInp) (err
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 验证角色ID
|
// 验证角色ID
|
||||||
if err = service.AdminRole().VerifyRoleId(ctx, in.RoleId); err != nil {
|
for _, roleId := range in.RoleIds {
|
||||||
return
|
if err = service.AdminRole().VerifyRoleId(ctx, roleId); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 验证部门ID
|
// 验证部门ID
|
||||||
@ -539,7 +541,19 @@ func (s *sAdminMember) Edit(ctx context.Context, in *adminin.MemberEditInp) (err
|
|||||||
err = gerror.Wrap(err, "更新用户岗位失败,请稍后重试!")
|
err = gerror.Wrap(err, "更新用户岗位失败,请稍后重试!")
|
||||||
}
|
}
|
||||||
|
|
||||||
needLoadSuperAdmin = in.RoleId == s.superAdmin.RoleId
|
// 更新角色
|
||||||
|
if err = service.AdminMemberRole().UpdateRoleIds(ctx, in.Id, in.RoleIds); err != nil {
|
||||||
|
err = gerror.Wrap(err, "更新用户角色失败,请稍后重试!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, roleId := range in.RoleIds {
|
||||||
|
if roleId == s.superAdmin.RoleId {
|
||||||
|
needLoadSuperAdmin = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -575,7 +589,20 @@ func (s *sAdminMember) Edit(ctx context.Context, in *adminin.MemberEditInp) (err
|
|||||||
err = gerror.Wrap(err, "新增用户岗位失败,请稍后重试!")
|
err = gerror.Wrap(err, "新增用户岗位失败,请稍后重试!")
|
||||||
}
|
}
|
||||||
|
|
||||||
needLoadSuperAdmin = in.RoleId == s.superAdmin.RoleId
|
// 更新角色
|
||||||
|
if err = service.AdminMemberRole().UpdateRoleIds(ctx, id, in.RoleIds); err != nil {
|
||||||
|
err = gerror.Wrap(err, "更新用户角色失败,请稍后重试!")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// needLoadSuperAdmin = in.RoleId == s.superAdmin.RoleId
|
||||||
|
for _, roleId := range in.RoleIds {
|
||||||
|
if roleId == s.superAdmin.RoleId {
|
||||||
|
needLoadSuperAdmin = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return
|
return
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -614,7 +641,9 @@ func (s *sAdminMember) List(ctx context.Context, in *adminin.MemberListInp) (lis
|
|||||||
}
|
}
|
||||||
|
|
||||||
if in.RoleId > 0 {
|
if in.RoleId > 0 {
|
||||||
mod = mod.Where(cols.RoleId, in.RoleId)
|
if userIds, err := service.AdminMemberRole().GetMemberIds(ctx, in.RoleId); err == nil {
|
||||||
|
mod = mod.WhereIn(cols.Id, userIds)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if in.Id > 0 {
|
if in.Id > 0 {
|
||||||
@ -651,6 +680,20 @@ func (s *sAdminMember) List(ctx context.Context, in *adminin.MemberListInp) (lis
|
|||||||
return nil, 0, err
|
return nil, 0, err
|
||||||
}
|
}
|
||||||
v.PostIds = g.NewVar(columns).Int64s()
|
v.PostIds = g.NewVar(columns).Int64s()
|
||||||
|
|
||||||
|
roleIds, err := service.AdminMemberRole().GetRoleIds(ctx, v.Id)
|
||||||
|
if err != nil {
|
||||||
|
err = gerror.Wrap(err, "获取用户角色数据失败!")
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
v.RoleIds = roleIds
|
||||||
|
|
||||||
|
roleNames, err := service.AdminRole().GetNames(ctx, roleIds)
|
||||||
|
if err != nil {
|
||||||
|
err = gerror.Wrap(err, "获取用户角色数据失败!")
|
||||||
|
return nil, 0, err
|
||||||
|
}
|
||||||
|
v.RoleNames = roleNames
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -703,6 +746,19 @@ func (s *sAdminMember) LoginMemberInfo(ctx context.Context) (res *adminin.LoginM
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
roleIds, err := service.AdminMemberRole().GetRoleIds(ctx, memberId)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
rolesNames, err := service.AdminRole().GetNames(ctx, roleIds)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
res.RoleIds = roleIds
|
||||||
|
res.RoleNames = rolesNames
|
||||||
|
|
||||||
// 细粒度权限
|
// 细粒度权限
|
||||||
permissions, err := service.AdminMenu().LoginPermissions(ctx, memberId)
|
permissions, err := service.AdminMenu().LoginPermissions(ctx, memberId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -817,7 +873,7 @@ func (s *sAdminMember) LoadSuperAdmin(ctx context.Context) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
array, err := dao.AdminMember.Ctx(ctx).Fields(dao.AdminMember.Columns().Id).Where(dao.AdminMember.Columns().RoleId, value).Array()
|
array, err := dao.AdminMemberRole.Ctx(ctx).Fields(dao.AdminMemberRole.Columns().MemberId).WhereIn(dao.AdminMemberRole.Columns().RoleId, value).Array()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
g.Log().Errorf(ctx, "LoadSuperAdmin AdminMember err:%+v", err)
|
g.Log().Errorf(ctx, "LoadSuperAdmin AdminMember err:%+v", err)
|
||||||
return
|
return
|
||||||
@ -846,23 +902,29 @@ func (s *sAdminMember) FilterAuthModel(ctx context.Context, memberId int64) *gdb
|
|||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
var roleId int64
|
var roleIds []int64
|
||||||
if contexts.GetUserId(ctx) == memberId {
|
if contexts.GetUserId(ctx) == memberId {
|
||||||
// 当前登录用户直接从上下文中取角色ID
|
// 当前登录用户直接从上下文中取角色ID
|
||||||
roleId = contexts.GetRoleId(ctx)
|
roleIds = contexts.GetRoleIds(ctx)
|
||||||
} else {
|
} else {
|
||||||
ro, err := dao.AdminMember.Ctx(ctx).Fields("role_id").Where("id", memberId).Value()
|
ro, err := service.AdminMemberRole().GetRoleIds(ctx, memberId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
g.Log().Panicf(ctx, "failed to get role information, err:%+v", err)
|
g.Log().Panicf(ctx, "failed to get role information, err:%+v", err)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
roleId = ro.Int64()
|
roleIds = ro
|
||||||
}
|
}
|
||||||
|
|
||||||
roleIds, err := service.AdminRole().GetSubRoleIds(ctx, roleId, false)
|
// 查询自己的下级角色的所有用户
|
||||||
if err != nil {
|
memberIds := make([]int64, 0)
|
||||||
g.Log().Panicf(ctx, "get the subordinate role permission exception, err:%+v", err)
|
for _, roleId := range roleIds {
|
||||||
return nil
|
id, err := service.AdminMemberRole().GetMemberIds(ctx, roleId)
|
||||||
|
if err != nil {
|
||||||
|
g.Log().Panicf(ctx, "get the subordinate role permission exception, err:%+v", err)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
memberIds = append(memberIds, id...)
|
||||||
}
|
}
|
||||||
return m.Where("id <> ?", memberId).WhereIn("role_id", roleIds).Handler(handler.FilterAuthWithField("id"))
|
|
||||||
|
return dao.AdminMember.Ctx(ctx).Where("id <> ?", memberId).WherePri(memberIds).Handler(handler.FilterAuthWithField("id"))
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user