作者 yangfu

Merge branch 'dev' of http://gitlab.fjmaimaimai.com/mmm-go/oppmg into dev

@@ -8,6 +8,7 @@ import ( @@ -8,6 +8,7 @@ import (
8 serveaudit "oppmg/services/audit" 8 serveaudit "oppmg/services/audit"
9 servecommon "oppmg/services/common" 9 servecommon "oppmg/services/common"
10 "strconv" 10 "strconv"
  11 + "time"
11 ) 12 )
12 13
13 type AuditController struct { 14 type AuditController struct {
@@ -27,6 +28,14 @@ func (c *AuditController) AuditList() { @@ -27,6 +28,14 @@ func (c *AuditController) AuditList() {
27 msg = protocol.BadRequestParam("1") 28 msg = protocol.BadRequestParam("1")
28 return 29 return
29 } 30 }
  31 + beginTime, err := time.Parse("2006-01-02", param.CreateTimeBeginS)
  32 + if err == nil && len(param.CreateTimeBeginS) > 0 {
  33 + param.CreateTimeBegin = beginTime.Unix()
  34 + }
  35 + endTime, err := time.Parse("2006-01-02", param.CreateTimeEndS)
  36 + if err == nil && len(param.CreateTimeEndS) > 0 {
  37 + param.CreateTimeEnd = endTime.Unix() + 864399
  38 + }
30 uid := c.GetUserId() 39 uid := c.GetUserId()
31 companyId := c.GetCompanyId() 40 companyId := c.GetCompanyId()
32 list, err := serveaudit.GetAuditList(param, companyId, uid) 41 list, err := serveaudit.GetAuditList(param, companyId, uid)
@@ -83,3 +92,33 @@ func (c *AuditController) AuditInfo() { @@ -83,3 +92,33 @@ func (c *AuditController) AuditInfo() {
83 msg = protocol.NewReturnResponse(list, err) 92 msg = protocol.NewReturnResponse(list, err)
84 return 93 return
85 } 94 }
  95 +
  96 +//AllowForbidAudit 开启、关闭 机会
  97 +//@router /v1/audit/allow_forbid
  98 +func (c *AuditController) AllowForbidAudit() {
  99 + var msg *protocol.ResponseMessage
  100 + defer func() {
  101 + c.ResposeJson(msg)
  102 + }()
  103 + type Parameter struct {
  104 + ChanceId string `json:"chance_id"`
  105 + Status int `json:"status"` //[1:开启机会][2:关闭机会]
  106 + }
  107 + var param Parameter
  108 + if err := json.Unmarshal(c.Ctx.Input.RequestBody, &param); err != nil {
  109 + log.Error("json 解析失败", err)
  110 + msg = protocol.BadRequestParam("1")
  111 + return
  112 + }
  113 + chanceid, _ := strconv.ParseInt(param.ChanceId, 10, 64)
  114 + companyId := c.GetCompanyId()
  115 + var err error
  116 + switch param.Status {
  117 + case 1:
  118 + err = serveaudit.AllowChanceEnableStatus(chanceid, companyId)
  119 + case 2:
  120 + err = serveaudit.ForbidChanceEnableStatus(chanceid, companyId)
  121 + }
  122 + msg = protocol.NewReturnResponse(nil, err)
  123 + return
  124 +}
@@ -28,8 +28,11 @@ func (this *BaseController) Prepare() { @@ -28,8 +28,11 @@ func (this *BaseController) Prepare() {
28 this.Ctx.WriteString("") 28 this.Ctx.WriteString("")
29 return 29 return
30 } 30 }
31 - p := this.Ctx.Input.GetData("RouterPattern")  
32 - fmt.Println("====>r:", p) 31 + // p := this.Ctx.Input.GetData("RouterPattern")
  32 + // userid := this.GetUserId()
  33 + // companyid := this.GetCompanyId()
  34 + //权限校验
  35 +
33 } 36 }
34 37
35 func (this *BaseController) GetAppHead() (appHead protocol.BaseHeader) { 38 func (this *BaseController) GetAppHead() (appHead protocol.BaseHeader) {
@@ -117,6 +117,3 @@ var LogRouter = func(ctx *context.Context) { @@ -117,6 +117,3 @@ var LogRouter = func(ctx *context.Context) {
117 } 117 }
118 118
119 //CheckOperation 检查操作权限,beforeController 119 //CheckOperation 检查操作权限,beforeController
120 -var CheckOperation = func(ctx *context.Context) {  
121 -  
122 -}  
@@ -71,13 +71,13 @@ var ChanceReviewStatusMap = map[int]string{ @@ -71,13 +71,13 @@ var ChanceReviewStatusMap = map[int]string{
71 71
72 //有效状态 0:无效 1:有效 72 //有效状态 0:无效 1:有效
73 const ( 73 const (
74 - ChanceEnableStatusYes int = 1  
75 - ChanceEnableStatusNo int = 0 74 + ChanceEnableStatusYes int8 = 1
  75 + ChanceEnableStatusNo int8 = 0
76 ) 76 )
77 77
78 -var ChanceEnableStatusMap = map[int]string{  
79 - 0: "无效",  
80 - 1: "有效", 78 +var ChanceEnableStatusMap = map[int8]string{
  79 + ChanceEnableStatusNo: "无效",
  80 + ChanceEnableStatusYes: "有效",
81 } 81 }
82 82
83 // AddChance insert a new Chance into database and returns 83 // AddChance insert a new Chance into database and returns
@@ -236,9 +236,12 @@ type RequestAuditList struct { @@ -236,9 +236,12 @@ type RequestAuditList struct {
236 ReviewStatus int `json:"review_status"` // 236 ReviewStatus int `json:"review_status"` //
237 EnableStatus int `json:"enable_status"` //关闭状态 237 EnableStatus int `json:"enable_status"` //关闭状态
238 DepartmentID int `json:"department_id"` //提交部门 238 DepartmentID int `json:"department_id"` //提交部门
239 - CreateTimeBegin int `json:"create_time_begin"` //  
240 - CreateTimeEnd int `json:"create_time_end"` // 239 + CreateTimeBegin int64 `json:"-"` //
  240 + CreateTimeBeginS string `json:"create_time_begin"`
  241 + CreateTimeEnd int64 `json:"-"` //
  242 + CreateTimeEndS string `json:"create_time_end"` //
241 Code string `json:"code"` //机会编码 243 Code string `json:"code"` //机会编码
  244 + UserName string `json:"user_name"` //提交人姓名
242 } 245 }
243 246
244 type ResponseAuditList struct { 247 type ResponseAuditList struct {
@@ -258,7 +261,7 @@ type RspAuditList struct { @@ -258,7 +261,7 @@ type RspAuditList struct {
258 PublishStatusName string `json:"publish_status_name"` // 261 PublishStatusName string `json:"publish_status_name"` //
259 ReviewStatus int `json:"review_status"` //审批状态 262 ReviewStatus int `json:"review_status"` //审批状态
260 ReviewStatusName string `json:"review_status_name"` 263 ReviewStatusName string `json:"review_status_name"`
261 - EnableStatus int `json:"enable_status"` 264 + EnableStatus int8 `json:"enable_status"`
262 EnableStatusName string `json:"enable_status_name"` 265 EnableStatusName string `json:"enable_status_name"`
263 } 266 }
264 267
@@ -101,6 +101,7 @@ func init() { @@ -101,6 +101,7 @@ func init() {
101 beego.NSRouter("/list", &controllers.AuditController{}, "post:AuditList"), 101 beego.NSRouter("/list", &controllers.AuditController{}, "post:AuditList"),
102 beego.NSRouter("/list/before", &controllers.AuditController{}, "post:AuditListBefore"), 102 beego.NSRouter("/list/before", &controllers.AuditController{}, "post:AuditListBefore"),
103 beego.NSRouter("/info", &controllers.AuditController{}, "post:AuditInfo"), 103 beego.NSRouter("/info", &controllers.AuditController{}, "post:AuditInfo"),
  104 + beego.NSRouter("/allow_forbid", &controllers.AuditController{}, "post:AllowForbidAudit"),
104 ), 105 ),
105 ) 106 )
106 107
@@ -20,11 +20,10 @@ type SqlData struct { @@ -20,11 +20,10 @@ type SqlData struct {
20 PublishStatus int `orm:"column(publish_status)"` 20 PublishStatus int `orm:"column(publish_status)"`
21 CreateAt time.Time `orm:"column(create_at);type(timestamp)"` 21 CreateAt time.Time `orm:"column(create_at);type(timestamp)"`
22 ReviewStatus int `orm:"column(review_status)"` 22 ReviewStatus int `orm:"column(review_status)"`
23 - EnableStatus int `orm:"column(enable_status)"` 23 + EnableStatus int8 `orm:"column(enable_status)"`
24 DiscoveryScore string `orm:"column(discovery_score)"` 24 DiscoveryScore string `orm:"column(discovery_score)"`
25 CommentTotal string `orm:"column(comment_total)"` 25 CommentTotal string `orm:"column(comment_total)"`
26 Code string `orm:"column(code)"` 26 Code string `orm:"column(code)"`
27 - TemplateName string `orm:"column(template_name)"`  
28 } 27 }
29 28
30 func GetAuditList(param protocol.RequestAuditList, companyid int64, userid int64) (protocol.ResponseAuditList, error) { 29 func GetAuditList(param protocol.RequestAuditList, companyid int64, userid int64) (protocol.ResponseAuditList, error) {
@@ -46,13 +45,13 @@ func GetAuditList(param protocol.RequestAuditList, companyid int64, userid int64 @@ -46,13 +45,13 @@ func GetAuditList(param protocol.RequestAuditList, companyid int64, userid int64
46 } 45 }
47 datasql.WriteString(`SELECT a.id,a.user_id,a.department_id,a.audit_template_id,a.chance_type_id 46 datasql.WriteString(`SELECT a.id,a.user_id,a.department_id,a.audit_template_id,a.chance_type_id
48 ,a.publish_status,a.create_at,a.review_status,a.enable_status 47 ,a.publish_status,a.create_at,a.review_status,a.enable_status
49 - ,a.discovery_score,a.comment_total,b.name AS template_name ,b.code 48 + ,a.discovery_score,a.comment_total ,a.code,d.nick_name
50 FROM chance AS a 49 FROM chance AS a
51 - JOIN audit_template AS b on a.audit_template_id = b.id 50 + JOIN user_company AS c ON c.id = a.user_id
  51 + JOIN user AS d ON c.user_id = d.id
52 where a.company_id=? `) 52 where a.company_id=? `)
53 53
54 countsql.WriteString(`SELECT count(*) FROM chance as a 54 countsql.WriteString(`SELECT count(*) FROM chance as a
55 - JOIN audit_template AS b on a.audit_template_id = b.id  
56 where a.company_id=? `) 55 where a.company_id=? `)
57 cond = append(cond, companyid) 56 cond = append(cond, companyid)
58 if param.ChanceTypeId > 0 { 57 if param.ChanceTypeId > 0 {
@@ -86,15 +85,27 @@ func GetAuditList(param protocol.RequestAuditList, companyid int64, userid int64 @@ -86,15 +85,27 @@ func GetAuditList(param protocol.RequestAuditList, companyid int64, userid int64
86 datasql.WriteString(s) 85 datasql.WriteString(s)
87 countsql.WriteString(s) 86 countsql.WriteString(s)
88 } 87 }
89 - if param.CreateTimeBegin > 0 && param.CreateTimeEnd > 0 {  
90 - cond = append(cond, param.CreateTimeBegin, param.CreateTimeEnd)  
91 - s := ` AND (UNIX_TIMESTAMP(a.create_at) BETWEEN ? AND ? ) ` 88 + if param.CreateTimeBegin > 0 {
  89 + cond = append(cond, param.CreateTimeBegin)
  90 + s := ` AND UNIX_TIMESTAMP(a.create_at)>=? `
  91 + datasql.WriteString(s)
  92 + countsql.WriteString(s)
  93 + }
  94 + if param.CreateTimeEnd > 0 {
  95 + cond = append(cond, param.CreateTimeEnd)
  96 + s := ` AND UNIX_TIMESTAMP(a.create_at)<=? `
92 datasql.WriteString(s) 97 datasql.WriteString(s)
93 countsql.WriteString(s) 98 countsql.WriteString(s)
94 } 99 }
95 if len(param.Code) > 0 { 100 if len(param.Code) > 0 {
96 - cond = append(cond, param.Code)  
97 - s := ` And b.code=? ` 101 + cond = append(cond, "%"+param.Code+"%")
  102 + s := ` And a.code like ? `
  103 + datasql.WriteString(s)
  104 + countsql.WriteString(s)
  105 + }
  106 + if len(param.UserName) > 0 {
  107 + cond = append(cond, "%"+param.UserName+"%")
  108 + s := ` And d.nick_name like ? `
98 datasql.WriteString(s) 109 datasql.WriteString(s)
99 countsql.WriteString(s) 110 countsql.WriteString(s)
100 } 111 }
@@ -124,7 +135,6 @@ func GetAuditList(param protocol.RequestAuditList, companyid int64, userid int64 @@ -124,7 +135,6 @@ func GetAuditList(param protocol.RequestAuditList, companyid int64, userid int64
124 ReviewStatus: v.ReviewStatus, 135 ReviewStatus: v.ReviewStatus,
125 ReviewStatusName: models.ChanceReviewStatusMap[v.ReviewStatus], 136 ReviewStatusName: models.ChanceReviewStatusMap[v.ReviewStatus],
126 Code: v.Code, 137 Code: v.Code,
127 - TemplateName: v.TemplateName,  
128 } 138 }
129 139
130 if t < 0 { 140 if t < 0 {
@@ -141,6 +151,9 @@ func GetAuditList(param protocol.RequestAuditList, companyid int64, userid int64 @@ -141,6 +151,9 @@ func GetAuditList(param protocol.RequestAuditList, companyid int64, userid int64
141 if ct, err := models.GetChanceTypeById(v.ChanceTypeId); err == nil { 151 if ct, err := models.GetChanceTypeById(v.ChanceTypeId); err == nil {
142 item.ChanceType = ct.Name 152 item.ChanceType = ct.Name
143 } 153 }
  154 + if tp, err := models.GetAuditTemplateById(v.AuditTemplateId); err == nil {
  155 + item.TemplateName = tp.Name
  156 + }
144 returnData.List = append(returnData.List, item) 157 returnData.List = append(returnData.List, item)
145 158
146 } 159 }
@@ -261,3 +274,51 @@ func getAuditFlowLog(chanceid int64) ([]protocol.ChanceFlowLog, error) { @@ -261,3 +274,51 @@ func getAuditFlowLog(chanceid int64) ([]protocol.ChanceFlowLog, error) {
261 err = utils.ExecuteQueryAll(&flowLogs, datasql, chanceid) 274 err = utils.ExecuteQueryAll(&flowLogs, datasql, chanceid)
262 return flowLogs, err 275 return flowLogs, err
263 } 276 }
  277 +
  278 +func AllowChanceEnableStatus(chanceid int64, companyid int64) error {
  279 + var (
  280 + err error
  281 + chanceinfo *models.Chance
  282 + )
  283 + chanceinfo, err = models.GetChanceById(chanceid)
  284 + if err != nil {
  285 + log.Error("获取机会数据失败:%s", err)
  286 + return protocol.NewErrWithMessage("1")
  287 + }
  288 + if chanceinfo.CompanyId != companyid {
  289 + log.Error("机会的公司不匹配")
  290 + return protocol.NewErrWithMessage("1")
  291 + }
  292 + chanceinfo.EnableStatus = models.ChanceEnableStatusYes
  293 + chanceinfo.UpdateAt = time.Now()
  294 + err = models.UpdateChanceById(chanceinfo, []string{"EnableStatus", "UpdateAt"})
  295 + if err != nil {
  296 + log.Error("更新机会数据失败:%s", err)
  297 + return protocol.NewErrWithMessage("1")
  298 + }
  299 + return nil
  300 +}
  301 +
  302 +func ForbidChanceEnableStatus(chanceid int64, companyid int64) error {
  303 + var (
  304 + err error
  305 + chanceinfo *models.Chance
  306 + )
  307 + chanceinfo, err = models.GetChanceById(chanceid)
  308 + if err != nil {
  309 + log.Error("获取机会数据失败:%s", err)
  310 + return protocol.NewErrWithMessage("1")
  311 + }
  312 + if chanceinfo.CompanyId != companyid {
  313 + log.Error("机会的公司不匹配")
  314 + return protocol.NewErrWithMessage("1")
  315 + }
  316 + chanceinfo.EnableStatus = models.ChanceEnableStatusNo
  317 + chanceinfo.UpdateAt = time.Now()
  318 + err = models.UpdateChanceById(chanceinfo, []string{"EnableStatus", "UpdateAt"})
  319 + if err != nil {
  320 + log.Error("更新机会数据失败:%s", err)
  321 + return protocol.NewErrWithMessage("1")
  322 + }
  323 + return nil
  324 +}
@@ -8,6 +8,7 @@ import ( @@ -8,6 +8,7 @@ import (
8 "oppmg/common/log" 8 "oppmg/common/log"
9 "oppmg/models" 9 "oppmg/models"
10 "oppmg/protocol" 10 "oppmg/protocol"
  11 + serverbac "oppmg/services/rbac"
11 "oppmg/services/ucenter" 12 "oppmg/services/ucenter"
12 "oppmg/storage/redisdata" 13 "oppmg/storage/redisdata"
13 "oppmg/utils" 14 "oppmg/utils"
@@ -237,6 +238,8 @@ func LoginAuthByUCenter(account, password string) (protocol.LoginAuthToken, erro @@ -237,6 +238,8 @@ func LoginAuthByUCenter(account, password string) (protocol.LoginAuthToken, erro
237 if err != nil { 238 if err != nil {
238 log.Error("更新用户数据失败:%s", err) 239 log.Error("更新用户数据失败:%s", err)
239 } 240 }
  241 +
  242 + InitPermission(usercompanyid)
240 return logintoken, err 243 return logintoken, err
241 } 244 }
242 245
@@ -371,14 +374,21 @@ func GetUserHasMenu(userid, companyid int64) ([]protocol.ResponseUserHasMenu, er @@ -371,14 +374,21 @@ func GetUserHasMenu(userid, companyid int64) ([]protocol.ResponseUserHasMenu, er
371 log.Error("EXECUTE SQL err:%s", err) 374 log.Error("EXECUTE SQL err:%s", err)
372 return nil, protocol.NewErrWithMessage("1") 375 return nil, protocol.NewErrWithMessage("1")
373 } 376 }
  377 + paramMap := map[int64]bool{}
374 for i := range list { 378 for i := range list {
375 for _, v := range menuids { 379 for _, v := range menuids {
376 if list[i].Id == v { 380 if list[i].Id == v {
377 list[i].StatusYes() 381 list[i].StatusYes()
  382 + paramMap[list[i].ParentId] = true
378 break 383 break
379 } 384 }
380 } 385 }
381 } 386 }
  387 + for i := range list {
  388 + if _, ok := paramMap[list[i].Id]; ok {
  389 + list[i].StatusYes()
  390 + }
  391 + }
382 return list, nil 392 return list, nil
383 } 393 }
384 394
@@ -467,6 +477,7 @@ func LoginAuthBySmsCode(phone string, code string) (protocol.LoginAuthToken, err @@ -467,6 +477,7 @@ func LoginAuthBySmsCode(phone string, code string) (protocol.LoginAuthToken, err
467 if err != nil { 477 if err != nil {
468 log.Error("更新用户数据失败:%s", err) 478 log.Error("更新用户数据失败:%s", err)
469 } 479 }
  480 + InitPermission(usercompanyid)
470 return logintoken, err 481 return logintoken, err
471 } 482 }
472 483
@@ -495,3 +506,44 @@ func SmsCodeCheck(phone string, code string) error { @@ -495,3 +506,44 @@ func SmsCodeCheck(phone string, code string) error {
495 redisdata.SetCaptchAuth(phone, resp.Data.CaptchaCertificate) 506 redisdata.SetCaptchAuth(phone, resp.Data.CaptchaCertificate)
496 return nil 507 return nil
497 } 508 }
  509 +
  510 +//InitPermission 登录时权限初始化
  511 +func InitPermission(usercompanyid int64) error {
  512 + var (
  513 + err error
  514 + permissionMap map[string]serverbac.PermissionOptionObject
  515 + )
  516 + permissionMap, err = serverbac.GetUserPermission(usercompanyid)
  517 + if err != nil {
  518 + log.Error("获取用户的权限失败")
  519 + return err
  520 + }
  521 + err = redisdata.SetUserPermission(permissionMap, usercompanyid)
  522 + if err != nil {
  523 + log.Error("缓存用户权限失败:%s", err)
  524 + }
  525 + return nil
  526 +}
  527 +
  528 +func ValidUserPermission(urlPath string, userid int64, companyid int64) bool {
  529 + var (
  530 + err error
  531 + permissionbase serverbac.PermissionBase
  532 + ok bool = false
  533 + permissionObj serverbac.PermissionOptionObject
  534 + )
  535 + permissionbase, ok = serverbac.RouterPermission[urlPath]
  536 + if !ok {
  537 + return true
  538 + }
  539 + permissionObj, err = redisdata.GetUserPermission(userid, permissionbase.CodeName)
  540 + if err != nil {
  541 + log.Error("未取到权限数据")
  542 + return false
  543 + }
  544 + ok = permissionObj.GetValidFunc(permissionbase.ActionName)
  545 + if ok {
  546 + return true
  547 + }
  548 + return false
  549 +}
@@ -25,7 +25,7 @@ const ( @@ -25,7 +25,7 @@ const (
25 type PermissionOptionObject interface { 25 type PermissionOptionObject interface {
26 // StringUnmarshal(string) error 26 // StringUnmarshal(string) error
27 // ObjectMarshal() string 27 // ObjectMarshal() string
28 - GetValidFunc(string) func(UserObject) bool 28 + GetValidFunc(string) bool
29 MergeObject(string) error 29 MergeObject(string) error
30 } 30 }
31 31
@@ -35,7 +35,7 @@ type PermissionBase struct { @@ -35,7 +35,7 @@ type PermissionBase struct {
35 ActionName string 35 ActionName string
36 } 36 }
37 37
38 -var routerPermission = map[string]PermissionBase{ 38 +var RouterPermission = map[string]PermissionBase{
39 "/v1/department/list": PermissionBase{CodeName: M_ENTERPRISE_ORGANIZATION, ActionName: "default"}, 39 "/v1/department/list": PermissionBase{CodeName: M_ENTERPRISE_ORGANIZATION, ActionName: "default"},
40 "/v1/department/add": PermissionBase{CodeName: M_ENTERPRISE_ORGANIZATION, ActionName: "default"}, 40 "/v1/department/add": PermissionBase{CodeName: M_ENTERPRISE_ORGANIZATION, ActionName: "default"},
41 "/v1/department/edit": PermissionBase{CodeName: M_ENTERPRISE_ORGANIZATION, ActionName: "default"}, 41 "/v1/department/edit": PermissionBase{CodeName: M_ENTERPRISE_ORGANIZATION, ActionName: "default"},
@@ -133,7 +133,7 @@ func GetUserPermission(userCompanyid int64) (map[string]PermissionOptionObject, @@ -133,7 +133,7 @@ func GetUserPermission(userCompanyid int64) (map[string]PermissionOptionObject,
133 if fn, ok := CodePermissionObject[v.Code]; ok { 133 if fn, ok := CodePermissionObject[v.Code]; ok {
134 obj := fn() 134 obj := fn()
135 if err = json.Unmarshal([]byte(v.Opption), obj); err != nil { 135 if err = json.Unmarshal([]byte(v.Opption), obj); err != nil {
136 - log.Debug("解析权限配置option 失败%s", err) 136 + log.Debug("解析权限配置option:%s %s失败%s", v.Code, v.Opption, err)
137 } 137 }
138 objMap[v.Code] = obj 138 objMap[v.Code] = obj
139 } else { 139 } else {
@@ -25,7 +25,7 @@ func NewPermissionOptionBase() PermissionOptionObject { @@ -25,7 +25,7 @@ func NewPermissionOptionBase() PermissionOptionObject {
25 } 25 }
26 } 26 }
27 27
28 -func (p *PermissionOptionBase) ValidDefault(obj UserObject) bool { 28 +func (p *PermissionOptionBase) ValidDefault() bool {
29 if p.Check == 1 { 29 if p.Check == 1 {
30 return true 30 return true
31 } 31 }
@@ -33,14 +33,15 @@ func (p *PermissionOptionBase) ValidDefault(obj UserObject) bool { @@ -33,14 +33,15 @@ func (p *PermissionOptionBase) ValidDefault(obj UserObject) bool {
33 } 33 }
34 34
35 //GetValidFunc PermissionOptionBase 接口实现 35 //GetValidFunc PermissionOptionBase 接口实现
36 -func (p *PermissionOptionBase) GetValidFunc(k string) func(UserObject) bool {  
37 - m := map[string]func(UserObject) bool{ 36 +func (p *PermissionOptionBase) GetValidFunc(k string) bool {
  37 + m := map[string]func() bool{
38 "default": p.ValidDefault, 38 "default": p.ValidDefault,
39 } 39 }
40 - if _, ok := m[k]; ok {  
41 - return m[k] 40 + if fn, ok := m[k]; ok {
  41 + b := fn()
  42 + return b
42 } 43 }
43 - return nil 44 + return false
44 } 45 }
45 46
46 func (p *PermissionOptionBase) MergeObject(jsonString string) error { 47 func (p *PermissionOptionBase) MergeObject(jsonString string) error {
@@ -94,7 +95,7 @@ type CheckOpp struct { @@ -94,7 +95,7 @@ type CheckOpp struct {
94 //OptionOpportunity 机会管理 高级权限设置 95 //OptionOpportunity 机会管理 高级权限设置
95 type OptionOpportunity struct { 96 type OptionOpportunity struct {
96 Check int `json:"check"` 97 Check int `json:"check"`
97 - CheckMap map[int]int `json:"-"` 98 + CheckMap map[int]int `json:"check_map,omitempty"`
98 CheckOption CheckOpp `json:"check_option"` 99 CheckOption CheckOpp `json:"check_option"`
99 EditSorce int `json:"edit_sorce"` 100 EditSorce int `json:"edit_sorce"`
100 EditPublicStatus int `json:"edit_public_status"` 101 EditPublicStatus int `json:"edit_public_status"`
@@ -131,14 +132,15 @@ func NewOptionOpportunity() PermissionOptionObject { @@ -131,14 +132,15 @@ func NewOptionOpportunity() PermissionOptionObject {
131 } 132 }
132 133
133 //GetValidFunc PermissionOptionBase 接口实现 134 //GetValidFunc PermissionOptionBase 接口实现
134 -func (p *OptionOpportunity) GetValidFunc(k string) func(UserObject) bool {  
135 - m := map[string]func(UserObject) bool{ 135 +func (p *OptionOpportunity) GetValidFunc(k string) bool {
  136 + m := map[string]func() bool{
136 "check": p.ValidCheck, 137 "check": p.ValidCheck,
137 } 138 }
138 - if _, ok := m[k]; ok {  
139 - return m[k] 139 + if fn, ok := m[k]; ok {
  140 + b := fn()
  141 + return b
140 } 142 }
141 - return nil 143 + return false
142 } 144 }
143 145
144 //MergeObject PermissionOptionBase 接口实现 146 //MergeObject PermissionOptionBase 接口实现
@@ -195,20 +197,20 @@ func (p *OptionOpportunity) MergeObject(jsonString string) error { @@ -195,20 +197,20 @@ func (p *OptionOpportunity) MergeObject(jsonString string) error {
195 return nil 197 return nil
196 } 198 }
197 199
198 -func (p *OptionOpportunity) ValidCheck(obj UserObject) bool { 200 +func (p *OptionOpportunity) ValidCheck() bool {
199 if p.Check > 0 { 201 if p.Check > 0 {
200 return true 202 return true
201 } 203 }
202 return false 204 return false
203 } 205 }
204 206
205 -func (p *OptionOpportunity) ValidEditSorce(obj UserObject) bool { 207 +func (p *OptionOpportunity) ValidEditSorce() bool {
206 if p.EditSorce > 0 { 208 if p.EditSorce > 0 {
207 return true 209 return true
208 } 210 }
209 return false 211 return false
210 } 212 }
211 -func (p *OptionOpportunity) ValidEditPublicStatus(obj UserObject) bool { 213 +func (p *OptionOpportunity) ValidEditPublicStatus() bool {
212 if p.EditPublicStatus > 0 { 214 if p.EditPublicStatus > 0 {
213 return true 215 return true
214 } 216 }
@@ -9,6 +9,7 @@ const ( @@ -9,6 +9,7 @@ const (
9 KEY_PREFIX string = "oppmg_" //统一前缀 9 KEY_PREFIX string = "oppmg_" //统一前缀
10 KEY_USER_TOKEN string = "token" //登录token存储 10 KEY_USER_TOKEN string = "token" //登录token存储
11 KEY_CAPTCHA_AUTH string = "captch_auth" //统一用户中心返回的验证码凭证 11 KEY_CAPTCHA_AUTH string = "captch_auth" //统一用户中心返回的验证码凭证
  12 + KEY_USER_PERMISSION string = "user_permission" //用户操作权限
12 ) 13 )
13 14
14 const ( 15 const (
@@ -31,3 +32,8 @@ func GetKeyCaptchAuth(phone string) string { @@ -31,3 +32,8 @@ func GetKeyCaptchAuth(phone string) string {
31 key := fmt.Sprintf("%s%s:%s", KEY_PREFIX, KEY_CAPTCHA_AUTH, phone) 32 key := fmt.Sprintf("%s%s:%s", KEY_PREFIX, KEY_CAPTCHA_AUTH, phone)
32 return key 33 return key
33 } 34 }
  35 +
  36 +func GetKeyUserPermission(userid int64) string {
  37 + key := fmt.Sprintf("%s%s:%d", KEY_PREFIX, KEY_USER_PERMISSION, userid)
  38 + return key
  39 +}
@@ -2,10 +2,13 @@ package redisdata @@ -2,10 +2,13 @@ package redisdata
2 2
3 import ( 3 import (
4 "encoding/json" 4 "encoding/json"
  5 + "errors"
5 "oppmg/common/log" 6 "oppmg/common/log"
6 "oppmg/common/redis" 7 "oppmg/common/redis"
7 "oppmg/protocol" 8 "oppmg/protocol"
  9 + "oppmg/services/rbac"
8 "strings" 10 "strings"
  11 + "time"
9 ) 12 )
10 13
11 func SetLoginToken(param protocol.LoginAuthToken, userid int64, companyid int64) error { 14 func SetLoginToken(param protocol.LoginAuthToken, userid int64, companyid int64) error {
@@ -96,3 +99,38 @@ func GetCaptchAuth(phone string) (string, error) { @@ -96,3 +99,38 @@ func GetCaptchAuth(phone string) (string, error) {
96 r, err := client.Get(key).Result() 99 r, err := client.Get(key).Result()
97 return r, err 100 return r, err
98 } 101 }
  102 +
  103 +func SetUserPermission(objMap map[string]rbac.PermissionOptionObject, usercompanyid int64) error {
  104 + key := GetKeyUserPermission(usercompanyid)
  105 + client := redis.GetRedis()
  106 + for k := range objMap {
  107 + s, err := json.Marshal(objMap[k])
  108 + if err != nil {
  109 + log.Error("解析错误:%s", err)
  110 + continue
  111 + }
  112 + err = client.HSet(key, k, s).Err()
  113 + if err != nil {
  114 + log.Error("设置权限缓存失败:%s", err)
  115 + }
  116 + }
  117 + client.Expire(key, 60*60*6*time.Second)
  118 + return nil
  119 +}
  120 +
  121 +func GetUserPermission(userid int64, field string) (rbac.PermissionOptionObject, error) {
  122 + key := GetKeyUserPermission(userid)
  123 + client := redis.GetRedis()
  124 + str, err := client.HGet(key, field).Result()
  125 + if err != nil {
  126 + return nil, err
  127 + }
  128 + var permissionObj rbac.PermissionOptionObject
  129 + fn, ok := rbac.CodePermissionObject[field]
  130 + if !ok {
  131 + return nil, errors.New("cannot get object")
  132 + }
  133 + permissionObj = fn()
  134 + err = json.Unmarshal([]byte(str), permissionObj)
  135 + return permissionObj, err
  136 +}