系统优化,加入数据缓存

This commit is contained in:
yxh
2020-02-23 22:38:39 +08:00
parent 09f311dc5f
commit f0a8bc938c
5 changed files with 145 additions and 65 deletions
+40 -11
View File
@@ -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, "获取用户角色数据失败")
+20 -12
View File
@@ -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{
+57 -32
View File
@@ -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
}
+15 -10
View File
@@ -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)
+13
View File
@@ -0,0 +1,13 @@
package cache_service
//缓存前缀KEY
const (
AdminMenu = iota
AdminRole
)
//缓存TAG标签
const (
AdminAuthTag = iota
AdminCmsTag
)