848 lines
22 KiB
Go
848 lines
22 KiB
Go
package service
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"sort"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
|
|
"go-common/app/admin/main/growup/model"
|
|
"go-common/library/ecode"
|
|
"go-common/library/log"
|
|
xtime "go-common/library/time"
|
|
)
|
|
|
|
// const for default groupid
|
|
const (
|
|
// task group Admin id
|
|
AdminID = 1
|
|
)
|
|
|
|
var (
|
|
// task role list privilege id
|
|
_privilegeTaskRoleList = "12,48"
|
|
|
|
// admin
|
|
_privilegePrivilege = "7,8,9,10,11,12,38,39,40,41,42,43,44,45,46,47,48"
|
|
)
|
|
|
|
func removeDuplicatesAndEmpty(a []string) (ret []string) {
|
|
for i := 0; i < len(a); i++ {
|
|
if (i > 0 && a[i-1] == a[i]) || len(a[i]) == 0 {
|
|
continue
|
|
}
|
|
ret = append(ret, a[i])
|
|
}
|
|
return
|
|
}
|
|
|
|
// GetUserPri get user privilege
|
|
func (s *Service) GetUserPri(username string) (priMap map[int64]bool, err error) {
|
|
priMap = make(map[int64]bool)
|
|
|
|
query := fmt.Sprintf("username = '%s'", username)
|
|
users, err := s.dao.GetAuthorityUsersInfo(query, "id, task_group, task_role")
|
|
if err != nil {
|
|
log.Error("s.dao.GetAuthorityUsersInfo Error(%v)", err)
|
|
return
|
|
}
|
|
if len(users) == 0 {
|
|
return
|
|
}
|
|
if len(users) > 1 {
|
|
err = errors.New("get user error")
|
|
return
|
|
}
|
|
|
|
userPrivileges := []string{}
|
|
var taskPrivileges string
|
|
|
|
user := users[0]
|
|
if user.TaskGroup != "" {
|
|
groups := strings.Split(user.TaskGroup, ",")
|
|
for _, groupID := range groups {
|
|
id, _ := strconv.ParseInt(groupID, 10, 64)
|
|
taskPrivileges, err = s.dao.GetAuthorityTaskGroupPrivileges(id)
|
|
if err != nil {
|
|
log.Error("s.dao.GetAuthorityTaskGroupPrivileges Error(%v)", err)
|
|
return
|
|
}
|
|
userPrivileges = append(userPrivileges, strings.Split(taskPrivileges, ",")...)
|
|
}
|
|
}
|
|
|
|
if user.TaskRole != "" {
|
|
roles := strings.Split(user.TaskRole, ",")
|
|
for _, roleID := range roles {
|
|
id, _ := strconv.ParseInt(roleID, 10, 64)
|
|
taskPrivileges, err = s.dao.GetAuthorityTaskRolePrivileges(id)
|
|
if err != nil {
|
|
log.Error("s.dao.GetAuthorityTaskRolePrivileges Error(%v)", err)
|
|
return
|
|
}
|
|
userPrivileges = append(userPrivileges, strings.Split(taskPrivileges, ",")...)
|
|
}
|
|
}
|
|
|
|
sort.Strings(userPrivileges)
|
|
userPrivileges = removeDuplicatesAndEmpty(userPrivileges)
|
|
|
|
for _, privilegesID := range userPrivileges {
|
|
id, _ := strconv.ParseInt(privilegesID, 10, 64)
|
|
priMap[id] = true
|
|
}
|
|
return
|
|
}
|
|
|
|
// GetAuthorityUserPrivileges get user all privileges
|
|
func (s *Service) GetAuthorityUserPrivileges(username string) (data interface{}, err error) {
|
|
mPrivileges, err := s.GetUserPri(username)
|
|
if err != nil {
|
|
log.Error("s.GetUserPri Error(%v)", err)
|
|
return
|
|
}
|
|
|
|
if len(mPrivileges) == 0 {
|
|
data = map[string]interface{}{
|
|
"router": []string{},
|
|
}
|
|
return
|
|
}
|
|
|
|
all, err := s.ListPrivilege()
|
|
if err != nil {
|
|
log.Error("s.ListPrivilege Error(%v)", err)
|
|
return
|
|
}
|
|
|
|
router := []int64{}
|
|
for _, level1 := range all {
|
|
for _, level2 := range level1.Children {
|
|
for _, level3 := range level2.Children {
|
|
if _, ok := mPrivileges[level3.ID]; ok {
|
|
level3.Selected = true
|
|
level2.Selected = true
|
|
level1.Selected = true
|
|
if level3.IsRouter == 1 {
|
|
router = append(router, level3.ID)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
data = map[string]interface{}{
|
|
"privileges": all,
|
|
"router": router,
|
|
}
|
|
return
|
|
}
|
|
|
|
// GetAuthorityUserGroup get authority user group
|
|
func (s *Service) GetAuthorityUserGroup(username string) (data []*model.Group, err error) {
|
|
query := fmt.Sprintf("username = '%s'", username)
|
|
users, err := s.dao.GetAuthorityUsersInfo(query, "id, task_group")
|
|
if err != nil {
|
|
log.Error("s.dao.GetAuthorityUsersInfo Error(%v)", err)
|
|
return
|
|
}
|
|
if len(users) == 0 {
|
|
return
|
|
}
|
|
if len(users) > 1 {
|
|
err = errors.New("get user error")
|
|
return
|
|
}
|
|
if users[0].TaskGroup == "" {
|
|
return
|
|
}
|
|
|
|
groups := strings.Split(users[0].TaskGroup, ",")
|
|
allGroups, err := s.dao.GetAuthorityTaskGroups("")
|
|
if err != nil {
|
|
log.Error("s.dao.ListAuthorityTaskGroups Error(%v)", err)
|
|
return
|
|
}
|
|
|
|
gMap := make(map[int64]*model.Group)
|
|
for _, g := range allGroups {
|
|
gMap[g.ID] = g
|
|
}
|
|
|
|
data = make([]*model.Group, 0)
|
|
for _, id := range groups {
|
|
gID, _ := strconv.ParseInt(id, 10, 64)
|
|
if gID == 1 {
|
|
data = allGroups
|
|
return
|
|
}
|
|
data = append(data, gMap[gID])
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// ListAuthorityUsers list all users in authority-manage
|
|
func (s *Service) ListAuthorityUsers(username string, from, limit int, sort string) (users []*model.User, total int, err error) {
|
|
query := ""
|
|
if len(username) != 0 {
|
|
query = fmt.Sprintf("username = '%s'", username)
|
|
}
|
|
users, total, err = s.dao.ListAuthorityUsers(query, from, limit, sort)
|
|
for i := 0; i < len(users); i++ {
|
|
taskGroup := users[i].TaskGroup
|
|
groups := []*model.Group{}
|
|
if len(taskGroup) > 0 {
|
|
query = fmt.Sprintf("id in (%s)", taskGroup)
|
|
groups, err = s.dao.GetAuthorityTaskGroups(query)
|
|
if err != nil {
|
|
log.Error("s.dao.GetAuthorityTaskGroups Error(%v)", err)
|
|
return
|
|
}
|
|
}
|
|
users[i].Groups = groups
|
|
|
|
taskRole := users[i].TaskRole
|
|
roles := []*model.Role{}
|
|
if len(taskRole) > 0 {
|
|
query = fmt.Sprintf("id in (%s)", taskRole)
|
|
roles, err = s.dao.GetAuthorityTaskRoles(query)
|
|
if err != nil {
|
|
log.Error("s.dao.GetAuthorityTaskRoles Error(%v)", err)
|
|
return
|
|
}
|
|
}
|
|
users[i].Roles = roles
|
|
}
|
|
return
|
|
}
|
|
|
|
// AddAuthorityUser add user to authority-manage
|
|
func (s *Service) AddAuthorityUser(username, nickname string) (err error) {
|
|
user := model.User{
|
|
Username: username,
|
|
Nickname: nickname,
|
|
ATime: xtime.Time(time.Now().Unix()),
|
|
}
|
|
return s.dao.AddAuthorityUser(&user)
|
|
}
|
|
|
|
// UpdateAuthorityUserInfo update user's nickname
|
|
func (s *Service) UpdateAuthorityUserInfo(id int64, nickname string) (err error) {
|
|
update := map[string]interface{}{
|
|
"nickname": nickname,
|
|
}
|
|
return s.dao.UpdateAuthorityUser(id, update)
|
|
}
|
|
|
|
// UpdateAuthorityUserAuth update user's task group and task role
|
|
func (s *Service) UpdateAuthorityUserAuth(id int64, groupID, roleID string) (err error) {
|
|
update := map[string]interface{}{
|
|
"task_group": groupID,
|
|
"task_role": roleID,
|
|
}
|
|
return s.dao.UpdateAuthorityUser(id, update)
|
|
}
|
|
|
|
// DeleteAuthorityUser delete user from authority-manage from id
|
|
func (s *Service) DeleteAuthorityUser(id int64) (err error) {
|
|
return s.dao.DeleteAuthorityUser(id)
|
|
}
|
|
|
|
func getAuthorityGroupUsers(groupID string, users []*model.User) (result []*model.SUser) {
|
|
result = []*model.SUser{}
|
|
for _, user := range users {
|
|
groupIDs := strings.Split(user.TaskGroup, ",")
|
|
for _, id := range groupIDs {
|
|
if id == groupID {
|
|
result = append(result, &model.SUser{
|
|
ID: user.ID,
|
|
Name: user.Username,
|
|
})
|
|
break
|
|
}
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
// ListAuthorityTaskGroups list all task groups in authority-manage
|
|
func (s *Service) ListAuthorityTaskGroups(from, limit int, sort string) (groups []*model.TaskGroup, total int, err error) {
|
|
groups, total, err = s.dao.ListAuthorityTaskGroups("", from, limit, sort)
|
|
if err != nil {
|
|
log.Error("s.dao.ListAuthorityTaskGroups Error(%v)", err)
|
|
return
|
|
}
|
|
|
|
users, err := s.dao.GetAuthorityUsersInfo("", "id, username, task_group")
|
|
if err != nil {
|
|
log.Error("s.dao.GetAuthorityUsersInfo Error(%v)", err)
|
|
return
|
|
}
|
|
for i := 0; i < len(groups); i++ {
|
|
groups[i].Users = getAuthorityGroupUsers(strconv.FormatInt(groups[i].ID, 10), users)
|
|
}
|
|
return
|
|
}
|
|
|
|
// AddAuthorityTaskGroup add new task group to authority-manage and add privilege 48
|
|
func (s *Service) AddAuthorityTaskGroup(name, desc string) (err error) {
|
|
if len(name) == 0 {
|
|
return errors.New("get group name error")
|
|
}
|
|
group := model.TaskGroup{
|
|
Name: name,
|
|
Desc: desc,
|
|
ATime: xtime.Time(time.Now().Unix()),
|
|
}
|
|
err = s.dao.AddAuthorityTaskGroup(&group)
|
|
if err != nil {
|
|
log.Error("s.dao.AddAuthorityTaskGroup Error(%v)", err)
|
|
return
|
|
}
|
|
|
|
newGroup, err := s.dao.GetAuthorityTaskGroup(fmt.Sprintf("name = '%s'", name))
|
|
if err != nil {
|
|
log.Error("s.dao.AddAuthorityTaskGroup Error(%v)", err)
|
|
return
|
|
}
|
|
|
|
return s.UpdateAuthorityGroupPrivilege(newGroup.ID, "", "", 0)
|
|
}
|
|
|
|
// AddAuthorityTaskGroupUser add user to task group
|
|
func (s *Service) AddAuthorityTaskGroupUser(username, groupID string) (err error) {
|
|
if len(username) == 0 {
|
|
return errors.New("get username error")
|
|
}
|
|
var users []*model.User
|
|
query := fmt.Sprintf("username = '%s'", username)
|
|
users, err = s.dao.GetAuthorityUsersInfo(query, "id, task_group")
|
|
if err != nil {
|
|
log.Error("s.dao.GetAuthorityUsersInfo error(%v)", err)
|
|
return
|
|
}
|
|
if len(users) != 1 {
|
|
return ecode.GrowupAuthorityUserNotFound
|
|
}
|
|
|
|
if len(users[0].TaskGroup) != 0 {
|
|
groupID = users[0].TaskGroup + "," + groupID
|
|
}
|
|
|
|
update := map[string]interface{}{"task_group": groupID}
|
|
err = s.dao.UpdateAuthorityUser(users[0].ID, update)
|
|
if err != nil {
|
|
log.Error("s.dao.UpdateAuthorityUser error(%v)", err)
|
|
}
|
|
return
|
|
}
|
|
|
|
// UpdateAuthorityTaskGroupInfo update task group info
|
|
func (s *Service) UpdateAuthorityTaskGroupInfo(groupID int64, name, desc string) (err error) {
|
|
update := make(map[string]interface{})
|
|
if len(desc) != 0 {
|
|
update["desc"] = desc
|
|
}
|
|
if len(name) != 0 {
|
|
update["name"] = name
|
|
}
|
|
return s.dao.UpdateAuthorityTaskGroup(groupID, update)
|
|
}
|
|
|
|
func spliceStrs(strs []string) (ret string) {
|
|
for _, str := range strs {
|
|
ret += str + ","
|
|
}
|
|
if len(ret) == 0 {
|
|
return
|
|
}
|
|
return ret[:len(ret)-1]
|
|
}
|
|
|
|
func (s *Service) updateAuthorityUsersGroup(groupID string, users []*model.User) (err error) {
|
|
for _, user := range users {
|
|
groupIDs := strings.Split(user.TaskGroup, ",")
|
|
for i := 0; i < len(groupIDs); i++ {
|
|
if groupIDs[i] == groupID {
|
|
groupIDs = append(groupIDs[:i], groupIDs[i+1:]...)
|
|
err = s.dao.UpdateAuthorityUser(user.ID, map[string]interface{}{"task_group": spliceStrs(groupIDs)})
|
|
if err != nil {
|
|
log.Error("s.dao.UpdateAuthorityUser error(%v)", err)
|
|
return
|
|
}
|
|
break
|
|
}
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
// DeleteAuthorityTaskGroup delete task group
|
|
func (s *Service) DeleteAuthorityTaskGroup(groupID int64) (err error) {
|
|
err = s.dao.DeleteAuthorityTaskGroup(groupID)
|
|
if err != nil {
|
|
log.Error("s.dao.DeleteAuthorityTaskGroup error(%v)", err)
|
|
return
|
|
}
|
|
|
|
// update users task group
|
|
users, err := s.dao.GetAuthorityUsersInfo("", "id, task_group")
|
|
if err != nil {
|
|
log.Error("s.dao.GetAuthorityUsersInfo Error(%v)", err)
|
|
return
|
|
}
|
|
err = s.updateAuthorityUsersGroup(strconv.FormatInt(groupID, 10), users)
|
|
if err != nil {
|
|
log.Error("s.updateAuthorityUsersGroup error(%v)", err)
|
|
return
|
|
}
|
|
|
|
// delete task role which belong this group
|
|
query := fmt.Sprintf("group_id = %d", groupID)
|
|
roles, err := s.dao.GetAuthorityTaskRoles(query)
|
|
for _, role := range roles {
|
|
err = s.DeleteAuthorityTaskRole(role.ID)
|
|
if err != nil {
|
|
log.Error("s.DeleteAuthorityTaskRole error(%v)", err)
|
|
return
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
// DeleteAuthorityTaskGroupUser delete user from task group
|
|
func (s *Service) DeleteAuthorityTaskGroupUser(id, groupID int64) (err error) {
|
|
query := fmt.Sprintf("id = %d", id)
|
|
users, err := s.dao.GetAuthorityUsersInfo(query, "id, task_group")
|
|
if err != nil {
|
|
log.Error("s.dao.GetAuthorityUsersInfo Error(%v)", err)
|
|
return
|
|
}
|
|
err = s.updateAuthorityUsersGroup(strconv.FormatInt(groupID, 10), users)
|
|
if err != nil {
|
|
log.Error("s.updateAuthorityUsersGroup error(%v)", err)
|
|
}
|
|
return
|
|
}
|
|
|
|
// ListAuthorityGroupPrivilege list task group's privileges
|
|
func (s *Service) ListAuthorityGroupPrivilege(groupID int64, fatherID int64) (ret *model.SPrivilege, err error) {
|
|
var privilege string
|
|
privilege, err = s.dao.GetAuthorityTaskGroupPrivileges(groupID)
|
|
if err != nil {
|
|
log.Error("s.dao.GetAuthorityTaskGroupPrivileges Error(%v)", err)
|
|
return
|
|
}
|
|
privileges := strings.Split(privilege, ",")
|
|
|
|
var data []*model.SPrivilege
|
|
data, err = s.ListPrivilege()
|
|
if err != nil {
|
|
log.Error("s.ListPrivilege Error(%v)", err)
|
|
return
|
|
}
|
|
for i := 0; i < len(data); i++ {
|
|
if data[i].ID == fatherID {
|
|
ret = data[i]
|
|
for _, idStr := range privileges {
|
|
id, _ := strconv.ParseInt(idStr, 10, 64)
|
|
for _, level2 := range ret.Children {
|
|
for _, level3 := range level2.Children {
|
|
if level3.ID == id {
|
|
level3.Selected = true
|
|
level2.Selected = true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
ret.Selected = true
|
|
break
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
// UpdateAuthorityGroupPrivilege update group task privileges
|
|
func (s *Service) UpdateAuthorityGroupPrivilege(groupID int64, add, minus string, authType int) (err error) {
|
|
// get old privilege by group id
|
|
privilege, err := s.dao.GetAuthorityTaskGroupPrivileges(groupID)
|
|
if err != nil {
|
|
log.Error("s.dao.GetAuthorityTaskGroupPrivileges Error(%v)", err)
|
|
return
|
|
}
|
|
newP := make(map[string]struct{})
|
|
privilegeSli := strings.Split(privilege, ",")
|
|
for _, p := range privilegeSli {
|
|
if p == "" {
|
|
continue
|
|
}
|
|
newP[p] = struct{}{}
|
|
}
|
|
// default add task role list privilege
|
|
// 数据源权限不需要添加
|
|
if authType == 0 {
|
|
add += "," + _privilegeTaskRoleList
|
|
if groupID == 1 {
|
|
add += "," + _privilegePrivilege
|
|
}
|
|
add = strings.TrimPrefix(add, ",")
|
|
}
|
|
for _, p := range strings.Split(add, ",") {
|
|
if p == "" {
|
|
continue
|
|
}
|
|
newP[p] = struct{}{}
|
|
}
|
|
// minus
|
|
for _, p := range strings.Split(minus, ",") {
|
|
if p == "" {
|
|
continue
|
|
}
|
|
delete(newP, p)
|
|
}
|
|
privileges := ""
|
|
for p := range newP {
|
|
privileges += p + ","
|
|
}
|
|
update := map[string]interface{}{
|
|
"privileges": strings.TrimSuffix(privileges, ","),
|
|
}
|
|
return s.dao.UpdateAuthorityTaskGroup(groupID, update)
|
|
}
|
|
|
|
func getAuthorityRoleUsers(roleID string, users []*model.User) (result []*model.SUser) {
|
|
result = []*model.SUser{}
|
|
for _, user := range users {
|
|
roleIDs := strings.Split(user.TaskRole, ",")
|
|
for _, id := range roleIDs {
|
|
if id == roleID {
|
|
result = append(result, &model.SUser{
|
|
ID: user.ID,
|
|
Name: user.Username,
|
|
})
|
|
break
|
|
}
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
// ListAuthorityTaskRoles list user's task roles
|
|
func (s *Service) ListAuthorityTaskRoles(username string, from, limit int, sort string) (roles []*model.TaskRole, total int, err error) {
|
|
query := fmt.Sprintf("username = '%s'", username)
|
|
users, err := s.dao.GetAuthorityUsersInfo(query, "task_group")
|
|
if err != nil {
|
|
log.Error("s.dao.GetAuthorityUsersInfo Error(%v)", err)
|
|
return
|
|
}
|
|
if len(users) == 0 || len(users) > 1 {
|
|
err = ecode.GrowupAuthorityUserNotFound
|
|
return
|
|
}
|
|
user := users[0]
|
|
query = fmt.Sprintf("group_id in (%s)", user.TaskGroup)
|
|
groupIDs := strings.Split(user.TaskGroup, ",")
|
|
for _, groupID := range groupIDs {
|
|
if groupID == strconv.Itoa(AdminID) { // Admin
|
|
query = ""
|
|
break
|
|
}
|
|
}
|
|
|
|
roles, total, err = s.dao.ListAuthorityTaskRoles(query, from, limit, sort)
|
|
if err != nil {
|
|
log.Error("s.dao.ListAuthorityTaskRoles Error(%v)", err)
|
|
return
|
|
}
|
|
|
|
users, err = s.dao.GetAuthorityUsersInfo("", "id, username, task_role")
|
|
if err != nil {
|
|
log.Error("s.dao.GetAuthorityUsersInfo Error(%v)", err)
|
|
return
|
|
}
|
|
for i := 0; i < len(roles); i++ {
|
|
roles[i].Users = getAuthorityRoleUsers(strconv.FormatInt(roles[i].ID, 10), users)
|
|
roles[i].GroupName, err = s.dao.GetAuthorityTaskGroupName(roles[i].GroupID)
|
|
if err != nil {
|
|
log.Error("s.dao.GetAuthorityTaskGroupName Error(%v)", err)
|
|
return
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
// AddAuthorityTaskRole add task role to authority-manage
|
|
func (s *Service) AddAuthorityTaskRole(groupID int64, name, desc string) (err error) {
|
|
if len(name) == 0 {
|
|
return errors.New("get role name error")
|
|
}
|
|
|
|
role := model.TaskRole{
|
|
Name: name,
|
|
Desc: desc,
|
|
GroupID: groupID,
|
|
ATime: xtime.Time(time.Now().Unix()),
|
|
}
|
|
return s.dao.AddAuthorityTaskRole(&role)
|
|
}
|
|
|
|
// AddAuthorityTaskRoleUser add user to task group
|
|
func (s *Service) AddAuthorityTaskRoleUser(username, roleID string) (err error) {
|
|
if len(username) == 0 {
|
|
return errors.New("get username error")
|
|
}
|
|
var users []*model.User
|
|
query := fmt.Sprintf("username = '%s'", username)
|
|
users, err = s.dao.GetAuthorityUsersInfo(query, "id, task_role")
|
|
if err != nil {
|
|
log.Error("s.dao.GetAuthorityUsersInfo error(%v)", err)
|
|
return
|
|
}
|
|
if len(users) != 1 {
|
|
return ecode.GrowupAuthorityUserNotFound
|
|
}
|
|
|
|
if len(users[0].TaskRole) != 0 {
|
|
roleID = users[0].TaskRole + "," + roleID
|
|
}
|
|
|
|
update := map[string]interface{}{"task_role": roleID}
|
|
err = s.dao.UpdateAuthorityUser(users[0].ID, update)
|
|
if err != nil {
|
|
log.Error("s.dao.UpdateAuthorityUser error(%v)", err)
|
|
}
|
|
return
|
|
}
|
|
|
|
// UpdateAuthorityTaskRoleInfo update task role info
|
|
func (s *Service) UpdateAuthorityTaskRoleInfo(roleID int64, name, desc string) (err error) {
|
|
update := make(map[string]interface{})
|
|
if len(desc) != 0 {
|
|
update["desc"] = desc
|
|
}
|
|
if len(name) != 0 {
|
|
update["name"] = name
|
|
}
|
|
return s.dao.UpdateAuthorityTaskRole(roleID, update)
|
|
}
|
|
|
|
func (s *Service) updateAuthorityUsersRole(roleID string, users []*model.User) (err error) {
|
|
for _, user := range users {
|
|
roleIDs := strings.Split(user.TaskRole, ",")
|
|
for i := 0; i < len(roleIDs); i++ {
|
|
if roleIDs[i] == roleID {
|
|
roleIDs = append(roleIDs[:i], roleIDs[i+1:]...)
|
|
err = s.dao.UpdateAuthorityUser(user.ID, map[string]interface{}{"task_role": spliceStrs(roleIDs)})
|
|
if err != nil {
|
|
log.Error("s.dao.UpdateAuthorityUser error(%v)", err)
|
|
return
|
|
}
|
|
break
|
|
}
|
|
}
|
|
}
|
|
return
|
|
}
|
|
|
|
// DeleteAuthorityTaskRole delete task role
|
|
func (s *Service) DeleteAuthorityTaskRole(roleID int64) (err error) {
|
|
err = s.dao.DeleteAuthorityTaskRole(roleID)
|
|
if err != nil {
|
|
log.Error("s.dao.DeleteAuthorityTaskRole error(%v)", err)
|
|
return
|
|
}
|
|
|
|
// update users task role
|
|
users, err := s.dao.GetAuthorityUsersInfo("", "id, task_role")
|
|
if err != nil {
|
|
log.Error("s.dao.GetAuthorityUsersInfo Error(%v)", err)
|
|
return
|
|
}
|
|
err = s.updateAuthorityUsersRole(strconv.FormatInt(roleID, 10), users)
|
|
if err != nil {
|
|
log.Error("s.updateAuthorityUsersRole error(%v)", err)
|
|
}
|
|
return
|
|
}
|
|
|
|
// DeleteAuthorityTaskRoleUser delete user from task role
|
|
func (s *Service) DeleteAuthorityTaskRoleUser(id, roleID int64) (err error) {
|
|
query := fmt.Sprintf("id = %d", id)
|
|
users, err := s.dao.GetAuthorityUsersInfo(query, "id, task_role")
|
|
if err != nil {
|
|
log.Error("s.dao.GetAuthorityUsersInfo Error(%v)", err)
|
|
return
|
|
}
|
|
err = s.updateAuthorityUsersRole(strconv.FormatInt(roleID, 10), users)
|
|
if err != nil {
|
|
log.Error("s.updateAuthorityUsersRole error(%v)", err)
|
|
}
|
|
return
|
|
}
|
|
|
|
// ListAuthorityRolePrivilege list task role's privileges
|
|
func (s *Service) ListAuthorityRolePrivilege(groupID, roleID int64, fatherID int64) (data *model.SPrivilege, err error) {
|
|
var privilege string
|
|
privilege, err = s.dao.GetAuthorityTaskRolePrivileges(roleID)
|
|
if err != nil {
|
|
log.Error("s.dao.GetAuthorityTaskRolePrivileges Error(%v)", err)
|
|
return
|
|
}
|
|
privileges := strings.Split(privilege, ",")
|
|
|
|
data, err = s.ListAuthorityGroupPrivilege(groupID, fatherID)
|
|
if err != nil {
|
|
log.Error("s.ListAuthorityGroupPrivilege Error(%v)", err)
|
|
return
|
|
}
|
|
|
|
level2 := data.Children
|
|
for i := 0; i < len(level2); i++ {
|
|
if !level2[i].Selected {
|
|
level2 = append(level2[:i], level2[i+1:]...)
|
|
i--
|
|
} else {
|
|
level3 := level2[i].Children
|
|
for j := 0; j < len(level3); j++ {
|
|
if !level3[j].Selected {
|
|
level3 = append(level3[:j], level3[j+1:]...)
|
|
j--
|
|
} else {
|
|
level3[j].Selected = false
|
|
}
|
|
}
|
|
level2[i].Children = level3
|
|
level2[i].Selected = false
|
|
}
|
|
}
|
|
data.Children = level2
|
|
data.Selected = false
|
|
|
|
for _, idStr := range privileges {
|
|
id, _ := strconv.ParseInt(idStr, 10, 64)
|
|
for _, level2 := range data.Children {
|
|
for _, level3 := range level2.Children {
|
|
if level3.ID == id {
|
|
level3.Selected = true
|
|
level2.Selected = true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
data.Selected = true
|
|
return
|
|
}
|
|
|
|
// UpdateAuthorityRolePrivilege update role task privileges
|
|
func (s *Service) UpdateAuthorityRolePrivilege(roleID int64, add, minus string) (err error) {
|
|
privilege, err := s.dao.GetAuthorityTaskRolePrivileges(roleID)
|
|
if err != nil {
|
|
log.Error("s.dao.GetAuthorityTaskRolePrivileges Error(%v)", err)
|
|
return
|
|
}
|
|
newP := make(map[string]struct{})
|
|
privilegeSli := strings.Split(privilege, ",")
|
|
for _, p := range privilegeSli {
|
|
if p == "" {
|
|
continue
|
|
}
|
|
newP[p] = struct{}{}
|
|
}
|
|
// add
|
|
for _, p := range strings.Split(add, ",") {
|
|
if p == "" {
|
|
continue
|
|
}
|
|
newP[p] = struct{}{}
|
|
}
|
|
// minus
|
|
for _, p := range strings.Split(minus, ",") {
|
|
if p == "" {
|
|
continue
|
|
}
|
|
delete(newP, p)
|
|
}
|
|
privileges := ""
|
|
for p := range newP {
|
|
privileges += p + ","
|
|
}
|
|
update := map[string]interface{}{
|
|
"privileges": strings.TrimSuffix(privileges, ","),
|
|
}
|
|
return s.dao.UpdateAuthorityTaskRole(roleID, update)
|
|
}
|
|
|
|
// ListGroupAndRole list all task groups and task roles to admin
|
|
func (s *Service) ListGroupAndRole() (groups []*model.Group, roles []*model.Role, err error) {
|
|
groups, err = s.dao.GetAuthorityTaskGroups("")
|
|
if err != nil {
|
|
log.Error("s.dao.GetAuthorityTaskGroups Error(%v)", err)
|
|
return
|
|
}
|
|
roles, err = s.dao.GetAuthorityTaskRoles("")
|
|
if err != nil {
|
|
log.Error("s.dao.GetAuthorityTaskRoles Error(%v)", err)
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
// AddPrivilege all privilege
|
|
func (s *Service) AddPrivilege(name string, level, fatherID int64, isRouter uint8) (err error) {
|
|
privilege := model.Privilege{
|
|
Name: name,
|
|
Level: level,
|
|
FatherID: fatherID,
|
|
IsRouter: isRouter,
|
|
}
|
|
return s.dao.AddPrivilege(&privilege)
|
|
}
|
|
|
|
// UpdatePrivilege update privilege info
|
|
func (s *Service) UpdatePrivilege(id int64, name string, level, fatherID int64, isRouter uint8) (err error) {
|
|
update := map[string]interface{}{
|
|
"name": name,
|
|
"level": level,
|
|
"father_id": fatherID,
|
|
"is_router": isRouter,
|
|
}
|
|
return s.dao.UpdatePrivilege(id, update)
|
|
}
|
|
|
|
// ListPrivilege list privilege by level
|
|
func (s *Service) ListPrivilege() (data []*model.SPrivilege, err error) {
|
|
var level1, level2, level3 []*model.SPrivilege
|
|
|
|
query := fmt.Sprintf("level = 1")
|
|
level1, err = s.dao.GetLevelPrivileges(query)
|
|
if err != nil {
|
|
log.Error("s.dao.GetLevelPrivileges Error(%v)", err)
|
|
return
|
|
}
|
|
for _, p1 := range level1 {
|
|
query = fmt.Sprintf("level = 2 AND father_id = %d", p1.ID)
|
|
level2, err = s.dao.GetLevelPrivileges(query)
|
|
if err != nil {
|
|
log.Error("s.dao.GetLevelPrivileges Error(%v)", err)
|
|
return
|
|
}
|
|
for _, p2 := range level2 {
|
|
query = fmt.Sprintf("level = 3 AND father_id = %d", p2.ID)
|
|
level3, err = s.dao.GetLevelPrivileges(query)
|
|
if err != nil {
|
|
log.Error("s.dao.GetLevelPrivileges Error(%v)", err)
|
|
return
|
|
}
|
|
p2.Children = level3
|
|
p2.Level = 2
|
|
}
|
|
p1.Children = level2
|
|
p1.Level = 1
|
|
}
|
|
data = level1
|
|
return
|
|
}
|