瀏覽代碼

fix: fix IsShared implementation

JustSong 2 年之前
父節點
當前提交
581d9d62dc
共有 4 個文件被更改,包括 10 次插入5 次删除
  1. 3 1
      channel/token-store.go
  2. 3 2
      channel/wechat-corp-account.go
  3. 3 2
      channel/wechat-test-account.go
  4. 1 0
      controller/user.go

+ 3 - 1
channel/token-store.go

@@ -152,6 +152,7 @@ func TokenStoreAddChannel(channel *model.Channel) {
 	}
 	item := channel2item(channel)
 	if item != nil {
+		// Do not check IsShared here, cause its useless
 		TokenStoreAddItem(item)
 	}
 }
@@ -161,7 +162,7 @@ func TokenStoreRemoveChannel(channel *model.Channel) {
 		return
 	}
 	item := channel2item(channel)
-	if item != nil {
+	if item != nil && !item.IsShared() {
 		TokenStoreRemoveItem(item)
 	}
 }
@@ -170,6 +171,7 @@ func TokenStoreUpdateChannel(newChannel *model.Channel, oldChannel *model.Channe
 	if oldChannel.Type != model.TypeWeChatTestAccount && oldChannel.Type != model.TypeWeChatCorpAccount {
 		return
 	}
+	// Why so complicated? Because the given channel maybe incomplete.
 	if oldChannel.Type == model.TypeWeChatTestAccount {
 		// Only keep changed parts
 		if newChannel.AppId == oldChannel.AppId {

+ 3 - 2
channel/wechat-corp-account.go

@@ -32,8 +32,9 @@ func (i *WeChatCorpAccountTokenStoreItem) Key() string {
 
 func (i *WeChatCorpAccountTokenStoreItem) IsShared() bool {
 	appId := fmt.Sprintf("%s|%s", i.CorpId, i.AgentId)
-	return model.DB.Where("type = ? and app_id = ? and secret = ?",
-		model.TypeWeChatCorpAccount, appId, i.AgentSecret).Find(&model.Channel{}).RowsAffected != 1
+	var count int64 = 0
+	model.DB.Model(&model.Channel{}).Where("type = ? and app_id = ? and secret = ?", model.TypeWeChatCorpAccount, appId, i.AgentSecret).Count(&count)
+	return count > 1
 }
 
 func (i *WeChatCorpAccountTokenStoreItem) IsFilled() bool {

+ 3 - 2
channel/wechat-test-account.go

@@ -29,8 +29,9 @@ func (i *WeChatTestAccountTokenStoreItem) Key() string {
 }
 
 func (i *WeChatTestAccountTokenStoreItem) IsShared() bool {
-	return model.DB.Where("type = ? and app_id = ? and secret = ?",
-		model.TypeWeChatTestAccount, i.AppID, i.AppSecret).Find(&model.Channel{}).RowsAffected != 1
+	var count int64 = 0
+	model.DB.Model(&model.Channel{}).Where("type = ? and app_id = ? and secret = ?", model.TypeWeChatTestAccount, i.AppID, i.AppSecret).Count(&count)
+	return count > 1
 }
 
 func (i *WeChatTestAccountTokenStoreItem) IsFilled() bool {

+ 1 - 0
controller/user.go

@@ -604,6 +604,7 @@ func ManageUser(c *gin.Context) {
 			})
 			return
 		}
+		channel.TokenStoreRemoveUser(&user)
 	case "promote":
 		if myRole != common.RoleRootUser {
 			c.JSON(http.StatusOK, gin.H{