From 86187e4c79bda201ae9cba0259f8602495af1169 Mon Sep 17 00:00:00 2001 From: zhangwenjian Date: Sun, 7 Aug 2022 21:49:24 +0800 Subject: [PATCH] =?UTF-8?q?fix=F0=9F=90=9B:=20=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E8=8F=9C=E5=8D=95=E6=8E=A5=E5=8F=A3menurole?= =?UTF-8?q?=EF=BC=8C=E6=95=B0=E6=8D=AE=E4=B8=8D=E5=AE=8C=E6=95=B4=20(#676)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/service/sys_menu.go | 67 +++++++++++++++-------------------- 1 file changed, 29 insertions(+), 38 deletions(-) diff --git a/app/admin/service/sys_menu.go b/app/admin/service/sys_menu.go index 26162f8a..1bdb3746 100644 --- a/app/admin/service/sys_menu.go +++ b/app/admin/service/sys_menu.go @@ -1,8 +1,8 @@ package service import ( - "errors" "github.com/go-admin-team/go-admin-core/sdk/pkg" + "github.com/pkg/errors" "gorm.io/gorm" "strings" @@ -334,55 +334,46 @@ func (e *SysMenu) SetMenuRole(roleName string) (m []models.SysMenu, err error) { } func (e *SysMenu) getByRoleName(roleName string) ([]models.SysMenu, error) { - var MenuList []models.SysMenu var role models.SysRole var err error if roleName == "admin" { var data []models.SysMenu - err = e.Orm.Where(" menu_type in ('M','C')").Order("sort").Find(&data).Error - MenuList = data + err = e.Orm.Where(" menu_type in ('M','C') and deleted_at is null and created_at>'2021-08-13'"). + Order("sort"). + Find(&data). + Error + err = errors.WithStack(err) + return data, err } else { role.RoleKey = roleName - buttons := make([]models.SysMenu, 0) - err = e.Orm.Debug().Model(&role).Where("role_key = ? ", roleName).Preload("SysMenu", func(db *gorm.DB) *gorm.DB { - return db.Where(" menu_type in ('F')").Order("sort") - }).Find(&role).Error - if role.SysMenu != nil { - buttons = *role.SysMenu - } - mIds := make([]int, 0) - for _, menu := range buttons { - if menu.ParentId != 0 { - mIds = append(mIds, menu.ParentId) - } - } - var dataC []models.SysMenu - err = e.Orm.Where(" menu_type in ('C') and menu_id in ?", mIds).Order("sort").Find(&dataC).Error - if err != nil { - return nil, err - } - for _, datum := range dataC { - MenuList = append(MenuList, datum) - } - cIds := make([]int, 0) + err = e.Orm. + Model(&role). + Where("role_key = ? ", roleName). + Preload("SysMenu", func(db *gorm.DB) *gorm.DB { + return db.Where(" menu_type in ('F','C')").Order("sort") + }). + Find(&role).Error + MenuList := *role.SysMenu + mIds := make([]string, 0) + mp := make(map[string]string, 0) for _, menu := range MenuList { - if menu.ParentId != 0 { - cIds = append(cIds, menu.ParentId) + ids := strings.Split(menu.Paths, "/") + for _, id := range ids { + if mp[id] == "" { + mp[id] = id + mIds = append(mIds, id) + } } } - var dataM []models.SysMenu - err = e.Orm.Where(" menu_type in ('M') and menu_id in ?", cIds).Order("sort").Find(&dataM).Error + var data []models.SysMenu + err = e.Orm.Where(" menu_id in ? and menu_type in ('M','C')", mIds). + Order("sort"). + Find(&data). + Error if err != nil { return nil, err } - for _, datum := range dataM { - MenuList = append(MenuList, datum) - } + return data, err } - - if err != nil { - e.Log.Errorf("db error:%s", err) - } - return MenuList, err }