Napraw błąd „M_FORBIDDEN: Nie masz uprawnień” w panelu administracyjnym Matrix Room
Próbujesz zmienić ustawienia pokoju w Matrix, usunąć użytkownika, zablokować kogoś, edytować uprawnienia lub wykonać inną czynność administracyjną i otrzymujesz M_FORBIDDEN: You do not have permission… Dla nowicjusza wiadomość może być myląca, ponieważ „admin” może oznaczać dwie różne rzeczy w Matrix: administrator serwera kontroluje serwer domowy, a administrator pokoju ma wystarczającą władzę w jednym konkretnym pokoju. To są oddzielne systemy uprawnień.
Niezawodnym rozwiązaniem jest zidentyfikowanie warstwy uprawnień, która zablokowała akcję, przed wprowadzeniem jakichkolwiek zmian. Autoryzacja pokoju w systemie Matrix opiera się na poziomach mocy : liczbach przechowywanych w stanie pokoju, które określają, kto może zapraszać, wyrzucać, banować, redagować wiadomości, zmieniać ustawienia pokoju lub edytować same poziomy mocy. Aktualna specyfikacja systemu Matrix definiuje te reguły w specyfikacji API Matrix Client-Server . Synapse oddzielnie dokumentuje, że administrator serwera różni się od administratora pokoju w dokumentacji API Synapse Admin .
Odpowiedź M_FORBIDDENoznacza, że serwer domowy odrzucił próbę wykonania działania. Dokładny powód zależy od działania, stanu członkostwa i poziomu mocy w pomieszczeniu.
Zanim cokolwiek zmienisz: poznaj cztery wartości, które mają znaczenie
Zazwyczaj potrzebne są cztery informacje:
Na przykład Twój identyfikator użytkownika Matrix@alice:example.com .
Na przykład identyfikator pokoju!abc123:example.com . Alias pokoju, taki jak , #team:example.comjest łatwiejszy do odczytania, ale wiele interfejsów API działa na wewnętrznym identyfikatorze pokoju.
Twój stan członkostwa . W większości przypadków musisz być dołączony do pokoju, aby móc wykonywać czynności związane z zarządzaniem pokojem.
Twój poziom mocy i poziom wymagany do wykonania akcji .
W Element Web lub na komputerze stacjonarnym identyfikator i wersję pokoju można znaleźć w Ustawieniach pokoju w sekcji Zaawansowane. Aktualna dokumentacja Elementu również umieszcza zarządzanie pokojami w sekcji Ustawienia pokoju → Role i uprawnienia . Zobacz przewodnik po ustawieniach pokoju w Element .
Krok 1: Potwierdź, że faktycznie dołączyłeś do pokoju
Matrix rozróżnia kilka stanów członkostwa, w tym zaproszenie, dołączenie, opuszczenie i zablokowanie. Użytkownik zazwyczaj potrzebuje joinstanu członkostwa, aby wysyłać zdarzenia dotyczące pokoju lub zarządzać pokojem. Ma to znaczenie, ponieważ konto administratora serwera domowego może nadal nie wykonać standardowej akcji dotyczącej pokoju, jeśli nie uczestniczy w nim.
Jeśli korzystasz z klienta Matrix, takiego jak Element, otwórz pokój i upewnij się, że wyświetla się on jako aktywny pokój, do którego dołączyłeś, a nie tylko jako zaproszenie lub pokój historyczny. Jeśli korzystasz z Synapse i potrzebujesz ścieżki odzyskiwania dla administratora serwera, Synapse udostępnia punkt końcowy administratora do dołączania użytkownika lokalnego do pokoju, ale nadal dokumentuje wymagania dotyczące uprawnień związane z tą operacją. Zobacz Administracja członkostwem w pokoju w Synapse .
Unikaj tego błędu: nie zakładaj, że posiadanie tokena API administratora Synapse automatycznie daje te same uprawnienia na poziomie pokoju. Administrowanie serwerem i administrowanie pokojem są celowo odmienne.
Krok 2: Sprawdź swoją rolę i wymagany poziom mocy dla danej akcji
Element prezentuje typowe poziomy uprawnień jako znane role, takie jak Członek, Moderator i Administrator. W praktyce Matrix ocenia liczby, a nie etykiety. Specyfikacja Matrix zaleca znaną interpretację: zwykli użytkownicy poniżej progu stanu-wydarzenia, moderatorzy powyżej tego progu oraz administratorzy na poziomie wymaganym do edycji lub wyższym m.room.power_levels. Typowe pokoje zazwyczaj używają 0 dla członków, 50 dla moderatorów i 100 dla administratorów, ale pokój może dostosować te wartości.
Etykiety klienta, takie jak Administrator i Moderator, stanowią czytelną prezentację poziomów uprawnień w Matrixie. Zawsze sprawdzaj rzeczywiste uprawnienia pokoju, ponieważ pokoje niestandardowe mogą mieć inne progi.
Otwórz Ustawienia pokoju → Role i uprawnienia . Sprawdź swoją rolę i konkretną czynność, którą podejmujesz. Aktualna dokumentacja Elementu zawiera listę typowych czynności, takich jak zmiana ustawień, usuwanie użytkowników, blokowanie użytkowników, zmiana widoczności historii i zmiana uprawnień, z których każda ma swój własny wymagany poziom mocy.
Załóżmy na przykład, że Twoje konto ma poziom mocy 50, a pokój wymaga 100 do zmiany uprawnień. Nadal możesz być moderatorem i wykonywać pewne zadania administracyjne, ale próba edycji modelu uprawnień poprawnie zwróci M_FORBIDDEN.
Krok 3: Sprawdź użytkownika docelowego i swoją własną moc
To jedna z najłatwiejszych do pominięcia zasad Matrixa. W przypadku operacji „wyrzuć i zbanuj” osiągnięcie progu akcji nie zawsze jest wystarczające. Zasady autoryzacji Matrixa wymagają również, aby użytkownik docelowy miał niższy poziom mocy niż osoba wykonująca akcję.
Przykład: Twoje konto ma poziom 50, próg pokoju kickwynosi 50, a inny moderator również ma poziom 50. Spełniasz próg wyrzucenia, ale nadal nie możesz wyrzucić moderatora o tym samym poziomie. Zasady autoryzacji odrzucają operację, ponieważ cel nie jest niższy od Ciebie.
Uprawnienia są przyznawane za każdą akcję. Użytkownik może mieć możliwość zapraszania członków lub wysyłania wiadomości, mimo że nie posiada jeszcze poziomu wymaganego do zmiany ustawień pokoju lub zarządzania innym użytkownikiem z uprawnieniami.
Ta sama zasada wyjaśnia wiele mylących błędów moderacji. Administrator pokoju powinien przeanalizować obie strony porównania:
Twój aktualny poziom mocy.
Wymagany kicklub banpróg.
Aktualny poziom mocy użytkownika docelowego.
Jeśli celem jest administrator o równym poziomie uprawnień, inny administrator o równym poziomie uprawnień zazwyczaj nie może po prostu odebrać mu uprawnień. Dokumentacja Element dotycząca zaawansowanego zarządzania pokojami wyraźnie ostrzega, że administratorzy nie mogą odbierać uprawnień administratora innym administratorom w standardowym procesie pracy klienta. Zobacz Element – zaawansowane zarządzanie pokojami .
Krok 4: Użyj istniejącego administratora pokoju, jeśli jest dostępny
Najprostsze odzyskiwanie jest zazwyczaj bardziej organizacyjne niż techniczne. Jeśli istnieje inny aktywny administrator pokoju i ma wystarczające uprawnienia, poproś go o awansowanie Twojego konta w Ustawieniach pokoju → Role i uprawnienia .
Jest to lepsze rozwiązanie niż ręczne manipulowanie stanem pokoju, ponieważ klient pokazuje aktualny model i stosuje te same reguły autoryzacji, co każdy inny klient Matrix. Po awansie należy ponowić pierwotną akcję.
Jeśli nadal się nie uda, porównaj dokładną akcję z progiem uprawnień, zamiast zakładać, że „Admin” oznacza, że każda akcja jest automatycznie dozwolona. Niestandardowe zdarzenia na poziomie mocy mogą przypisywać nietypowe progi do określonych typów zdarzeń.
Krok 5: Jeśli nie ma już dostępnego administratora pokoju, odzyskaj dostęp za pomocą Synapse
Jeśli korzystasz z serwera domowego Synapse i pokój pozostał bez aktywnego administratora, skorzystaj z obsługiwanych przez Synapse interfejsów API odzyskiwania zamiast edytować bazę danych lub tworzyć zdarzenia w pokoju. Synapse udostępnia interfejs API „Make Room Admin” :
POST /_synapse/admin/v1/rooms/<room_id_or_alias>/make_room_admin
{
"user_id": "@alice:example.com"
}
Uwierzytelnij to żądanie za pomocą tokena dostępu administratora serwera Synapse . Oficjalna dokumentacja API room-admin jest dostępna w sekcji Synapse Rooms Admin API . Punkt końcowy przyznaje wybranemu użytkownikowi lokalnemu najwyższą dostępną mu w danym pokoju moc dostępu do pokoju; w razie potrzeby i możliwości może zaprosić tego użytkownika jako pierwszego.
Administrator serwera domowego może użyć obsługiwanych przez Synapse interfejsów API pokoi, aby zidentyfikować pokój, którego dotyczy problem, i odzyskać administrację na poziomie pokoju, gdy nie ma już odpowiedniego administratora pokoju.
Po zakończeniu połączenia odzyskiwania dołącz do pokoju lub otwórz go ponownie przy użyciu promowanego konta i spróbuj wykonać czynność ponownie w kliencie Matrix.
Przypadek szczególny: wersja pokoju 12 i nowsze
Wersja 12 pokoju Matrix zmienia sposób reprezentacji twórców. Twórca ma praktycznie nieograniczony, niezmienny poziom mocy i nie jest wyświetlany na mapie jak zwykły użytkownik users. m.room.power_levelsTwórcy nie można zdegradować poprzez normalne zdarzenie zmiany poziomu mocy. To zachowanie jest udokumentowane w specyfikacji pokoju Matrix w wersji 12 .
Oznacza to, że technika rozwiązywania problemów skopiowana ze starszej wersji pokoju może nie mieć zastosowania w wersji 12. Sprawdź wersję pokoju przed podjęciem próby zaawansowanego odzyskiwania lub edycji poziomu mocy.
Jak bezpośrednio sprawdzić poziom mocy
W przypadku zaawansowanego rozwiązywania problemów, odpowiednie zdarzenie stanu pokoju to m.room.power_levels. Zawiera ono pola takie jak:
Jeśli Twoje konto nie jest wymienione w kategorii users, jego poziom zazwyczaj spada do users_default. Dla większości pokoi oznacza to 0. Określone typy zdarzeń mogą również nadpisywać ogólny stan lub progi wiadomości za pośrednictwem eventsmapy.
Nie zastępuj całego zdarzenia poziomu mocy małym, częściowym obiektem, chyba że dokładnie wiesz, co klient lub API zachowa. Stan poziomu mocy może zawierać wiele ważnych pól, a ich przypadkowe usunięcie może zmienić więcej uprawnień niż zamierzono.
Czego nie robić
Nie awansuj konta Synapse na administratora serwera tylko po to, by rozwiązać zwykły problem z rolą pokoju. Użyj najmniejszych niezbędnych uprawnień.
Nie edytuj wierszy bazy danych Synapse, aby zmienić poziomy mocy pokoju. Autoryzacja pokoju jest reprezentowana przez podpisane zdarzenia pokoju, a nie tylko flagę użytkownika w bazie danych.
Nie restartuj Synapse jako rutynowej naprawy M_FORBIDDEN. Błędy autoryzacji są zazwyczaj deterministycznymi decyzjami dotyczącymi stanu pomieszczenia, a nie problemami związanymi z nieaktualnym procesem.
Nie zakładaj, że wyczyszczenie pamięci podręcznej klienta zmieni uprawnienia. Serwer domowy egzekwuje regułę autoryzacji.
Nie ujawniaj tokenów dostępu w historii powłoki, zrzutach ekranu, zgłoszeniach pomocy technicznej ani adresach URL.Authorization: Bearer ... Używając interfejsów API, preferuj nagłówek.
Szybka tabela diagnostyczna
Co widzisz
Najprawdopodobniej sprawdź
Następny ruch
M_FORBIDDENpodczas zmiany ustawień pokoju
Twój poziom w porównaniu z wymaganym stanem-wydarzeniem lub poziomem ustawień
Poproś odpowiednio uprawnionego administratora pokoju o awans lub zmianę progu.
M_FORBIDDENpodczas kopania lub banowania
Próg działania i poziom użytkownika docelowego
Twój poziom musi spełniać wymagania i być wyższy niż poziom użytkownika docelowego.
Administrator serwera nie może zarządzać pokojem w kliencie
Rozróżnienie między administratorem serwera a administratorem pokoju
Dołącz do pokoju i skorzystaj z obsługiwanego make_room_admininterfejsu API odzyskiwania, jeśli jest to konieczne.
Brak aktywnego administratora pokoju
Ścieżka odzyskiwania synaps
Użyj interfejsu API Make Room Admin z tokenem administratora serwera.
Stare instrukcje zachowują się inaczej
Wersja pokoju
Przed edycją poziomów mocy sprawdź, czy w pokoju jest wersja 12 lub nowsza.
Ostateczna weryfikacja
Naprawa jest zakończona, gdy konto, które musi zarządzać pokojem, jest dołączone, ma wystarczająco wysoki poziom uprawnień do wykonania zamierzonej akcji i może ją wykonać bez M_FORBIDDENodpowiedzi 403. W przypadku działań moderacyjnych należy również sprawdzić, czy poziom uprawnień użytkownika docelowego jest niższy, gdy wymagają tego reguły autoryzacji Matrix.
Dla nowego administratora Matrixa najbardziej użyteczny model myślowy jest prosty: najpierw określ, czy masz do czynienia z uprawnieniami serwera domowego , czy z uprawnieniami pokoju . Następnie sprawdź członkostwo, swój poziom uprawnień, próg akcji i poziom użytkownika docelowego. Ta sekwencja rozwiązuje większość błędów uprawnień bez zbędnych zmian na serwerze.