mirror of
https://github.com/tiger1103/gfast.git
synced 2026-09-21 10:12:59 +00:00
系统优化,加入数据缓存
This commit is contained in:
@@ -7,6 +7,7 @@ import (
|
||||
"gfast/app/model/admin/user"
|
||||
"gfast/app/service/admin/auth_service"
|
||||
"gfast/app/service/admin/user_service"
|
||||
"gfast/app/service/cache_service"
|
||||
"gfast/app/service/casbin_adapter_service"
|
||||
"gfast/library/response"
|
||||
"gfast/library/utils"
|
||||
@@ -23,11 +24,12 @@ type Auth struct{}
|
||||
//菜单列表
|
||||
func (c *Auth) MenuList(r *ghttp.Request) {
|
||||
//获取菜单信息
|
||||
err, list := auth_service.GetMenuList("")
|
||||
listEntities, err := auth_service.GetMenuList()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "获取数据失败")
|
||||
}
|
||||
list := gconv.SliceMap(listEntities)
|
||||
list = utils.PushSonToParent(list)
|
||||
response.SusJson(true, r, "成功", g.Map{
|
||||
"list": list,
|
||||
@@ -64,13 +66,16 @@ func (c *Auth) AddMenu(r *ghttp.Request) {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "添加菜单失败")
|
||||
}
|
||||
//清除TAG缓存
|
||||
cache_service.New().RemoveByTag(cache_service.AdminAuthTag)
|
||||
response.SusJson(true, r, "添加菜单成功")
|
||||
}
|
||||
//获取父级菜单信息
|
||||
err, list := auth_service.GetMenuList("ismenu=?", 1)
|
||||
listEntities, err := auth_service.GetIsMenuList()
|
||||
if err != nil {
|
||||
response.FailJson(true, r, "获取数据失败")
|
||||
}
|
||||
list := gconv.SliceMap(listEntities)
|
||||
list = utils.ParentSonSort(list)
|
||||
response.SusJson(true, r, "成功", g.Map{"parentList": list})
|
||||
}
|
||||
@@ -93,6 +98,8 @@ func (c *Auth) EditMenu(r *ghttp.Request) {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "修改菜单失败")
|
||||
}
|
||||
//清除TAG缓存
|
||||
cache_service.New().RemoveByTag(cache_service.AdminAuthTag)
|
||||
response.SusJson(true, r, "修改菜单成功")
|
||||
}
|
||||
menuEntity, err := auth_rule.Model.Where("id=?", id).One()
|
||||
@@ -101,10 +108,11 @@ func (c *Auth) EditMenu(r *ghttp.Request) {
|
||||
response.FailJson(true, r, "获取数据失败")
|
||||
}
|
||||
//获取父级菜单信息
|
||||
err, list := auth_service.GetMenuList("ismenu=?", 1)
|
||||
listEntities, err := auth_service.GetIsMenuList()
|
||||
if err != nil {
|
||||
response.FailJson(true, r, "获取数据失败")
|
||||
}
|
||||
list := gconv.SliceMap(listEntities)
|
||||
list = utils.ParentSonSort(list)
|
||||
response.SusJson(true, r, "成功", g.Map{
|
||||
"parentList": list,
|
||||
@@ -123,17 +131,20 @@ func (c *Auth) DeleteMenu(r *ghttp.Request) {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "删除失败")
|
||||
}
|
||||
//清除TAG缓存
|
||||
cache_service.New().RemoveByTag(cache_service.AdminAuthTag)
|
||||
response.SusJson(true, r, "删除成功")
|
||||
}
|
||||
|
||||
//角色列表
|
||||
func (c *Auth) RoleList(r *ghttp.Request) {
|
||||
//获取角色列表
|
||||
err, list := auth_service.GetRoleList("")
|
||||
listEntities, err := auth_service.GetRoleList()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "获取数据失败")
|
||||
}
|
||||
list := gconv.SliceMap(listEntities)
|
||||
list = utils.PushSonToParent(list, 0, "parent_id", "id", "children", "", nil, false)
|
||||
response.SusJson(true, r, "成功", g.Map{
|
||||
"list": list,
|
||||
@@ -166,21 +177,25 @@ func (c *Auth) AddRole(r *ghttp.Request) {
|
||||
response.FailJson(true, r, "添加用户组失败")
|
||||
}
|
||||
tx.Commit()
|
||||
//清除TAG缓存
|
||||
cache_service.New().RemoveByTag(cache_service.AdminAuthTag)
|
||||
response.SusJson(true, r, "添加用户组成功")
|
||||
}
|
||||
//获取父级组
|
||||
err, pList := auth_service.GetRoleList("")
|
||||
pListEntities, err := auth_service.GetRoleList()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "获取父级数据失败")
|
||||
}
|
||||
pList := gconv.SliceMap(pListEntities)
|
||||
pList = utils.ParentSonSort(pList, 0, 0, "parent_id", "id", "flg", "name")
|
||||
//获取菜单信息
|
||||
err, mList := auth_service.GetMenuList("")
|
||||
mListEntities, err := auth_service.GetMenuList()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "获取菜单数据失败")
|
||||
}
|
||||
mList := gconv.SliceMap(mListEntities)
|
||||
mList = utils.PushSonToParent(mList)
|
||||
res := g.Map{
|
||||
"parentList": pList,
|
||||
@@ -214,6 +229,8 @@ func (c *Auth) EditRole(r *ghttp.Request) {
|
||||
response.FailJson(true, r, "添加用户组失败")
|
||||
}
|
||||
tx.Commit()
|
||||
//清除TAG缓存
|
||||
cache_service.New().RemoveByTag(cache_service.AdminAuthTag)
|
||||
response.SusJson(true, r, "修改用户组成功")
|
||||
}
|
||||
//获取角色信息
|
||||
@@ -222,14 +239,15 @@ func (c *Auth) EditRole(r *ghttp.Request) {
|
||||
response.FailJson(true, r, "获取角色数据失败")
|
||||
}
|
||||
//获取父级组
|
||||
err, pList := auth_service.GetRoleList("")
|
||||
pListEntities, err := auth_service.GetRoleList()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "获取父级数据失败")
|
||||
}
|
||||
pList := gconv.SliceMap(pListEntities)
|
||||
pList = utils.ParentSonSort(pList, 0, 0, "parent_id", "id", "flg", "name")
|
||||
//获取菜单信息
|
||||
err, mList := auth_service.GetMenuList("")
|
||||
mListEntities, err := auth_service.GetMenuList()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "获取菜单数据失败")
|
||||
@@ -245,6 +263,7 @@ func (c *Auth) EditRole(r *ghttp.Request) {
|
||||
for k, v := range gp {
|
||||
gpSlice[k] = gconv.Int(gstr.SubStr(v[1], 2))
|
||||
}
|
||||
mList := gconv.SliceMap(mListEntities)
|
||||
mList = utils.PushSonToParent(mList)
|
||||
res := g.Map{
|
||||
"parentList": pList,
|
||||
@@ -282,6 +301,8 @@ func (c *Auth) DeleteRole(r *ghttp.Request) {
|
||||
}
|
||||
}
|
||||
tx.Commit()
|
||||
//清除TAG缓存
|
||||
cache_service.New().RemoveByTag(cache_service.AdminAuthTag)
|
||||
response.SusJson(true, r, "删除成功")
|
||||
}
|
||||
|
||||
@@ -302,11 +323,12 @@ func (c *Auth) AddUser(r *ghttp.Request) {
|
||||
response.SusJson(true, r, "添加管理员成功")
|
||||
}
|
||||
//获取角色信息
|
||||
err, roleList := auth_service.GetRoleList("")
|
||||
roleListEntities, err := auth_service.GetRoleList()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "获取角色数据失败")
|
||||
}
|
||||
roleList := gconv.SliceMap(roleListEntities)
|
||||
roleList = utils.ParentSonSort(roleList, 0, 0, "parent_id", "id", "flg", "name")
|
||||
res := g.Map{
|
||||
"roleList": roleList,
|
||||
@@ -338,11 +360,12 @@ func (c *Auth) EditUser(r *ghttp.Request) {
|
||||
response.FailJson(true, r, "获取用户数据失败")
|
||||
}
|
||||
//获取角色信息
|
||||
err, roleList := auth_service.GetRoleList("")
|
||||
roleListEntities, err := auth_service.GetRoleList()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "获取角色数据失败")
|
||||
}
|
||||
roleList := gconv.SliceMap(roleListEntities)
|
||||
roleList = utils.ParentSonSort(roleList, 0, 0, "parent_id", "id", "flg", "name")
|
||||
//获取已选择的角色信息
|
||||
checkedRoleIds, err := user_service.GetAdminRoleIds(id)
|
||||
@@ -375,9 +398,15 @@ func (c *Auth) UserList(r *ghttp.Request) {
|
||||
response.FailJson(true, r, "获取用户列表数据失败")
|
||||
}
|
||||
users := make([]g.Map, len(userList))
|
||||
//获取所有角色信息
|
||||
allRoles, err := auth_service.GetRoleList()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "获取用户角色数据失败")
|
||||
}
|
||||
for k, u := range userList {
|
||||
users[k] = gconv.Map(u)
|
||||
roles, err := user_service.GetAdminRole(u.Id)
|
||||
roles, err := user_service.GetAdminRole(u.Id, allRoles)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
response.FailJson(true, r, "获取用户角色数据失败")
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package admin
|
||||
|
||||
import (
|
||||
"gfast/app/service/admin/auth_service"
|
||||
"gfast/app/service/admin/user_service"
|
||||
"gfast/library/response"
|
||||
"github.com/gogf/gf/frame/g"
|
||||
@@ -14,31 +15,38 @@ type Index struct{}
|
||||
//后台首页接口数据
|
||||
func (c *Index) Index(r *ghttp.Request) {
|
||||
//获取用户信息
|
||||
userInfo := user_service.GetCacheAdminInfo(r)
|
||||
userInfo := user_service.GetLoginAdminInfo(r)
|
||||
//菜单列表
|
||||
var menuList g.List
|
||||
if userInfo != nil {
|
||||
userId := gconv.Int(userInfo["id"])
|
||||
delete(userInfo, "user_password")
|
||||
//获取用户角色信息
|
||||
roles, err := user_service.GetAdminRole(userId)
|
||||
allRoles, err := auth_service.GetRoleList()
|
||||
if err == nil {
|
||||
name := make([]string, len(roles))
|
||||
roleIds := make([]int, len(roles))
|
||||
for k, v := range roles {
|
||||
name[k] = v.Name
|
||||
roleIds[k] = v.Id
|
||||
}
|
||||
userInfo["roles"] = strings.Join(name, ",")
|
||||
//获取菜单信息
|
||||
menuList, err = user_service.GetAdminMenusByRoleIds(roleIds)
|
||||
if err != nil {
|
||||
roles, err := user_service.GetAdminRole(userId, allRoles)
|
||||
if err == nil {
|
||||
name := make([]string, len(roles))
|
||||
roleIds := make([]int, len(roles))
|
||||
for k, v := range roles {
|
||||
name[k] = v.Name
|
||||
roleIds[k] = v.Id
|
||||
}
|
||||
userInfo["roles"] = strings.Join(name, ",")
|
||||
//获取菜单信息
|
||||
menuList, err = user_service.GetAdminMenusByRoleIds(roleIds)
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
}
|
||||
} else {
|
||||
g.Log().Error(err)
|
||||
userInfo["roles"] = ""
|
||||
}
|
||||
} else {
|
||||
g.Log().Error(err)
|
||||
userInfo["roles"] = ""
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
result := g.Map{
|
||||
|
||||
@@ -7,6 +7,7 @@ import (
|
||||
"gfast/app/model/admin/auth_rule"
|
||||
"gfast/app/model/admin/role"
|
||||
"gfast/app/model/admin/user"
|
||||
"gfast/app/service/cache_service"
|
||||
"gfast/app/service/casbin_adapter_service"
|
||||
"gfast/library/utils"
|
||||
"github.com/gogf/gf/database/gdb"
|
||||
@@ -17,25 +18,53 @@ import (
|
||||
"github.com/gogf/gf/util/gvalid"
|
||||
)
|
||||
|
||||
//获取菜单列表
|
||||
func GetMenuList(where string, params ...interface{}) (error, g.List) {
|
||||
var err error
|
||||
var list []*auth_rule.Entity
|
||||
if where != "" {
|
||||
list, err = auth_rule.Model.Where(where, params...).Order("weigh desc,id asc").FindAll()
|
||||
} else {
|
||||
list, err = auth_rule.Model.Order("weigh desc,id asc").FindAll()
|
||||
}
|
||||
//获取isMenu==1菜单列表
|
||||
func GetIsMenuList() ([]*auth_rule.Entity, error) {
|
||||
list, err := GetMenuList()
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
return err, nil
|
||||
return nil, err
|
||||
}
|
||||
var gList = make(g.List, len(list))
|
||||
for k, v := range list {
|
||||
tMap := gconv.Map(v)
|
||||
gList[k] = tMap
|
||||
var gList = make([]*auth_rule.Entity, 0, len(list))
|
||||
for _, v := range list {
|
||||
if v.Ismenu == 1 {
|
||||
gList = append(gList, v)
|
||||
}
|
||||
}
|
||||
return nil, gList
|
||||
return gList, nil
|
||||
}
|
||||
|
||||
//获取isMenu=1且status=1的菜单列表
|
||||
func GetIsMenuStatusList() ([]*auth_rule.Entity, error) {
|
||||
list, err := GetMenuList()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var gList = make([]*auth_rule.Entity, 0, len(list))
|
||||
for _, v := range list {
|
||||
if v.Ismenu == 1 && v.Status == 1 {
|
||||
gList = append(gList, v)
|
||||
}
|
||||
}
|
||||
return gList, nil
|
||||
}
|
||||
|
||||
//获取所有菜单
|
||||
func GetMenuList() (list []*auth_rule.Entity, err error) {
|
||||
cache := cache_service.New()
|
||||
//从缓存获取
|
||||
iList := cache.Get(cache_service.AdminMenu)
|
||||
if iList != nil {
|
||||
list = iList.([]*auth_rule.Entity)
|
||||
return
|
||||
}
|
||||
//从数据库获取
|
||||
list, err = auth_rule.Model.Order("weigh desc,id asc").FindAll()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
//缓存菜单
|
||||
cache.Set(cache_service.AdminMenu, list, 0, cache_service.AdminAuthTag)
|
||||
return
|
||||
}
|
||||
|
||||
//检查菜单规则是否存在
|
||||
@@ -75,23 +104,19 @@ func EditMenu(req *auth_rule.MenuReq, id int) (err error, rows int64) {
|
||||
return
|
||||
}
|
||||
|
||||
//获取用户组列表
|
||||
func GetRoleList(where string, params ...interface{}) (err error, list g.List) {
|
||||
var rl []*role.Entity
|
||||
if where != "" {
|
||||
rl, err = role.Model.Where(where, params).OrderBy("list_order asc,id asc").All()
|
||||
} else {
|
||||
rl, err = role.Model.OrderBy("list_order asc,id asc").All()
|
||||
}
|
||||
if err != nil {
|
||||
g.Log().Error(err)
|
||||
return err, nil
|
||||
}
|
||||
list = make(g.List, len(rl))
|
||||
for k, v := range rl {
|
||||
tMap := gconv.Map(v)
|
||||
list[k] = tMap
|
||||
//获取用户组(角色)列表
|
||||
func GetRoleList() (list []*role.Entity, err error) {
|
||||
cache := cache_service.New()
|
||||
//从缓存获取
|
||||
iList := cache.Get(cache_service.AdminRole)
|
||||
if iList != nil {
|
||||
list = iList.([]*role.Entity)
|
||||
return
|
||||
}
|
||||
//从数据库获取
|
||||
list, err = role.Model.OrderBy("list_order asc,id asc").All()
|
||||
//缓存数据
|
||||
cache.Set(cache_service.AdminRole, list, 0, cache_service.AdminAuthTag)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ import (
|
||||
|
||||
//获取登陆用户ID
|
||||
func GetLoginID(r *ghttp.Request) (userId int) {
|
||||
userInfo := GetCacheAdminInfo(r)
|
||||
userInfo := GetLoginAdminInfo(r)
|
||||
if userInfo != nil {
|
||||
userId = gconv.Int(userInfo["id"])
|
||||
}
|
||||
@@ -24,7 +24,7 @@ func GetLoginID(r *ghttp.Request) (userId int) {
|
||||
}
|
||||
|
||||
//获取缓存的用户信息
|
||||
func GetCacheAdminInfo(r *ghttp.Request) (userInfo g.Map) {
|
||||
func GetLoginAdminInfo(r *ghttp.Request) (userInfo g.Map) {
|
||||
resp := boot.AdminGfToken.GetTokenData(r)
|
||||
userInfo = gconv.Map(resp.Get("data"))
|
||||
return
|
||||
@@ -47,14 +47,18 @@ func GetAdminList(where g.Map, page int) (total int, userList []*user.Entity, er
|
||||
}
|
||||
|
||||
//获取管理员的角色信息
|
||||
func GetAdminRole(userId int) (roles []*role.Entity, err error) {
|
||||
func GetAdminRole(userId int, allRoleList []*role.Entity) (roles []*role.Entity, err error) {
|
||||
roleIds, err := GetAdminRoleIds(userId)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
if roleIds != nil {
|
||||
//获取角色信息
|
||||
roles, err = role.Model.Where("id in(?)", roleIds).All()
|
||||
roles = make([]*role.Entity, 0, len(allRoleList))
|
||||
for _, v := range allRoleList {
|
||||
for _, id := range roleIds {
|
||||
if id == v.Id {
|
||||
roles = append(roles, v)
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -110,15 +114,16 @@ func GetAdminMenusByRoleIds(roleIds []int) (menus g.List, err error) {
|
||||
}
|
||||
}
|
||||
//获取所有开启的菜单
|
||||
err, allMenus := auth_service.GetMenuList("status=? and ismenu=?", 1, 1)
|
||||
allMenus, err := auth_service.GetIsMenuStatusList()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
roleMenus := make(g.List, 0, 100)
|
||||
for _, v := range allMenus {
|
||||
if _, ok := menuIds[gconv.Int64(v["id"])]; ok {
|
||||
v["index"] = v["name"]
|
||||
roleMenus = append(roleMenus, v)
|
||||
if _, ok := menuIds[gconv.Int64(v.Id)]; ok {
|
||||
roleMenu := gconv.Map(v)
|
||||
roleMenu["index"] = v.Name
|
||||
roleMenus = append(roleMenus, roleMenu)
|
||||
}
|
||||
}
|
||||
menus = utils.PushSonToParent(roleMenus, 0, "pid", "id", "subs", "", nil, false)
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package cache_service
|
||||
|
||||
//缓存前缀KEY
|
||||
const (
|
||||
AdminMenu = iota
|
||||
AdminRole
|
||||
)
|
||||
|
||||
//缓存TAG标签
|
||||
const (
|
||||
AdminAuthTag = iota
|
||||
AdminCmsTag
|
||||
)
|
||||
Reference in New Issue
Block a user