mirror of
https://github.com/eryajf/chatgpt-dingtalk.git
synced 2025-10-05 16:16:56 +08:00
perf: 将管理员校验的字段改为userid,从而解决普通用户绕过校验的问题 (#175)
This commit is contained in:
@@ -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: []
|
||||
|
@@ -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: []
|
||||
|
@@ -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:
|
||||
|
2
main.go
2
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))
|
||||
|
@@ -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))
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user