Files
gfast/app/service/admin/user_service/user.go
T

125 lines
3.1 KiB
Go

package user_service
import (
"fmt"
"gfast/app/model/admin/role"
"gfast/app/model/admin/user"
"gfast/app/service/admin/auth_service"
"gfast/app/service/casbin_adapter_service"
"gfast/boot"
"gfast/library/service"
"gfast/library/utils"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/net/ghttp"
"github.com/gogf/gf/text/gstr"
"github.com/gogf/gf/util/gconv"
)
//获取登陆用户ID
func GetLoginID(r *ghttp.Request) (userId int) {
userInfo := GetLoginAdminInfo(r)
if userInfo != nil {
userId = userInfo.Id
}
return
}
//获取缓存的用户信息
func GetLoginAdminInfo(r *ghttp.Request) (userInfo *user.Entity) {
resp := boot.AdminGfToken.GetTokenData(r)
gconv.Struct(resp.Get("data"), &userInfo)
return
}
//获取管理员列表
func GetAdminList(where g.Map, page int) (total int, userList []*user.Entity, err error) {
return user.GetAdminList(where, page, service.AdminPageNum)
}
//获取管理员的角色信息
func GetAdminRole(userId int, allRoleList []*role.Entity) (roles []*role.Entity, err error) {
roleIds, err := GetAdminRoleIds(userId)
if err != nil {
return
}
roles = make([]*role.Entity, 0, len(allRoleList))
for _, v := range allRoleList {
for _, id := range roleIds {
if id == v.Id {
roles = append(roles, v)
}
}
}
return
}
//获取管理员对应的角色ids
func GetAdminRoleIds(userId int) (roleIds []int, err error) {
enforcer, e := casbin_adapter_service.GetEnforcer()
if e != nil {
err = e
return
}
//查询关联角色规则
groupPolicy := enforcer.GetFilteredGroupingPolicy(0, fmt.Sprintf("u_%d", userId))
if len(groupPolicy) > 0 {
roleIds = make([]int, len(groupPolicy))
//得到角色id的切片
for k, v := range groupPolicy {
roleIds[k] = gconv.Int(gstr.SubStr(v[1], 2))
}
}
return
}
//获取菜单
func GetAllMenus() (menus g.List, err error) {
//获取所有开启的菜单
allMenus, err := auth_service.GetIsMenuStatusList()
if err != nil {
return
}
menus = make(g.List, len(allMenus))
for k, v := range allMenus {
menu := gconv.Map(v)
menu["index"] = v.Name
menus[k] = menu
}
menus = utils.PushSonToParent(menus, 0, "pid", "id", "subs", "", nil, false)
return
}
//获取管理员所属角色菜单
func GetAdminMenusByRoleIds(roleIds []int) (menus g.List, err error) {
//获取角色对应的菜单id
enforcer, e := casbin_adapter_service.GetEnforcer()
if e != nil {
err = e
return
}
menuIds := map[int64]int64{}
for _, roleId := range roleIds {
//查询当前权限
gp := enforcer.GetFilteredPolicy(0, fmt.Sprintf("g_%d", roleId))
for _, p := range gp {
mid := gconv.Int64(gstr.SubStr(p[1], 2))
menuIds[mid] = mid
}
}
//获取所有开启的菜单
allMenus, err := auth_service.GetIsMenuStatusList()
if err != nil {
return
}
roleMenus := make(g.List, 0, len(allMenus))
for _, v := range allMenus {
if _, ok := menuIds[gconv.Int64(v.Id)]; gstr.Equal(v.Condition, "nocheck") || ok {
roleMenu := gconv.Map(v)
roleMenu["index"] = v.Name
roleMenus = append(roleMenus, roleMenu)
}
}
menus = utils.PushSonToParent(roleMenus, 0, "pid", "id", "subs", "", nil, false)
return
}