diff --git a/README.md b/README.md index a3f17de..68f246d 100644 --- a/README.md +++ b/README.md @@ -377,7 +377,9 @@ allow_groups: - "学无止境" # 哪些用户可以进行对话,如果留空,则表示允许所有用户,如果要限制,则列表中写用户的名称,比如 ["张三","李四"] allow_users: ["张三","李四"] -# 指定哪些人为此系统的管理员,如果留空,则表示没有人是管理员,如果要限制,则列表中写用户的名称,比如 ["张三","李四"] +# 指定哪些人为此系统的管理员,如果留空,则表示没有人是管理员,如果要限制,则列表中写用户的userid +# 比如 ["1301691029702722","1301691029702733"],这个信息需要在钉钉管理后台的通讯录当中获取:https://oa.dingtalk.com/contacts.htm#/contacts +# 注意:如果下边的app_secrets为空,以及使用outgoing的方式配置机器人,这两种情况下,都表示没有人是管理员 admin_users: [] # 钉钉机器人在应用信息中的AppSecret,为了校验回调的请求是否合法,如果留空,将会忽略校验,则该接口将会存在其他人也能随意调用的安全隐患,因此强烈建议配置正确的secret,如果你的服务对接给多个机器人,这里可以配置多个机器人的secret app_secrets: [] diff --git a/config.example.yml b/config.example.yml index a13b206..f4bba40 100644 --- a/config.example.yml +++ b/config.example.yml @@ -24,7 +24,9 @@ chat_type: "0" allow_groups: [] # 哪些用户可以进行对话,如果留空,则表示允许所有用户,如果要限制,则列表中写用户的名称,比如 ["张三","李四"] allow_users: [] -# 指定哪些人为此系统的管理员,如果留空,则表示没有人是管理员,如果要限制,则列表中写用户的名称,比如 ["张三","李四"] +# 指定哪些人为此系统的管理员,如果留空,则表示没有人是管理员,如果要限制,则列表中写用户的userid +# 比如 ["1301691029702722","1301691029702733"],这个信息需要在钉钉管理后台的通讯录当中获取:https://oa.dingtalk.com/contacts.htm#/contacts +# 注意:如果下边的app_secrets为空,以及使用outgoing的方式配置机器人,这两种情况下,都表示没有人是管理员 admin_users: [] # 钉钉机器人在应用信息中的AppSecret,为了校验回调的请求是否合法,如果留空,将会忽略校验,则该接口将会存在其他人也能随意调用的安全隐患,因此强烈建议配置正确的secret,如果你的服务对接给多个机器人,这里可以配置多个机器人的secret app_secrets: [] diff --git a/docker-compose.yml b/docker-compose.yml index 1434552..9a7560b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,7 +19,10 @@ services: CHAT_TYPE: "0" # 限定对话类型 0:不限 1:只能单聊 2:只能群聊 ALLOW_GROUPS: "" # 哪些群组可以进行对话,如果留空,则表示允许所有群组,如果要限制,则填写群组的名字,比如 "aa,bb" ALLOW_USERS: "" # 哪些用户可以进行对话,如果留空,则表示允许所有用户,如果要限制,则填写用户的名字,比如 "张三,李四" - ADMIN_USERS: "" # 指定哪些人为此系统的管理员,如果留空,则表示没有人是管理员,如果要限制,则填写用户的名字,比如 "张三,李四" + # 指定哪些人为此系统的管理员,如果留空,则表示没有人是管理员,如果要限制,则列表中写用户的userid + # 比如 "1301691029702722,1301691029702733",这个信息需要在钉钉管理后台的通讯录当中获取:https://oa.dingtalk.com/contacts.htm#/contacts + # 注意:如果下边的app_secrets为空,以及使用outgoing的方式配置机器人,这两种情况下,都表示没有人是管理员 + ADMIN_USERS: "" APP_SECRETS: "" # 钉钉机器人在应用信息中的AppSecret,为了校验回调的请求是否合法,如果留空,将会忽略校验,则该接口将会存在其他人也能随意调用的安全隐患,因此强烈建议配置正确的secret,如果你的服务对接给多个机器人,这里可以配置多个机器人的secret,比如 "xxxx,yyyy" HELP: "欢迎使用本工具\n\n你可以查看:[用户指南](https://github.com/eryajf/chatgpt-dingtalk/blob/main/docs/userGuide.md)\n\n这是一个[开源项目](https://github.com/eryajf/chatgpt-dingtalk/),觉得不错你可以来波素质三连." # 帮助信息,放在配置文件,可供自定义 volumes: diff --git a/main.go b/main.go index 89d22d7..1f5ed21 100644 --- a/main.go +++ b/main.go @@ -56,7 +56,7 @@ func Start() { } return nil } - if !public.JudgeGroup(msgObj.GetChatTitle()) && !public.JudgeUsers(msgObj.SenderNick) && !public.JudgeAdminUsers(msgObj.SenderNick) { + if !public.JudgeGroup(msgObj.GetChatTitle()) && !public.JudgeUsers(msgObj.SenderNick) && !public.JudgeAdminUsers(msgObj.SenderStaffId) { _, err = msgObj.ReplyToDingtalk(string(dingbot.TEXT), "抱歉,您不在该机器人对话功能的白名单当中!") if err != nil { logger.Warning(fmt.Errorf("send message error: %v", err)) diff --git a/pkg/process/db.go b/pkg/process/db.go index d85824b..9c2d463 100644 --- a/pkg/process/db.go +++ b/pkg/process/db.go @@ -16,7 +16,7 @@ import ( // SelectHistory 查询会话历史 func SelectHistory(rmsg *dingbot.ReceiveMsg) error { name := strings.TrimSpace(strings.Split(rmsg.Text.Content, ":")[1]) - if !public.JudgeAdminUsers(rmsg.SenderNick) { + if !public.JudgeAdminUsers(rmsg.SenderStaffId) { _, err := rmsg.ReplyToDingtalk(string(dingbot.MARKDOWN), "**🤷 抱歉,您没有查询对话记录的权限,只有程序管理员可以查询!**") if err != nil { logger.Error(fmt.Errorf("send message error: %v", err)) diff --git a/public/tools.go b/public/tools.go index 8f95a31..adb519b 100644 --- a/public/tools.go +++ b/public/tools.go @@ -57,6 +57,10 @@ func JudgeUsers(s string) bool { // JudgeAdminUsers 判断用户是否为系统管理员 func JudgeAdminUsers(s string) bool { + // 如果secret或者用户的userid都为空的话,那么默认没有管理员 + if len(Config.AppSecrets) == 0 || s == "" { + return false + } // 如果没有指定,则没有人是管理员 if len(Config.AdminUsers) == 0 { return false