wangchuanjin 2 år sedan
förälder
incheckning
c2c408c9bd
6 ändrade filer med 81 tillägg och 81 borttagningar
  1. 1 1
      core/proxy/middleware/filterFuncs.go
  2. 0 78
      core/proxy/rpc/checkPower.go
  3. 69 0
      core/proxy/rpc/powerCheckCenter.go
  4. 5 0
      etc/config.yaml
  5. 2 1
      go.mod
  6. 4 1
      go.sum

+ 1 - 1
core/proxy/middleware/filterFuncs.go

@@ -49,7 +49,7 @@ func filterBefore(r *ghttp.Request) error {
 	}
 	//老剑鱼用户身份判断
 	if powerErr == nil && rule.PowerType > 0 {
-		powerErr = rpc.CheckUserPower(ctx.Sess.UserId, ctx.Sess.Phone, rule.PowerType)
+		powerErr = rpc.CheckUserPower(rule.PowerType, rule.AppId, ctx.Sess.MgoUserId, ctx.Sess.NewUid, ctx.Sess.AccountId, ctx.Sess.EntId, ctx.Sess.PositionType, ctx.Sess.PositionId)
 	}
 	if rule.NoPowerUrl == "" && powerErr != nil {
 		return powerErr

+ 0 - 78
core/proxy/rpc/checkPower.go

@@ -1,78 +0,0 @@
-package rpc
-
-import (
-	"encoding/json"
-	"fmt"
-
-	"app.yhyue.com/moapp/jybase/redis"
-	"bp.jydev.jianyu360.cn/BaseService/gateway/common/db"
-	. "bp.jydev.jianyu360.cn/BaseService/gateway/common/gatecode"
-	"github.com/gogf/gf/v2/util/gconv"
-)
-
-var PowerCacheDb = "other"
-var PowerCacheKey = "bigmember_power_3_%s"
-
-//大会员状态redis缓存
-type BigVipBaseMsg struct {
-	Status         int `json:"status"`          //大会员状态
-	VipStatus      int `json:"vip_status"`      //超级订阅状态
-	EntnicheStatus int `json:"entniche_status"` //商机管理状态
-}
-
-/// CheckUserPower 校验账户是否有对应权益
-// userId 老用户id (mongodb里的objectid)
-// power_type 权益判断
-func CheckUserPower(userid, phone string, power_type int) error {
-	cacheKey := fmt.Sprintf(PowerCacheKey, userid)
-	userPower := BigVipBaseMsg{}
-	//判断权益
-	if bytes, err := redis.GetBytes(PowerCacheDb, cacheKey); err == nil && bytes != nil {
-		if err := json.Unmarshal(*bytes, &userPower); err != nil {
-			return NewErrorWithCode(GLOBAL_ERR_RESOURCE_PORWE_FAIL, fmt.Sprintf("校验异常"))
-		}
-	} else {
-		//未找到缓存
-		data, ok := db.MgoJy.FindById("user", userid, `{"i_member_status":1,"i_vip_status":1}`)
-		if ok && *data != nil && len(*data) > 0 {
-			userPower.Status = gconv.Int((*data)["i_member_status"])
-			userPower.VipStatus = gconv.Int((*data)["i_vip_status"])
-		}
-	}
-	userPower.EntnicheStatus = 0
-	if count := db.JyMysql.CountBySql(`SELECT count(1) FROM entniche_user u LEFT JOIN entniche_info i
-								ON u.ent_id=i.id
-								WHERE u.phone=? and u.power=1 and i.status=1`, phone); count > 0 {
-		userPower.EntnicheStatus = 1
-	}
-	/*
-		权益判断方式、0走资源中台
-		1前置代理判断,是否是付费用户
-		2前置代理判断,是否是超级订阅
-		3前置代理判断,是否是大会员
-		4前置代理判断,是否是商机管理
-	*/
-	switch power_type {
-	case 1:
-		if userPower.VipStatus <= 0 && userPower.Status <= 0 && userPower.EntnicheStatus <= 0 {
-			return NewErrorWithCode(GLOBAL_ERR_NOPOWER, fmt.Sprintf("该用户非付费用户"))
-		}
-	case 2:
-		if userPower.VipStatus <= 0 {
-			return NewErrorWithCode(GLOBAL_ERR_NOPOWER, fmt.Sprintf("该用户非超级订阅用户"))
-		}
-	case 3:
-		if userPower.Status <= 0 {
-			return NewErrorWithCode(GLOBAL_ERR_NOPOWER, fmt.Sprintf("该用户非大会员用户"))
-		}
-	case 4:
-		if userPower.EntnicheStatus <= 0 {
-			return NewErrorWithCode(GLOBAL_ERR_NOPOWER, fmt.Sprintf("该用户非商机管理用户"))
-		}
-	case 22: //临时加大会员专家版、商机版判断
-		if !(userPower.Status == 1 || userPower.Status == 2 || userPower.Status == 6 || userPower.Status == 7) {
-			return NewErrorWithCode(GLOBAL_ERR_NOPOWER, fmt.Sprintf("该用户非大会员专家版、商机版用户"))
-		}
-	}
-	return nil
-}

+ 69 - 0
core/proxy/rpc/powerCheckCenter.go

@@ -0,0 +1,69 @@
+package rpc
+
+import (
+	"fmt"
+
+	. "bp.jydev.jianyu360.cn/BaseService/gateway/common/gatecode"
+	"bp.jydev.jianyu360.cn/BaseService/powerCheckCenter/rpc/pb"
+	"bp.jydev.jianyu360.cn/BaseService/powerCheckCenter/rpc/powercheck"
+	"github.com/gogf/gf/v2/os/gcfg"
+	"github.com/gogf/gf/v2/os/gctx"
+	"github.com/zeromicro/go-zero/core/discov"
+	"github.com/zeromicro/go-zero/zrpc"
+)
+
+var PowerCheckCenterRpc powercheck.PowerCheck
+
+func initPowerCheckCenterRpcRpc() {
+	PowerCheckCenterRpc = powercheck.NewPowerCheck(zrpc.MustNewClient(zrpc.RpcClientConf{
+		Etcd: discov.EtcdConf{
+			Key:   gcfg.Instance().MustGet(gctx.New(), "etcd.baseserver.powerCheckCenter.key", nil).String(),
+			Hosts: gcfg.Instance().MustGet(gctx.New(), "etcd.baseserver.powerCheckCenter.address", nil).Strings(),
+		},
+	}))
+}
+
+func CheckUserPower(power_type int, appid, userId string, baseUserId, accountId, entId, positionType, positionId int64) error {
+	res, err := PowerCheckCenterRpc.Check(gctx.New(), &pb.CheckReq{
+		Appid:        appid,
+		Userid:       userId,
+		BaseUserId:   baseUserId,
+		AccountId:    accountId,
+		EntId:        entId,
+		PositionType: positionType,
+		PositionId:   positionId,
+	})
+	if err != nil {
+		return err
+	}
+	/*
+		权益判断方式、0走资源中台
+		1前置代理判断,是否是付费用户
+		2前置代理判断,是否是超级订阅
+		3前置代理判断,是否是大会员
+		4前置代理判断,是否是商机管理
+	*/
+	switch power_type {
+	case 1:
+		if res.Vip.Status <= 0 && res.Member.Status <= 0 && res.Entniche.Status <= 0 {
+			return NewErrorWithCode(GLOBAL_ERR_NOPOWER, fmt.Sprintf("该用户非付费用户"))
+		}
+	case 2:
+		if res.Vip.Status <= 0 {
+			return NewErrorWithCode(GLOBAL_ERR_NOPOWER, fmt.Sprintf("该用户非超级订阅用户"))
+		}
+	case 3:
+		if res.Member.Status <= 0 {
+			return NewErrorWithCode(GLOBAL_ERR_NOPOWER, fmt.Sprintf("该用户非大会员用户"))
+		}
+	case 4:
+		if res.Entniche.Status <= 0 {
+			return NewErrorWithCode(GLOBAL_ERR_NOPOWER, fmt.Sprintf("该用户非商机管理用户"))
+		}
+	case 22: //临时加大会员专家版、商机版判断
+		if !(res.Member.Status == 1 || res.Member.Status == 2 || res.Member.Status == 6 || res.Member.Status == 7) {
+			return NewErrorWithCode(GLOBAL_ERR_NOPOWER, fmt.Sprintf("该用户非大会员专家版、商机版用户"))
+		}
+	}
+	return nil
+}

+ 5 - 0
etc/config.yaml

@@ -29,6 +29,11 @@ etcd:
       key: resource.rpc
       address:
         - 192.168.3.206:2379
+    # 权益中台配置
+    powerCheckCenter:
+      key: powercheck.rpc
+      address:
+        - 192.168.3.206:2379
 
 #数据库配置
 databases:

+ 2 - 1
go.mod

@@ -5,6 +5,7 @@ go 1.18
 require (
 	app.yhyue.com/moapp/jybase v0.0.0-20230117032034-ad7c00ffe11a
 	bp.jydev.jianyu360.cn/BP/jynsq v0.0.0-20220424062752-50170a93c431
+	bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230210052334-7b32c3b8c773
 	bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.7
 	bp.jydev.jianyu360.cn/BaseService/userCenter v0.0.0-20220905055615-8540037e1b06
 	github.com/go-redis/redis v6.15.9+incompatible
@@ -100,7 +101,7 @@ require (
 	golang.org/x/time v0.3.0 // indirect
 	google.golang.org/appengine v1.6.7 // indirect
 	google.golang.org/genproto v0.0.0-20221111202108-142d8a6fa32e // indirect
-	google.golang.org/grpc v1.50.1 // indirect
+	google.golang.org/grpc v1.51.0 // indirect
 	google.golang.org/protobuf v1.28.1 // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
 	gopkg.in/yaml.v2 v2.4.0 // indirect

+ 4 - 1
go.sum

@@ -14,6 +14,8 @@ bp.jydev.jianyu360.cn/BP/jynsq v0.0.0-20220424062752-50170a93c431 h1:PWQcPR7OrvA
 bp.jydev.jianyu360.cn/BP/jynsq v0.0.0-20220424062752-50170a93c431/go.mod h1:ojo/AUH9Yr1wzarEjOaNMkj1Cet/9r8IgLyba64Z52E=
 bp.jydev.jianyu360.cn/BaseService/gateway v0.0.0-20220419090715-88ddb32961be/go.mod h1:Yj4oabIGItuMoF0BXYLz2XAnF581kxgXBrvlUtIJrkI=
 bp.jydev.jianyu360.cn/BaseService/gateway v1.3.4/go.mod h1:BMLd/5wb3BIEGhnEgF9y1sJN9P5/Dw9kYsoiE9V8I9g=
+bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230210052334-7b32c3b8c773 h1:IbbM9kFSbqJ44UpN99C2cZKX/X/yC03baBYJ7oc0j/w=
+bp.jydev.jianyu360.cn/BaseService/powerCheckCenter v0.0.0-20230210052334-7b32c3b8c773/go.mod h1:5nimT8GJh46AyfeeDeyRlDQygMlO7TRM8Pwm41Gxemc=
 bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.0-20220418005748-8ba5d936dd53/go.mod h1:E5lcDI3k4FESLxiAetCfWQTq8qfpy9cv0yN1oKoEO34=
 bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.0-20220419023723-0b32d4a41751/go.mod h1:6KL5LMEku83uRbre0W/bj5kXG2I6pJGBFtktmtp51yM=
 bp.jydev.jianyu360.cn/BaseService/resourceCenter v0.0.0-20220419063004-233fc7ce006c/go.mod h1:6KL5LMEku83uRbre0W/bj5kXG2I6pJGBFtktmtp51yM=
@@ -1648,8 +1650,9 @@ google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu
 google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
 google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
 google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
-google.golang.org/grpc v1.50.1 h1:DS/BukOZWp8s6p4Dt/tOaJaTQyPyOoCcrjroHuCeLzY=
 google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
+google.golang.org/grpc v1.51.0 h1:E1eGv1FTqoLIdnBCZufiSHgKjlqG6fKFf6pPWtMTh8U=
+google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww=
 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=