package logic import ( "context" "fmt" "strings" "git.i2edu.net/i2/i2-bill-erp/internal/svc" "git.i2edu.net/i2/i2-bill-erp/model" "git.i2edu.net/i2/i2-bill-erp/transform" "github.com/thoas/go-funk" "git.i2edu.net/i2/go-zero/core/logx" ) var roleMap = map[string]map[string]string{ // ##渠道一级 "one_level_channel": map[string]string{"市场": "1001", "网络": "1002", "老推": "1003", "品牌": "1004", "其他": "1005"}, // ##任务 // #目标计划 // 市场人员计划 "mkt_marketer_plan_target": map[string]string{"市场人员划分": "user", "校区划分": "os"}, // // 校区市场计划 "mkt_sch_market_plan": map[string]string{"校区划分": "os"}, // 销售人员计划 "mkt_ec_user_targetplan": map[string]string{"销售人员划分": "user", "校区划分": "os"}, // // 校区销售计划 "mkt_sch_targetsign_plan": map[string]string{"校区划分": "os"}, // 客服人员计划 "mkt_ta_target_plan": map[string]string{"客服人员划分": "user", "校区划分": "os"}, // // 校区客服计划 "mkt_sch_ta_targetplan": map[string]string{"校区划分": "os"}, // 生日提醒 "remind_birthday": map[string]string{"跟进校区划分": "os", "班型客服划分": "ta"}, // ##营销 // #线索管理 // 线索学员 "mkt_resource": map[string]string{"资源销售划分": "ec", "资源收集人划分": "load_user", "资源收集校区划分": "os", "网络渠道划分": "tmk", "市场渠道划分": "mkt", "品牌渠道划分": "prod", "老推渠道划分": "old", "其他渠道划分": "other", "非网络渠道划分": "no_tmk", "分配tmk划分": "allot_tmk", "资源录入人划分": "create_by", "收集城市划分": "tmk_city", "资源收集校区筛选": "load_sch", "资源跟进校区筛选": "stu_sch"}, // 市场活动管理 "mkt_activity": map[string]string{"活动创建人划分": "user", "活动校区划分": "os"}, // #潜在学员管理 // 潜在学员列表 "existing_students": map[string]string{"学员销售划分": "ec", "学员跟进校区划分": "os", "网络渠道划分": "tmk", "市场渠道划分": "mkt", "品牌渠道划分": "prod", "老推渠道划分": "old", "其他渠道划分": "other", "资源收集校区筛选": "load_sch", "资源跟进校区筛选": "stu_sch", "资源收集人划分": "load_user", "分配tmk划分": "allot_tmk"}, // 老推学员列表 "old_students": map[string]string{"资源收集人划分": "load_user", "学员跟进校区划分": "os"}, // 邀约上门学员列表 "mkt_invite_visit": map[string]string{"资源收集人划分": "load_user", "学员销售划分": "ec", "资源收集校区划分": "os"}, // 无效资源列表 "invalid_students": map[string]string{"学员销售划分": "ec", "学员跟进校区划分": "os"}, // #试听课管理 // 试听课列表 "mkt_trial_lesson": map[string]string{"试听课客服划分": "ta", "试听课教师划分": "tea", "试听课校区划分": "os"}, // 试听课学员列表 "mkt_trial_lesson_student": map[string]string{"学员销售划分": "ec", "试听课教师划分": "ta", "试听课校区划分": "os", "网络渠道划分": "tmk", "市场渠道划分": "mkt", "品牌渠道划分": "prod", "老推渠道划分": "old", "其他渠道划分": "other", "收集城市划分": "tmk_city", "分配tmk划分": "allot_tmk", "资源收集人划分": "load_user", "资源收集校区划分": "load_sch"}, // tmk待分配学员列表 "mkt_stu_unallot_tmk": map[string]string{"资源销售划分": "ec", "资源收集人划分": "load_user", "资源收集校区划分": "os", "网络渠道划分": "tmk", "市场渠道划分": "mkt", "品牌渠道划分": "prod", "老推渠道划分": "old", "其他渠道划分": "other", "非网络渠道划分": "no_tmk", "资源录入人划分": "create_by", "收集城市划分": "tmk_city"}, // tmk已分配学员列表 "mkt_stu_allot_tmk": map[string]string{"收集城市划分": "os", "资源收集人划分": "user", "分配tmk划分": "tmk_user", "网络渠道划分": "tmk", "市场渠道划分": "mkt", "品牌渠道划分": "prod", "老推渠道划分": "old", "其他渠道划分": "other"}, // 学员回访列表 "mkt_student_visit": map[string]string{"学员销售划分": "ec", "学员跟进校区划分": "os"}, // ##教务 "stu_class": map[string]string{"班级客服划分": "kf", "学员跟进校区划分": "os"}, "edu_tea_leave_management": map[string]string{"教师所属校区划分": "sys_os", "教师权限校区划分": "os", "教师划分": "tea"}, "crm_complaints_repair_order": map[string]string{"校区划分": "os"}, "order_student_class_type": map[string]string{"学员销售划分": "ec", "班型客服划分": "ta", "签单校区划分": "of_os", "学员跟进校区划分": "os"}, "order_deposit_in": map[string]string{"学员销售划分": "ec", "班型客服划分": "ta", "学员跟进校区划分": "os"}, "edu_sc_class_tea": map[string]string{"班级所在校区划分": "os", "班级客服划分": "ta"}, "stu_tea_class_schedule": map[string]string{"班级所在校区划分": "os", "班级客服划分": "ta"}, // ##财务 "order_form": map[string]string{"学员跟进校区划分": "os", "签单校区划分": "of_os", "学员销售划分": "ec", "分配tmk划分": "allot_tmk", "网络渠道划分": "tmk", "市场渠道划分": "mkt", "品牌渠道划分": "prod", "老推渠道划分": "old", "其他渠道划分": "other", "学员收集人划分": "load_user", "学员班型客服划分": "ta", "收集城市划分": "tmk_city", "资源收集校区划分": "load_sch"}, "order_tb_form": map[string]string{"学员跟进校区划分": "os", "签单校区划分": "of_os", "学员销售划分": "ec", "分配tmk划分": "allot_tmk", "网络渠道划分": "tmk", "市场渠道划分": "mkt", "品牌渠道划分": "prod", "老推渠道划分": "old", "其他渠道划分": "other", "学员收集人划分": "load_user", "学员班型客服划分": "ta", "收集城市划分": "tmk_city", "资源收集校区划分": "load_sch"}, "order_refund": map[string]string{"学员跟进校区划分": "os", "签单校区划分": "of_os", "学员销售划分": "ec", "学员收集人划分": "load_user", "班型分配班级客服划分": "ta"}, "fin_temp_storage_cz": map[string]string{"学员销售划分": "ec", "班型客服划分": "ta", "学员跟进校区划分": "os"}, "fn_student_account": map[string]string{"学员销售划分": "ec", "班型客服划分": "ta", "学员跟进校区划分": "os"}, "fin_stu_account_flow": map[string]string{"学员销售划分": "ec", "班型客服划分": "ta", "学员跟进校区划分": "os"}, "fin_invoice": map[string]string{"学员销售划分": "ec", "班型客服划分": "ta", "签单校区划分": "os"}, "fin_stu_integral_flow": map[string]string{"学员跟进校区划分": "os"}, "fin_yb_pay_flowing": map[string]string{"支付校区划分": "os"}, "fin_yeepay_reconciliations_record": map[string]string{"流水支付校区划分": "os"}, "base_class_manage": map[string]string{"班级客服划分": "ta", "班级校区划分": "os"}, "student": map[string]string{"学员跟进校区划分": "os", "学员销售划分": "ec", "学员收集人划分": "load_user", "班型分配客服划分": "ta"}, "order_student_gift": map[string]string{"学员跟进校区划分": "os", "班级客服划分": "ta"}, "edu_stu_ct_renew_log": map[string]string{"班型客服划分": "ta", "学员跟进校区划分": "os"}, "attendance_list": map[string]string{"班级校区划分": "os", "教师划分": "tea", "班型客服划分": "ta"}, "role_trial_lesson": map[string]string{"班级校区划分": "os", "教师划分": "tea", "试听课销售划分": "ec"}, "sys_user": map[string]string{"所属校区划分": "sys_os", "权限校区划分": "base_os"}, // "base_on_sale": map[string]string{"校区划分": "os"}, "stu_class_type_textbook": map[string]string{"学员跟进校区划分": "os"}, "edu_class_schedule_student": map[string]string{"班级客服划分": "ta", "学员跟进校区划分": "os"}, "edu_class_schedule_student_absenceList": map[string]string{"班型客服划分": "ta", "学员跟进校区划分": "os"}, "base_organ_school": map[string]string{"权限校区划分": "os"}, "ecs_stu": map[string]string{"班型客服划分": "ecs_ta", "班级状态修改权限": "manage"}, "encode": map[string]string{"导出联系方式加密": "export_stu_phone", "显示联系方式不加密": "list_stu_phone"}, "order_exchange_gift_jfsc": map[string]string{"积分兑换记录用户权限校区": "os"}, "task_pg": map[string]string{"批改作业权限": "os"}, "cmp_plan": map[string]string{"权限校区划分": "os", "班级客服划分": "ta"}, "eschool_stu_study_report": map[string]string{"班级所在校区划分": "os", "班级客服划分": "ta"}, "order_sch_achievement_divide": map[string]string{"所属校区划分": "base_os", "权限校区划分": "sys_os"}, "user_city": map[string]string{"所属校区划分": "base_os", "权限校区划分": "sys_os", "学员跟进校区划分": "os"}, "rl_hour_list": map[string]string{"权限校区划分": "os"}, "eschool_class_schedule_unit_pick": map[string]string{"学员跟进校区划分": "os", "班型客服划分": "ta"}, "teacher_ft": map[string]string{"权限校区划分": "os"}, "teacher_oa": map[string]string{"权限校区划分": "os"}, "fin_pay_flowing": map[string]string{"权限校区划分": "os"}, "fin_reconciliations_record": map[string]string{"权限校区划分": "os"}, // 收单的数据 "acquirer_student": map[string]string{"本人及所管兼职划分": "self_acquirer", "本人及所管兼职和专员划分": "self_acquirer_market", "所管兼职和市场划分": "acquirer_market_mgn"}, // 兼职人员的数据 "part_time_user": map[string]string{"所有数据": "all", "所管兼职": "self_part_time", "mk归属校区": "mk_sch"}, } type GetDataPermissionLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewGetDataPermissionLogic(ctx context.Context, svcCtx *svc.ServiceContext) *GetDataPermissionLogic { return &GetDataPermissionLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } // 获取数据权限 func (l *GetDataPermissionLogic) GetDataPermission(in *transform.DataPermissionReq) (*transform.DataPermissionRes, error) { rule_code, UserId, params := in.RuleCode, in.UserId, transform.DataPermissionRes{MapList: map[string]string{}} var channelMap = map[string]string{ "mkt": "1001", "tmk": "1002", "old": "1003", "other": "1005", "prod": "1004", } mainRoleCode := []string{"tmk", "mkt", "prod", "old", "other", "no_tmk"} if roleM, ok := roleMap[rule_code]; ok { var roleRules []model.SysDataPermissionDetail err := l.svcCtx.SqlConn.QueryRowsPartial(&roleRules, `SELECT sys_data_permission_detail.* FROM sys_data_permission, sys_data_permission_detail,sys_user_role WHERE sys_data_permission.id = sys_data_permission_detail.data_permission_id AND FIND_IN_SET(sys_user_role.role_id, sys_data_permission_detail.role_id) AND sys_user_role.del_flag = 0 AND sys_data_permission_detail.del_flag = 0 AND sys_data_permission.code = ? AND sys_user_role.user_id = ?`, rule_code, UserId) if err == nil && len(roleRules) > 0 { roles := funk.Get(roleRules, "Rule").([]string) roleStr := strings.Join(roles, ",") if rule_code == "one_level_channel" { params.MapList["role_channel"] = roleStr } else { var role_channel []string for _, code := range mainRoleCode { if strings.Index(fmt.Sprintf(",%v,", roleStr), fmt.Sprintf(",%v,", code)) >= 0 { if channel, ok := channelMap[code]; ok { role_channel = append(role_channel, channel) } else { params.MapList[fmt.Sprintf("role_%v", code)] = "true" } } } if len(role_channel) > 0 { params.MapList["role_channel"] = strings.Join(role_channel, ",") } // 并列权限,如果有了os的权限,其他的权限就不使用了,如果需要增加别的权限需要在此之前设置 if strings.Index(fmt.Sprintf(",%v,", roleStr), ",os,") >= 0 { params.MapList["role_os"] = "true" } else { for _, v := range roleM { if strings.Index(fmt.Sprintf(",%v,", roleStr), fmt.Sprintf(",%v,", v)) >= 0 { params.MapList[fmt.Sprintf("role_%v", v)] = "true" } } } } } } return ¶ms, nil }