From 1e9d9d6645b4639ed808900a0581a7d8a45eca8e Mon Sep 17 00:00:00 2001 From: icey-yu <1186114839@qq.com> Date: Wed, 25 Jun 2025 10:35:58 +0800 Subject: [PATCH] feat: add nickname for adminUser --- config/share.yml | 9 +++++++-- internal/api/router.go | 7 +++---- internal/push/push_handler.go | 4 ++-- internal/rpc/auth/auth.go | 4 ++-- internal/rpc/group/group.go | 2 +- internal/rpc/msg/revoke.go | 2 +- internal/rpc/msg/server.go | 4 +--- internal/rpc/user/user.go | 10 +++++++--- internal/tools/cron/cron_task.go | 4 +--- pkg/common/config/config.go | 11 +++++++---- pkg/common/startrpc/start.go | 4 ++-- test/stress-test-v2/main.go | 3 +-- test/stress-test/main.go | 3 +-- 13 files changed, 36 insertions(+), 31 deletions(-) diff --git a/config/share.yml b/config/share.yml index 691f39c29..a42bdcdd7 100644 --- a/config/share.yml +++ b/config/share.yml @@ -1,8 +1,13 @@ secret: openIM123 +# imAdminUser: Configuration for instant messaging system administrators imAdminUser: - imAdmin: superAdmin # The userID and nickname of the admin. Format: userID:nickname -# imAdmin2: superAdmin2 # You can add more admin users by following the format above. + # userIDs: List of administrator user IDs. + # Each entry here corresponds by index to the matching entry in the nicknames list below. + userIDs: [imAdmin] + # nicknames: List of administrator display names. + # Each entry here corresponds by index to the matching entry in the userIDs list above. + nicknames: [superAdmin] # 1: For Android, iOS, Windows, Mac, and web platforms, only one instance can be online at a time multiLogin: diff --git a/internal/api/router.go b/internal/api/router.go index f58a890ae..8a4199581 100644 --- a/internal/api/router.go +++ b/internal/api/router.go @@ -29,7 +29,6 @@ import ( "github.com/openimsdk/tools/log" "github.com/openimsdk/tools/mw" "github.com/openimsdk/tools/mw/api" - "github.com/openimsdk/tools/utils/datautil" clientv3 "go.etcd.io/etcd/client/v3" ) @@ -99,7 +98,7 @@ func newGinRouter(ctx context.Context, client discovery.SvcDiscoveryRegistry, cf r.Use(gzip.Gzip(gzip.BestSpeed)) } r.Use(api.GinLogger(), prommetricsGin(), gin.RecoveryWithWriter(gin.DefaultErrorWriter, mw.GinPanicErr), mw.CorsHandler(), - mw.GinParseOperationID(), GinParseToken(rpcli.NewAuthClient(authConn)), setGinIsAdmin(datautil.Keys(cfg.Share.IMAdminUser))) + mw.GinParseOperationID(), GinParseToken(rpcli.NewAuthClient(authConn)), setGinIsAdmin(cfg.Share.IMAdminUser.UserIDs)) u := NewUserApi(user.NewUserClient(userConn), client, cfg.Discovery.RpcService) { @@ -233,7 +232,7 @@ func newGinRouter(ctx context.Context, client discovery.SvcDiscoveryRegistry, cf objectGroup.GET("/*name", t.ObjectRedirect) } // Message - m := NewMessageApi(msg.NewMsgClient(msgConn), rpcli.NewUserClient(userConn), datautil.Keys(cfg.Share.IMAdminUser)) + m := NewMessageApi(msg.NewMsgClient(msgConn), rpcli.NewUserClient(userConn), cfg.Share.IMAdminUser.UserIDs) { msgGroup := r.Group("/msg") msgGroup.POST("/newest_seq", m.GetSeq) @@ -310,7 +309,7 @@ func newGinRouter(ctx context.Context, client discovery.SvcDiscoveryRegistry, cf if cfg.Discovery.Enable == config.ETCD { etcdClient = client.(*etcd.SvcDiscoveryRegistryImpl).GetClient() } - cm := NewConfigManager(datautil.Keys(cfg.Share.IMAdminUser), &cfg.AllConfig, etcdClient, string(cfg.ConfigPath)) + cm := NewConfigManager(cfg.Share.IMAdminUser.UserIDs, &cfg.AllConfig, etcdClient, string(cfg.ConfigPath)) { configGroup := r.Group("/config", cm.CheckAdmin) configGroup.POST("/get_config_list", cm.GetConfigList) diff --git a/internal/push/push_handler.go b/internal/push/push_handler.go index c2c054703..4f1964084 100644 --- a/internal/push/push_handler.go +++ b/internal/push/push_handler.go @@ -317,8 +317,8 @@ func (c *ConsumerHandler) groupMessagesHandler(ctx context.Context, groupID stri return err } log.ZDebug(ctx, "GroupDismissedNotificationInfo****", "groupID", groupID, "num", len(*pushToUserIDs), "list", pushToUserIDs) - if len(c.config.Share.IMAdminUser) > 0 { - ctx = mcontext.WithOpUserIDContext(ctx, datautil.Keys(c.config.Share.IMAdminUser)[0]) + if len(c.config.Share.IMAdminUser.UserIDs) > 0 { + ctx = mcontext.WithOpUserIDContext(ctx, c.config.Share.IMAdminUser.UserIDs[0]) } defer func(groupID string) { if err := c.groupClient.DismissGroup(ctx, groupID, true); err != nil { diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index 778565c03..7a8607164 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -91,11 +91,11 @@ func Start(ctx context.Context, config *Config, client discovery.SvcDiscoveryReg config.Share.Secret, config.RpcConfig.TokenPolicy.Expire, config.Share.MultiLogin, - datautil.Keys(config.Share.IMAdminUser), + config.Share.IMAdminUser.UserIDs, ), config: config, userClient: rpcli.NewUserClient(userConn), - adminUserIDs: datautil.Keys(config.Share.IMAdminUser), + adminUserIDs: config.Share.IMAdminUser.UserIDs, }) return nil } diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 03c227666..3700c054a 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -117,7 +117,7 @@ func Start(ctx context.Context, config *Config, client discovery.SvcDiscoveryReg userClient: rpcli.NewUserClient(userConn), msgClient: rpcli.NewMsgClient(msgConn), conversationClient: rpcli.NewConversationClient(conversationConn), - adminUserIDs: datautil.Keys(config.Share.IMAdminUser), + adminUserIDs: config.Share.IMAdminUser.UserIDs, } gs.db = controller.NewGroupDatabase(rdb, &config.LocalCacheConfig, groupDB, groupMemberDB, groupRequestDB, mgocli.GetTx(), grouphash.NewGroupHashFromGroupServer(&gs)) gs.notification = NewNotificationSender(gs.db, config, gs.userClient, gs.msgClient, gs.conversationClient) diff --git a/internal/rpc/msg/revoke.go b/internal/rpc/msg/revoke.go index 312d08d96..1f4d6be68 100644 --- a/internal/rpc/msg/revoke.go +++ b/internal/rpc/msg/revoke.go @@ -109,7 +109,7 @@ func (m *msgServer) RevokeMsg(ctx context.Context, req *msg.RevokeMsgReq) (*msg. revokerUserID := mcontext.GetOpUserID(ctx) var flag bool - if len(m.config.Share.IMAdminUser) > 0 { + if len(m.config.Share.IMAdminUser.UserIDs) > 0 { flag = datautil.Contain(revokerUserID, m.adminUserIDs...) } tips := sdkws.RevokeMsgTips{ diff --git a/internal/rpc/msg/server.go b/internal/rpc/msg/server.go index 2accab45d..48101cdd7 100644 --- a/internal/rpc/msg/server.go +++ b/internal/rpc/msg/server.go @@ -22,8 +22,6 @@ import ( "github.com/openimsdk/open-im-server/v3/pkg/dbbuild" "github.com/openimsdk/open-im-server/v3/pkg/mqbuild" "github.com/openimsdk/open-im-server/v3/pkg/rpcli" - "github.com/openimsdk/tools/utils/datautil" - "google.golang.org/grpc" "github.com/openimsdk/open-im-server/v3/pkg/common/config" @@ -148,7 +146,7 @@ func Start(ctx context.Context, config *Config, client discovery.SvcDiscoveryReg config: config, webhookClient: webhook.NewWebhookClient(config.WebhooksConfig.URL), conversationClient: conversationClient, - adminUserIDs: datautil.Keys(config.Share.IMAdminUser), + adminUserIDs: config.Share.IMAdminUser.UserIDs, } s.notificationSender = notification.NewNotificationSender(&config.NotificationConfig, notification.WithLocalSendMsg(s.SendMsg)) diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index f6a1d6021..91dfe736e 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -94,8 +94,12 @@ func Start(ctx context.Context, config *Config, client discovery.SvcDiscoveryReg users := make([]*tablerelation.User, 0) - for uid, name := range config.Share.IMAdminUser { - users = append(users, &tablerelation.User{UserID: uid, Nickname: name, AppMangerLevel: constant.AppAdmin}) + for i := range config.Share.IMAdminUser.UserIDs { + users = append(users, &tablerelation.User{ + UserID: config.Share.IMAdminUser.UserIDs[i], + Nickname: config.Share.IMAdminUser.Nicknames[i], + AppMangerLevel: constant.AppAdmin, + }) } userDB, err := mgo.NewUserMongo(mgocli.GetDB()) if err != nil { @@ -132,7 +136,7 @@ func Start(ctx context.Context, config *Config, client discovery.SvcDiscoveryReg clientConfig: controller.NewClientConfigDatabase(clientConfigDB, redis.NewClientConfigCache(rdb, clientConfigDB), mgocli.GetTx()), groupClient: rpcli.NewGroupClient(groupConn), relationClient: rpcli.NewRelationClient(friendConn), - adminUserIDs: datautil.Keys(config.Share.IMAdminUser), + adminUserIDs: config.Share.IMAdminUser.UserIDs, } pbuser.RegisterUserServer(server, u) return u.db.InitOnce(context.Background(), users) diff --git a/internal/tools/cron/cron_task.go b/internal/tools/cron/cron_task.go index 262c09106..2c8655d4a 100644 --- a/internal/tools/cron/cron_task.go +++ b/internal/tools/cron/cron_task.go @@ -10,8 +10,6 @@ import ( "github.com/openimsdk/protocol/third" "github.com/openimsdk/tools/discovery" "github.com/openimsdk/tools/discovery/etcd" - "github.com/openimsdk/tools/utils/datautil" - "github.com/openimsdk/tools/errs" "github.com/openimsdk/tools/log" "github.com/openimsdk/tools/mcontext" @@ -33,7 +31,7 @@ func Start(ctx context.Context, conf *Config, client discovery.SvcDiscoveryRegis <-ctx.Done() return nil } - ctx = mcontext.SetOpUserID(ctx, datautil.Keys(conf.Share.IMAdminUser)[0]) + ctx = mcontext.SetOpUserID(ctx, conf.Share.IMAdminUser.UserIDs[0]) msgConn, err := client.GetConn(ctx, conf.Discovery.RpcService.Msg) if err != nil { diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 9b771d8b3..43914310e 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -356,10 +356,13 @@ type AfterConfig struct { } type Share struct { - Secret string `yaml:"secret"` - IMAdminUser map[string]string `yaml:"imAdminUser"` - MultiLogin MultiLogin `yaml:"multiLogin"` - RPCMaxBodySize MaxRequestBody `yaml:"rpcMaxBodySize"` + Secret string `yaml:"secret"` + IMAdminUser struct { + UserIDs []string `yaml:"userIDs"` + Nicknames []string `yaml:"nicknames"` + } `yaml:"imAdminUser"` + MultiLogin MultiLogin `yaml:"multiLogin"` + RPCMaxBodySize MaxRequestBody `yaml:"rpcMaxBodySize"` } type MaxRequestBody struct { diff --git a/pkg/common/startrpc/start.go b/pkg/common/startrpc/start.go index 1f0c5a01a..9715f2aac 100644 --- a/pkg/common/startrpc/start.go +++ b/pkg/common/startrpc/start.go @@ -69,8 +69,8 @@ func Start[T any](ctx context.Context, disc *conf.Discovery, prometheusConfig *c grpcsrv.GrpcServerRequestValidate(), grpcsrv.GrpcServerPanicCapture(), ) - if shareConfig != nil && len(shareConfig.IMAdminUser) > 0 { - options = append(options, grpcServerIMAdminUserID(datautil.Keys(shareConfig.IMAdminUser))) + if shareConfig != nil && len(shareConfig.IMAdminUser.UserIDs) > 0 { + options = append(options, grpcServerIMAdminUserID(shareConfig.IMAdminUser.UserIDs)) } var clientOptions []grpc.DialOption if maxRequestBody != nil { diff --git a/test/stress-test-v2/main.go b/test/stress-test-v2/main.go index 52eea3e60..63ce77065 100644 --- a/test/stress-test-v2/main.go +++ b/test/stress-test-v2/main.go @@ -23,7 +23,6 @@ import ( pbuser "github.com/openimsdk/protocol/user" "github.com/openimsdk/tools/log" "github.com/openimsdk/tools/system/program" - "github.com/openimsdk/tools/utils/datautil" ) // 1. Create 100K New Users @@ -447,7 +446,7 @@ func main() { Share: *share, Api: *apiConfig, }, - AdminUserID: datautil.Keys(share.IMAdminUser)[0], + AdminUserID: share.IMAdminUser.UserIDs[0], Ctx: ctx, Cancel: cancel, HttpClient: &http.Client{ diff --git a/test/stress-test/main.go b/test/stress-test/main.go index 9e51da033..d7822e51b 100755 --- a/test/stress-test/main.go +++ b/test/stress-test/main.go @@ -24,7 +24,6 @@ import ( pbuser "github.com/openimsdk/protocol/user" "github.com/openimsdk/tools/log" "github.com/openimsdk/tools/system/program" - "github.com/openimsdk/tools/utils/datautil" ) /* @@ -320,7 +319,7 @@ func main() { Share: *share, Api: *apiConfig, }, - AdminUserID: datautil.Keys(share.IMAdminUser)[0], + AdminUserID: share.IMAdminUser.UserIDs[0], Ctx: ctx, Cancel: cancel, HttpClient: &http.Client{