ldap-1-backend/service/isql/menu_isql.go

132 lines
3.5 KiB
Go
Raw Normal View History

2022-05-18 17:57:03 +08:00
package isql
import (
"errors"
2022-05-29 10:06:21 +08:00
"github.com/eryajf/go-ldap-admin/model"
"github.com/eryajf/go-ldap-admin/public/common"
2022-05-18 17:57:03 +08:00
"github.com/thoas/go-funk"
"gorm.io/gorm"
)
type MenuService struct{}
// Exist 判断资源是否存在
func (s MenuService) Exist(filter map[string]interface{}) bool {
var dataObj model.Menu
err := common.DB.Debug().Order("created_at DESC").Where(filter).First(&dataObj).Error
return !errors.Is(err, gorm.ErrRecordNotFound)
}
// Count 获取资源总数
func (s MenuService) Count() (int64, error) {
var count int64
err := common.DB.Model(&model.Menu{}).Count(&count).Error
return count, err
}
// Add 创建资源
func (s MenuService) Add(menu *model.Menu) error {
return common.DB.Create(menu).Error
}
// Update 更新资源
func (s MenuService) Update(menu *model.Menu) error {
return common.DB.Model(&model.Menu{}).Where("id = ?", menu.ID).Updates(menu).Error
}
// Find 获取单个资源
func (s MenuService) Find(filter map[string]interface{}, data *model.Menu) error {
return common.DB.Where(filter).First(&data).Error
}
// List 获取数据列表
func (s MenuService) List() (menus []*model.Menu, err error) {
err = common.DB.Order("sort").Find(&menus).Error
return menus, err
}
// List 获取数据列表
func (s MenuService) ListUserMenus(roleIds []uint) (menus []*model.Menu, err error) {
err = common.DB.Where("id IN (select menu_id as id from role_menus where role_id IN (?))", roleIds).Order("sort").Find(&menus).Error
return menus, err
}
2022-05-18 17:57:03 +08:00
// 批量删除资源
func (s MenuService) Delete(menuIds []uint) error {
return common.DB.Where("id IN (?)", menuIds).Select("Roles").Unscoped().Delete(&model.Menu{}).Error
}
// GetUserMenusByUserId 根据用户ID获取用户的权限(可访问)菜单列表
func (s MenuService) GetUserMenusByUserId(userId uint) ([]*model.Menu, error) {
// 获取用户
var user model.User
err := common.DB.Where("id = ?", userId).Preload("Roles").First(&user).Error
if err != nil {
return nil, err
}
// 获取角色
roles := user.Roles
// 所有角色的菜单集合
allRoleMenus := make([]*model.Menu, 0)
for _, role := range roles {
var userRole model.Role
err := common.DB.Where("id = ?", role.ID).Preload("Menus").First(&userRole).Error
if err != nil {
return nil, err
}
// 获取角色的菜单
menus := userRole.Menus
allRoleMenus = append(allRoleMenus, menus...)
}
// 所有角色的菜单集合去重
allRoleMenusId := make([]int, 0)
for _, menu := range allRoleMenus {
allRoleMenusId = append(allRoleMenusId, int(menu.ID))
}
allRoleMenusIdUniq := funk.UniqInt(allRoleMenusId)
allRoleMenusUniq := make([]*model.Menu, 0)
for _, id := range allRoleMenusIdUniq {
for _, menu := range allRoleMenus {
if id == int(menu.ID) {
allRoleMenusUniq = append(allRoleMenusUniq, menu)
break
}
}
}
// 获取状态status为1的菜单
accessMenus := make([]*model.Menu, 0)
for _, menu := range allRoleMenusUniq {
if menu.Status == 1 {
accessMenus = append(accessMenus, menu)
}
}
return accessMenus, err
}
// GenMenuTree 生成菜单树
func GenMenuTree(parentId uint, menus []*model.Menu) []*model.Menu {
tree := make([]*model.Menu, 0)
for _, m := range menus {
if m.ParentId == parentId {
children := GenMenuTree(m.ID, menus)
m.Children = children
tree = append(tree, m)
}
}
return tree
}
// // GetMenuTree 获取菜单树
// func (s MenuService) GetMenuTree() ([]*model.Menu, error) {
// var menus []*model.Menu
// err := common.DB.Order("sort").Find(&menus).Error
// // parentId为0的是根菜单
// return GenMenuTree(0, menus), err
// }