From 5eab7921960969074f58036259c8aee0a537a723 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 28 Aug 2019 10:41:51 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E8=AE=A4=E8=AF=81=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E4=B8=94=E9=80=9A=E8=BF=87=E6=89=8B=E6=9C=BA=EF=BC=88=E6=88=96?= =?UTF-8?q?=E9=82=AE=E7=AE=B1=EF=BC=89=E8=83=BD=E6=89=BE=E5=88=B0=E7=94=A8?= =?UTF-8?q?=E6=88=B7=EF=BC=8C=E5=9C=A8=E6=B2=A1=E6=9C=89=E7=9B=B8=E5=BA=94?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=E6=96=B9=E5=BC=8F=E7=9A=84=E6=83=85=E5=86=B5?= =?UTF-8?q?=E4=B8=8B=EF=BC=8C=E8=87=AA=E5=8A=A8=E7=BB=91=E5=AE=9A=E6=AD=A4?= =?UTF-8?q?=E8=AE=A4=E8=AF=81=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/auth2/auth2.go | 16 ++++++++++++++++ business/auth2/authprovider/defauther.go | 4 ++++ .../auth2/authprovider/dingding/dingding.go | 5 ++--- business/auth2/authprovider/dingding/qrcode.go | 2 +- business/auth2/authprovider/dingding/staff.go | 7 ++++++- business/auth2/authprovider/weixin/weixin.go | 5 +++++ .../auth2/authprovider/weixin/weixin_mini.go | 5 +++++ business/jxstore/cms/user2.go | 18 ++++++++++++++++++ controllers/cms_user2.go | 1 + 9 files changed, 58 insertions(+), 5 deletions(-) diff --git a/business/auth2/auth2.go b/business/auth2/auth2.go index 1cafeb4f3..d744e7b86 100644 --- a/business/auth2/auth2.go +++ b/business/auth2/auth2.go @@ -54,10 +54,17 @@ type IUser interface { GetName() string } +const ( + UpdateUserTypeAdd = 1 + UpdateUserTypeDelete = 2 + UpdateUserTypeUpdate = 3 +) + type IUserProvider interface { GetUser(authID, authIDType string) (user IUser) UpdateUserMobile(userID string, mobile string) (err error) UpdateUserEmail(userID string, email string) (err error) + UpdateUserType(userID string, userTypeMask int8, updateType int) (err error) // CreateUser(userID2, mobile, email, name string) (user IUser, err error) } @@ -73,6 +80,7 @@ type IAuther interface { AddAuthBind(authBindEx *AuthBindEx, userName string) (err error) UnbindAuth(userID, authType, userName string) (err error) Logout(authInfo *AuthInfo) (err error) + GetUserType() (userType int8) } var ( @@ -232,6 +240,7 @@ func Login(authType, authID, authIDType, authSecret string) (authInfo *AuthInfo, } if authBindEx, err = handler.VerifySecret(realAuthID, authSecret); err == nil { // globals.SugarLogger.Debugf("auth2 Login authBindEx:%s", utils.Format4Output(authBindEx, false)) + needAutoAddAuthBind := false if authBindEx == nil { // mobile, email会返回nil(表示不会新建AuthBind实体) user = userProvider.GetUser(authID, authIDType) authBindEx = &AuthBindEx{ @@ -252,12 +261,19 @@ func Login(authType, authID, authIDType, authSecret string) (authInfo *AuthInfo, } if user != nil { authBindEx.UserID = user.GetID() + needAutoAddAuthBind = true } } else if authBindEx.UserID != "" { user = userProvider.GetUser(authBindEx.UserID, UserIDID) } } authInfo = createAuthInfo(user, authBindEx) + if needAutoAddAuthBind { + if AddAuthBind(user, authInfo) == nil { + // todo,用户类型应该要与RegisterUser一起统一处理 + userProvider.UpdateUserType(user.GetID(), handler.GetUserType(), UpdateUserTypeAdd) + } + } } } else { err = ErrIllegalAuthType diff --git a/business/auth2/authprovider/defauther.go b/business/auth2/authprovider/defauther.go index 75280b16c..fb536c639 100644 --- a/business/auth2/authprovider/defauther.go +++ b/business/auth2/authprovider/defauther.go @@ -53,6 +53,10 @@ func (a *DefAuther) Logout(authInfo *auth2.AuthInfo) error { return nil } +func (a *DefAuther) GetUserType() (userType int8) { + return model.UserTypeConsumer +} + // 此函数用于联合(通过unionID)查找用户 func (a *DefAuther) UnionFindAuthBind(curAuthType string, unionAuthTypeList []string, openID, unionID string, authDetail interface{}) (authBindEx *auth2.AuthBindEx, err error) { db := dao.GetDB() diff --git a/business/auth2/authprovider/dingding/dingding.go b/business/auth2/authprovider/dingding/dingding.go index 2d2ca9e7c..1cf09518e 100644 --- a/business/auth2/authprovider/dingding/dingding.go +++ b/business/auth2/authprovider/dingding/dingding.go @@ -1,7 +1,6 @@ package dingding const ( - AuthTypeDingDing = "dingding" - AuthTypeStaff = "ddstaff" // 钉钉企业登录 - AuthTypeQRCode = "ddqrcode" + AuthTypeStaff = "ddstaff" // 钉钉企业登录 + AuthTypeQRCode = "ddqrcode" ) diff --git a/business/auth2/authprovider/dingding/qrcode.go b/business/auth2/authprovider/dingding/qrcode.go index b5e13142f..2ad75acc1 100644 --- a/business/auth2/authprovider/dingding/qrcode.go +++ b/business/auth2/authprovider/dingding/qrcode.go @@ -27,7 +27,7 @@ func (a *QRCodeAuther) VerifySecret(dummy, code string) (authBindEx *auth2.AuthB userQRInfo, err := api.DingDingQRCodeAPI.GetUserInfoByCode(code) if err == nil { globals.SugarLogger.Debugf("dingding qrcode VerifySecret code:%s, userQRInfo:%s", code, utils.Format4Output(userQRInfo, false)) - if authBindEx, err = a.UnionFindAuthBind(AuthTypeQRCode, []string{AuthTypeDingDing, AuthTypeStaff, AuthTypeQRCode}, userQRInfo.OpenID, userQRInfo.UnionID, userQRInfo); err == nil { + if authBindEx, err = a.UnionFindAuthBind(AuthTypeQRCode, []string{AuthTypeStaff, AuthTypeQRCode}, userQRInfo.OpenID, userQRInfo.UnionID, userQRInfo); err == nil { authBindEx.UserHint = &auth2.UserBasic{ Name: userQRInfo.Nickname, } diff --git a/business/auth2/authprovider/dingding/staff.go b/business/auth2/authprovider/dingding/staff.go index b9bc6f4ce..14a4aeb4e 100644 --- a/business/auth2/authprovider/dingding/staff.go +++ b/business/auth2/authprovider/dingding/staff.go @@ -4,6 +4,7 @@ import ( "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/auth2" "git.rosy.net.cn/jx-callback/business/auth2/authprovider" + "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" ) @@ -28,7 +29,7 @@ func (a *StaffAuther) VerifySecret(dummy, code string) (authBindEx *auth2.AuthBi if err == nil { userDetail, err2 := api.DingDingAPI.GetUserDetail(userID.UserID) if err = err2; err == nil { - if authBindEx, err = a.UnionFindAuthBind(AuthTypeStaff, []string{AuthTypeDingDing, AuthTypeStaff, AuthTypeQRCode}, userID.UserID, utils.Interface2String(userDetail["unionid"]), userDetail); err == nil { + if authBindEx, err = a.UnionFindAuthBind(AuthTypeStaff, []string{AuthTypeStaff, AuthTypeQRCode}, userID.UserID, utils.Interface2String(userDetail["unionid"]), userDetail); err == nil { authBindEx.UserHint = &auth2.UserBasic{ UserID2: userID.UserID, Mobile: utils.Interface2String(userDetail["mobile"]), @@ -40,3 +41,7 @@ func (a *StaffAuther) VerifySecret(dummy, code string) (authBindEx *auth2.AuthBi } return authBindEx, err } + +func (a *StaffAuther) GetUserType() (userType int8) { + return model.UserTypeOperator +} diff --git a/business/auth2/authprovider/weixin/weixin.go b/business/auth2/authprovider/weixin/weixin.go index 5fda90895..9dd914985 100644 --- a/business/auth2/authprovider/weixin/weixin.go +++ b/business/auth2/authprovider/weixin/weixin.go @@ -6,6 +6,7 @@ import ( "git.rosy.net.cn/baseapi/platformapi/weixinapi" "git.rosy.net.cn/jx-callback/business/auth2" "git.rosy.net.cn/jx-callback/business/auth2/authprovider" + "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" ) @@ -68,3 +69,7 @@ func (a *Auther) getAPI() *weixinapi.API { } return api.WeixinAPI } + +func (a *Auther) GetUserType() (userType int8) { + return model.UserTypeStoreBoss +} diff --git a/business/auth2/authprovider/weixin/weixin_mini.go b/business/auth2/authprovider/weixin/weixin_mini.go index 3f34bf504..e9bb9825a 100644 --- a/business/auth2/authprovider/weixin/weixin_mini.go +++ b/business/auth2/authprovider/weixin/weixin_mini.go @@ -8,6 +8,7 @@ import ( "git.rosy.net.cn/baseapi/platformapi/weixinapi" "git.rosy.net.cn/jx-callback/business/auth2" "git.rosy.net.cn/jx-callback/business/auth2/authprovider" + "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" ) @@ -57,6 +58,10 @@ func (a *MiniAuther) DecryptData(authInfo *auth2.AuthInfo, encryptedData, iv str return base64.StdEncoding.EncodeToString(decryptedData), nil } +func (a *MiniAuther) GetUserType() (userType int8) { + return model.UserTypeStoreBoss +} + func ProxySNSCode2Session(jsCode string) (sessionInfo *weixinapi.SessionInfo, err error) { miniApi := api.WeixinMiniAPI list := strings.Split(jsCode, ",") diff --git a/business/jxstore/cms/user2.go b/business/jxstore/cms/user2.go index 88e896b2b..df54a7ab7 100644 --- a/business/jxstore/cms/user2.go +++ b/business/jxstore/cms/user2.go @@ -69,6 +69,24 @@ func (*UserProvider) UpdateUserEmail(userID string, email string) (err error) { return err } +func (*UserProvider) UpdateUserType(userID string, userTypeMask int8, updateType int) (err error) { + db := dao.GetDB() + user := &model.User{ + UserID: userID, + } + if err = dao.GetEntity(db, user, "UserID"); err == nil { + if updateType == auth2.UpdateUserTypeAdd { + user.Type |= userTypeMask + } else if updateType == auth2.UpdateUserTypeDelete { + user.Type &= ^userTypeMask + } else { + user.Type = userTypeMask + } + _, err = dao.UpdateEntity(db, user, "Type") + } + return err +} + // func (*UserProvider) CreateUser(userID2, mobile, email, name string) (user auth2.IUser, err error) { // realUser := &model.User{ // UserID2: userID2, diff --git a/controllers/cms_user2.go b/controllers/cms_user2.go index 31f47a217..b957bf2cd 100644 --- a/controllers/cms_user2.go +++ b/controllers/cms_user2.go @@ -33,6 +33,7 @@ func (c *User2Controller) RegisterUser() { } if err == nil { if err = jxutils.Strings2Objs(params.Payload, &user); err == nil { + user.Type = 0 retVal, err = cms.RegisterUser(&user, params.MobileVerifyCode, inAuthInfo) } }