forked from bullteam/zeus-admin
/
menu.go
109 lines (101 loc) · 2.9 KB
/
menu.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package service
import (
"strings"
"time"
"github.com/CMLiang/zeus-admin/pkg/api/dao"
"github.com/CMLiang/zeus-admin/pkg/api/domain/perm"
"github.com/CMLiang/zeus-admin/pkg/api/dto"
"github.com/CMLiang/zeus-admin/pkg/api/log"
"github.com/CMLiang/zeus-admin/pkg/api/model"
)
var menuDao = dao.Menu{}
var menuPermAliasDao = dao.MenuPermAlias{}
type MenuService struct {
}
// InfoOfId - get menu info by id
func (MenuService) InfoOfId(dto dto.GeneralGetDto) model.Menu {
return menuDao.Get(dto.Id, true)
}
// List - users list with pagination
func (MenuService) List(treeDto dto.GeneralTreeDto) ([]model.Menu, int64) {
return menuDao.List(treeDto)
}
// Create - create a menu item
func (ms MenuService) Create(menuDto dto.MenuCreateDto) model.Menu {
menuModel := model.Menu{
Name: menuDto.Name,
ParentId: menuDto.ParentId,
DomainId: menuDto.DomainId,
Url: menuDto.Url,
Perms: menuDto.Perms,
Alias: menuDto.Alias,
MenuType: menuDto.MenuType,
Icon: menuDto.Icon,
OrderNum: menuDto.OrderNum,
}
c := menuDao.Create(&menuModel)
if c.Error != nil {
log.Error(c.Error.Error())
}
for _, alias := range strings.Split(menuDto.Alias, ",") {
menuPermAliasDao.Create(&model.MenuPermAlias{
Perms: menuDto.Perms,
Alias: alias,
DomainId: menuDto.DomainId,
CreatedTime: time.Now().Unix(),
UpdatedTime: time.Now().Unix(),
})
}
return menuModel
}
// Update
func (ms MenuService) Update(menuDto dto.MenuEditDto) int64 {
menuModel := menuDao.Get(menuDto.Id, false)
c := menuDao.Update(&menuModel, map[string]interface{}{
"name": menuDto.Name,
"url": menuDto.Url,
"perms": menuDto.Perms,
"alias": menuDto.Alias,
"order_num": menuDto.OrderNum,
"parent_id": menuDto.ParentId,
"icon": menuDto.Icon,
})
// 1.Remove all alias
menuPermAliasDao.Delete(model.MenuPermAlias{Perms: menuModel.Perms, DomainId: menuModel.DomainId})
// 2.Save new alias again
for _, alias := range strings.Split(menuDto.Alias, ",") {
menuPermAliasDao.Create(&model.MenuPermAlias{
Perms: menuDto.Perms,
Alias: alias,
DomainId: menuDto.DomainId,
CreatedTime: time.Now().Unix(),
UpdatedTime: time.Now().Unix(),
})
}
return c.RowsAffected
}
// Delete - delete menu
func (ms MenuService) Delete(dto dto.GeneralDelDto) int64 {
menuModel := menuDao.Get(dto.Id, false)
if menuModel.Id < 1 {
return -1
}
//If menu has sub menus , stop removing node
subMenus := menuDao.GetSubMenus(dto.Id)
if len(subMenus) > 0 {
return -2
}
//1. delete menu
perms := menuModel.Perms
c := menuDao.Delete(&menuModel)
if c.RowsAffected > 0 {
//2. delete related policies
//Empty perms puts in delete method would cause all casbin rules removed!
if perms != "" {
perm.DelFilteredPerm(1, perms)
}
// Remove all alias
menuPermAliasDao.Delete(model.MenuPermAlias{Perms: menuModel.Perms, DomainId: menuModel.DomainId})
}
return c.RowsAffected
}