fix(server): инстанс-админ видит все серверы инстанса в READY
Чек-лист §11.5 требует, чтобы READY и список серверов инстанс-админа содержали все серверы инстанса, включая чужие и приватные. Фактически список строился из членства (`ListGuildsForUser`), поэтому в интерфейсе админа чужого сервера не было ни в рейке, ни в подстраховочном `GET /users/@me/guilds` — войти в него без инвайта было нельзя, хотя права на чужом сервере у него максимальные (AGENT.md 7.18, 7.19). - `Snapshot.userGuilds`: админу — `ListAllGuilds`, остальным — членство; - `GET /users/@me/guilds` отдаёт админу тот же список, иначе REST-ответ выкидывал бы чужой сервер из рейки при перечитывании сводки; - Go-тест `TestReadyListsAllGuildsForInstanceAdmin`: READY и REST содержат чужой приватный сервер с полными правами, у обычного пользователя его нет.
This commit is contained in:
@@ -392,7 +392,15 @@ func (s *Server) registerUserRoutes(api huma.API) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
guilds, err := s.store.ListGuildsForUser(ctx, user.ID)
|
||||
// Инстанс-админ видит все серверы инстанса — тем же списком, что и
|
||||
// READY, иначе подстраховочный REST-запрос выкинул бы чужой сервер из
|
||||
// рейки (AGENT.md 7.19, 11.5).
|
||||
var guilds []store.Guild
|
||||
if user.IsInstanceAdmin {
|
||||
guilds, err = s.store.ListAllGuilds(ctx)
|
||||
} else {
|
||||
guilds, err = s.store.ListGuildsForUser(ctx, user.ID)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, humaError(err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user