fix(channel,user): owner 车道只认白名单,堵住群主/伪造 role 冒充主人(裁决 06.4.2/06.4.3/06.4.4)
- 适配器只描述平台身份:qq_obv11 的 owner/admin 一律上报 RoleMember,不再上报 RoleOwner - session 层唯一判主点只认白名单(owner.yaml Accounts ∪ 每渠道 adminIds),nil 档案 fail-closed 拒绝 - 新增「每渠道管理员层」:channels.json ChannelAccount.adminIds[] → runtimeconfig.AdminIDs → OwnerProfile.SetPlatformAdmins(整体替换语义,热重载后移除的 id 立即失效) - 组合根接线:启动即播种、面板保存先灌白名单再重载适配器(cmd/cyrene/wire_channels.go + 4 条端到端单测) - 06.4.3 节流与参与度状态按会话独立计数(ConversationKey 三处统一,空会话 GC);06.4.4 未知平台主动发言保守默认 1 条/分钟
This commit is contained in:
1 parent
7e7f53bb41
commit
af8591b78a
30 files changed
+1289
-144
No files matched your search
@@ -415,15 +415,13 @@ func contentOf(media []adapter.Media, hasText bool) adapter.ContentType {
|
||||
return adapter.ContentText
|
||||
}
|
||||
|
||||
// roleFromOneBot maps the OneBot sender role field onto the actor Role enum.
|
||||
// It surfaces the platform role verbatim as structured actor metadata; the
|
||||
// channel-layer policy engine still decides real access from the bound owner
|
||||
// identity, not from this field alone.
|
||||
// roleFromOneBot 把 OneBot 上报的 sender.role 映射到 actor 的 Role 枚举。
|
||||
// **群主(owner)与群管理员(admin)一律映射成 RoleMember**(裁决 06.4.2):平台字段
|
||||
// 只描述群内身份,不是主人车道凭据——主人只认白名单(owner.yaml + 每渠道 adminIds[]),
|
||||
// 所以群主/管理员既绕不过限流与黑白名单,也进不了主会话;未知角色值保守归入 RoleUnknown。
|
||||
func roleFromOneBot(raw string) adapter.Role {
|
||||
switch raw {
|
||||
case "owner":
|
||||
return adapter.RoleOwner
|
||||
case "admin", "member":
|
||||
case "owner", "admin", "member":
|
||||
return adapter.RoleMember
|
||||
default:
|
||||
return adapter.RoleUnknown
|
||||
|
||||
Reference in new issue
Block a user