test(api): сценарии §11.5 и §11.6 — админ инстанса и realtime-события
- администратор инстанса вне сервера видит и меняет чужой сервер: комнаты, роли, участники, аудит; его действия помечены actor_instance_admin; - администратора инстанса нельзя исключить или замутить с сервера (instance.admin_protected) — права глобальны и не отзываются владельцем; - realtime-проверка: два WS-клиента (владелец и участник) получают события CHANNEL_CREATE, GUILD_UPDATE, GUILD_ROLE_CREATE, MEMBER_ROLES_UPDATE от REST-ручек, а USER_UPDATE приходит только владельцу сессии.
This commit is contained in:
@@ -907,6 +907,11 @@ func (s *Server) checkMemberHierarchy(ctx context.Context, guildID uint64, actor
|
||||
if err != nil {
|
||||
return humaError(err)
|
||||
}
|
||||
// Администратора инстанса нельзя модерировать с сервера: его права
|
||||
// глобальны и не могут быть отозваны владельцем сервера (AGENT.md 7.19).
|
||||
if target, err := s.store.GetUser(ctx, targetID); err == nil && target.IsInstanceAdmin {
|
||||
return humaErrorStatus(http.StatusForbidden, "instance.admin_protected", "instance administrator cannot be moderated")
|
||||
}
|
||||
if targetID == guild.OwnerID && actor.ID != guild.OwnerID {
|
||||
return humaErrorStatus(http.StatusForbidden, "perm.denied", "guild owner cannot be moderated")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user