You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
3.3 KiB
143 lines
3.3 KiB
package service |
|
|
|
import ( |
|
"context" |
|
|
|
"go-common/app/admin/main/aegis/model/business" |
|
"go-common/app/admin/main/aegis/model/common" |
|
"go-common/app/admin/main/aegis/model/task" |
|
"go-common/library/log" |
|
) |
|
|
|
// GetRole . |
|
func (s *Service) GetRole(c context.Context, opt *common.BaseOptions) (uname string, role int8, err error) { |
|
role, uname, err = s.mc.GetRole(c, opt) |
|
if err == nil && role > 0 { |
|
return |
|
} |
|
|
|
var ( |
|
cfgs map[int64][]int64 //bid:flowids |
|
mngid int64 |
|
) |
|
|
|
if cfgs = s.getTaskRole(c, opt.BusinessID); err != nil { |
|
return |
|
} |
|
for bid, flows := range cfgs { |
|
exist := false |
|
for _, flowID := range flows { |
|
if flowID == opt.FlowID { |
|
exist = true |
|
break |
|
} |
|
} |
|
if exist { |
|
mngid = bid |
|
break |
|
} |
|
} |
|
log.Info("GetRole %d %d", mngid, opt.UID) |
|
|
|
if mngid <= 0 { |
|
return |
|
} |
|
|
|
roles, err := s.http.GetRole(c, mngid, opt.UID) |
|
if err != nil { |
|
return |
|
} |
|
|
|
for _, item := range roles { |
|
log.Info("GetRole %d %d %+v", mngid, opt.UID, item) |
|
if int8(item.RID) == task.TaskRoleLeader { |
|
role = task.TaskRoleLeader |
|
break |
|
} |
|
if int8(item.RID) == task.TaskRoleMember { |
|
role = task.TaskRoleMember |
|
} |
|
} |
|
log.Info("GetRole %d %d %d", mngid, opt.UID, role) |
|
|
|
if opt.Uname == "" { |
|
unames, _ := s.http.GetUnames(c, []int64{opt.UID}) |
|
opt.Uname = unames[opt.UID] |
|
} |
|
|
|
uname = opt.Uname |
|
s.mc.SetRole(c, opt, role) |
|
return |
|
} |
|
|
|
//GetTaskBizFlows uid能查看哪些任务节点 |
|
func (s *Service) GetTaskBizFlows(c context.Context, uid int64) (businessID []int64, flows []int64, err error) { |
|
var ( |
|
uroles []*task.Role |
|
) |
|
businessID = []int64{} |
|
flows = []int64{} |
|
//用户角色 |
|
if uroles, err = s.http.GetUserRoles(c, uid); err != nil { |
|
log.Error("GetTaskBizFlows s.http.GetUserRoles(%d) error(%v)", uid, err) |
|
return |
|
} |
|
|
|
//业务与用户角色的映射关系 |
|
bizMap := map[int64]int{} |
|
bizs := []int64{} |
|
for _, item := range uroles { |
|
if item == nil || item.BID <= 0 { |
|
continue |
|
} |
|
|
|
bizMap[item.BID] = 1 |
|
bizs = append(bizs, item.BID) |
|
} |
|
|
|
businessID, flows = s.getTaskBiz(c, bizs) |
|
log.Info("checkAccessTask uid(%d) can see business(%+v)", uid, businessID) |
|
return |
|
} |
|
|
|
//GetRoleBiz uid能查看哪些业务 |
|
func (s *Service) GetRoleBiz(c context.Context, uid int64, role string, noAdmin bool) (businessID []int64, err error) { |
|
var ( |
|
uroles []*task.Role |
|
) |
|
businessID = []int64{} |
|
//用户角色 |
|
if uroles, err = s.http.GetUserRoles(c, uid); err != nil { |
|
log.Error("GetRoleBiz s.http.GetUserRoles(%d) error(%v)", uid, err) |
|
return |
|
} |
|
|
|
//业务与用户角色的映射关系 |
|
bizMap := map[int64]int{} |
|
for _, item := range uroles { |
|
if item == nil || item.BID <= 0 || item.RID <= 0 { |
|
continue |
|
} |
|
|
|
roles, bizID := s.getBizRole(c, item.BID) |
|
log.Info("GetRoleBiz s.getBizRole roles(%+v) bizID(%d)", roles, bizID) |
|
if len(roles) == 0 || bizID <= 0 { |
|
continue |
|
} |
|
|
|
//没有role, 走bid, 有role,走role过滤; 然后在走noadmin过滤 |
|
if (role != "" && roles[role] != item.RID) || (noAdmin && roles[business.BizBIDAdmin] == item.RID) || bizMap[bizID] > 0 { |
|
continue |
|
} |
|
|
|
businessID = append(businessID, bizID) |
|
bizMap[bizID] = 1 |
|
} |
|
log.Info("uid(%d) can see biz(%v) as role(%s) noadmin(%v)", uid, businessID, role, noAdmin) |
|
return |
|
} |
|
|
|
//FlushRole . |
|
func (s *Service) FlushRole(c context.Context, BizID, flowID int64, uids []int64) (err error) { |
|
return s.mc.DelRole(c, BizID, flowID, uids) |
|
}
|
|
|