
Język 🇵🇱 Polski
Tło
Implementacja
Czym jest kontrola dostępu? 
Dzięki FastComments SSO Access Control, czasami nazywanemu RBAC, można ograniczyć użytkownikom dostęp jedynie do określonych stron lub wątków komentarzy. Dodatkowo użytkownicy mogą @mention się nawzajem tylko w tej samej grupie.
W szczegółach
Możemy umieścić Users i opcjonalnie Pages w grupach.
Kiedy Users są umieszczeni w grupach, a w Ustawieniach Widgetu włączona jest opcja Limit Comments by SSO User Groups, użytkownicy będą widzieć tylko komentarze od użytkowników z ich tych samych grup i będą mogli @mentionować tylko użytkowników z tych samych grup.
Dodatkowo Pages mogą być umieszczone w grupach, dzięki czemu użytkownicy będą mieć dostęp tylko do komentarzy na stronach, do których mają dostęp.
Nazywamy to grupami "na poziomie użytkownika" w przeciwieństwie do grup "na poziomie strony".
Które z nich jest odpowiednie dla Ciebie?
Użyj grup na poziomie użytkownika jeśli...
- Chcesz używać tej samej wartości
urlId(URL strony lub identyfikator artykułu), ale ograniczyć komentarze według grupy. - Na przykład, chcesz mieć grupy "Nowy użytkownik" i "Doświadczony użytkownik", i nie powinny one nigdy widzieć nawzajem swoich komentarzy na tych samych stronach.
Użyj grup na poziomie strony jeśli...
- Twoje grupy zawierają konkretne strony.
- Na przykład, użytkownicy w grupie "Strony publiczne" nigdy nie powinni widzieć artykułów z grupy "Ściśle tajne".
Jak to działa 
FastComments Access Control działa poprzez przypisywanie Pages i Users do wybranych grup.
Grupa to po prostu identyfikator w postaci ciągu znaków, np. GREEN lub abc-123.
Users i Pages nie są ograniczone do jednej grupy. Są ograniczone odpowiednio do 100 i 1000 grup.
Dostęp do nieautoryzowanych stron
Jeśli użytkownik spróbuje uzyskać dostęp do strony, do której nie ma uprawnień, zobaczy komunikat o błędzie, jak poniżej:
Tekst komunikatu można dostosować.
Specyfikacja 
Określanie, jak wielu użytkowników wchodzi w interakcję oraz testowanie tego, jest skomplikowane. Oto specyfikacja, której przestrzegamy w kontroli dostępu, której możesz użyć do przetestowania swojej implementacji:
Strona z null group ids, użytkownik z null group ids - powinien mieć dostęp.
Strona z null group ids, użytkownik z group ids - powinien mieć dostęp.
Strona z group ids, użytkownik z null group ids - powinien mieć dostęp.
Strona z group ids, użytkownik z pustą listą - NIE powinien mieć dostępu.
Strona z group ids, użytkownik z group ids - istnieje przecięcie - powinien mieć dostęp.
Strona z group ids, użytkownik z group ids - przecięcie nie istnieje - NIE powinien mieć dostępu.
Strona z pustą listą group ids (nikt nie ma dostępu), użytkownik z null - NIE powinien mieć dostępu.
SSO User A = No group ids defined (null = pełny dostęp).
SSO User B = No group ids defined (null = pełny dostęp).
A może @B.
SSO User A = No group ids defined (null = pełny dostęp).
SSO User B = Group ids defined.
A może @B.
SSO User A = Group ids defined.
SSO User B = No group ids defined (null = pełny dostęp).
A może @B.
SSO User A = Group ids = [a].
SSO User B = Group ids = [b].
A NIE może @B.
SSO User A = Group ids = [a].
SSO User B = Group ids = [a, b].
A może @B.
Implementacja 
Wzmiankowanie użytkowników z innych grup
Jeśli dwaj użytkownicy należą do dwóch różnych zbiorów grup i nie ma między nimi przecięcia, nie będą mogli się nawzajem @mention.
Jeśli użytkownik ręcznie wpisze @mention i wyśle swój komentarz, pozostanie on w postaci zwykłego tekstu. Inny użytkownik nie zostanie otagowany.
Zarządzanie grupami
Groups są definiowane przy użyciu zasobów API Pages i SSOUsers.
API Pages można wywołać, aby zdefiniować zestaw grup mających dostęp do strony. Domyślnie dostęp mają wszystkie grupy oraz użytkownicy, którzy nie należą do żadnej grupy.
Podobnie API SSOUsers można wywołać, aby zdefiniować grupy powiązane z każdym użytkownikiem.
Dla obu zasobów nie ma ograniczeń co do tego, kiedy można ustawić lub zaktualizować grupy.
Jeśli celem jest jedynie ograniczenie możliwości @mentionowania się użytkowników nawzajem, to Pages nie muszą być brane pod uwagę.
Uwaga!
Definiowanie i aktualizowanie grup użytkowników SSO nie wymaga używania API i może być zaktualizowane automatycznie przez zdefiniowanie identyfikatorów grup w ładunku SSO przekazywanym do widżetu komentarzy. Jednak przy dużych listach grup nie jest to zalecane, ponieważ użytkownik musiałby przesyłać ten ładunek przy każdym ładowaniu strony.
Przykładowe wywołania API 
Poniżej przejdziemy przez wywołania API FastComments, aby skonfigurować kontrolę dostępu.
Zanim zaczniemy, pamiętaj, że nie musimy jawnie tworzyć struktury Group. Grupy to po prostu identyfikatory
dodawane do Users i Pages. Dodanie grupy do użytkownika lub strony automatycznie "tworzy" grupę.
Najpierw utwórzmy dwóch użytkowników, User A i User B; umieścimy ich początkowo w Group X:


Teraz utwórzmy Page. Nazwiemy ją Confidential Page; póki co żaden z tych użytkowników nie będzie miał do niej dostępu, ponieważ będzie ona w grupie CONFIDENTIAL:

Użytkownicy A i B obecnie NIE MAJĄ dostępu do nowej strony. Jednak ponieważ należą do tej samej grupy, GROUP-X, mogą się wzajemnie @mention.
Zaktualizujmy User B, aby mógł teraz uzyskać dostęp do strony:

User B należy teraz do obu grup. Nasi użytkownicy nadal mogą się wzajemnie @mention, ale tylko User B może przeglądać naszą poufną stronę.
Ustawmy tak, aby User B mógł jedynie przeglądać poufną stronę:

Teraz może przeglądać poufną stronę, ale żaden z naszych użytkowników nie może już się wzajemnie @mention, ponieważ należą do różnych grup.
Jednak każdy użytkownik, który nie bierze udziału w kontroli dostępu, będzie mógł uzyskać dostęp do naszej strony. Aby temu zapobiec, upewnij się, że żaden użytkownik SSO nie ma groupIds ustawionego na null. Na przykład, utwórzmy User C, który ma dostęp do wszystkiego:

Ustawiając groupIds na null, oznaczamy, że nie są oni ograniczeni przez kontrolę dostępu.
Teraz utwórzmy stronę, do której wszyscy mają dostęp:

Ustawiając accessibleByGroupIds na null, oznaczamy, że ta Page nie jest kontrolowana przez mechanizm kontroli dostępu i obaj użytkownicy mogą ją odwiedzać.
To kończy nasze omówienie API dotyczące kontroli dostępu.