1
0
Files
omc_api/features/security/service/service_account.go
2023-10-10 10:56:44 +08:00

57 lines
1.7 KiB
Go

package service
import (
menuService "ems.agt/features/sys_menu/service"
roleService "ems.agt/features/sys_role/service"
userService "ems.agt/features/sys_user/service"
"ems.agt/lib/core/utils/parse"
"ems.agt/lib/core/vo"
)
// 实例化服务层 ServiceAccount 结构体
var NewServiceAccount = &ServiceAccount{
sysUserService: userService.NewServiceSysUser,
sysRoleService: roleService.NewServiceSysRole,
sysMenuService: menuService.NewServiceSysMenu,
}
// 账号身份操作服务 服务层处理
type ServiceAccount struct {
// 用户信息服务
sysUserService *userService.ServiceSysUser
// 角色服务
sysRoleService *roleService.ServiceSysRole
// 菜单服务
sysMenuService *menuService.ServiceSysMenu
}
// RoleAndMenuPerms 角色和菜单数据权限
func (s *ServiceAccount) RoleAndMenuPerms(userId string, isAdmin bool) ([]string, []string) {
if isAdmin {
return []string{"admin"}, []string{"*:*:*"}
} else {
// 角色key
roleGroup := []string{}
roles := s.sysRoleService.SelectRoleListByUserId(userId)
for _, role := range roles {
roleGroup = append(roleGroup, role.RoleKey)
}
// 菜单权限key
perms := s.sysMenuService.SelectMenuPermsByUserId(userId)
return parse.RemoveDuplicates(roleGroup), parse.RemoveDuplicates(perms)
}
}
// RouteMenus 前端路由所需要的菜单
func (s *ServiceAccount) RouteMenus(userId string, isAdmin bool) []vo.Router {
var buildMenus []vo.Router
if isAdmin {
menus := s.sysMenuService.SelectMenuTreeByUserId("*")
buildMenus = s.sysMenuService.BuildRouteMenus(menus, "")
} else {
menus := s.sysMenuService.SelectMenuTreeByUserId(userId)
buildMenus = s.sysMenuService.BuildRouteMenus(menus, "")
}
return buildMenus
}