2019-04-22 02:59:20 +00:00

144 lines
3.3 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
}