W większości aplikacji istnieje potrzeba kontroli dostępu w zależności od roli użytkownika. W tej lekcji przyjrzymy się przykładowi ustawienia takiej kontroli dla aplikacji internetowej. W ramach tego zadania trzeba będzie:

  • Zdefiniować rolę użytkownika
  • W zależności od roli, kontrolować wyświetlanie elementów menu nawigacyjnego
  • Uniemożliwić nawigację do stron, które nie są dostępne dla określonej roli

Wstępne przygotowanie

Zacznijmy od części przygotowawczej. Dla wygody dalszej konfiguracji konieczne jest stworzenie zmiennej globalnej, która będzie przechowywała informacje o aktualnym użytkowniku. Dzięki temu, w przypadku konieczności przeprowadzenia kontroli, nie będzie trzeba za każdym razem kontaktować się z backendem i żądać informacji o użytkowniku. Wystarczy odczytać niezbędne dane ze zmiennej globalnej.


Konieczne jest uwzględnienie różnych opcji, za pomocą których autoryzowany użytkownik może dostać się do aplikacji:

  • Logowanie w wyniku pomyślnej autoryzacji na stronie Login.
  • Logowanie w wyniku rejestracji.
  • Bezpośrednie logowanie poprzez link do konkretnej strony dla użytkowników, którzy są już autoryzowani.

W każdym z tych przypadków wykorzystywane jest zapytanie backendowe, które zwraca informacje o użytkowniku. W odpowiednim procesie biznesowym wystarczy dodać blok Set Variable aby zarejestrować zmienną globalną User_gv którą stworzyliśmy wcześniej.

Blok ten jest dodawany do CheckAuth procesu biznesowego dla autoryzowanych użytkowników, który znajduje się w folderze Prebuilt folderze w sekcji procesów biznesowych.

Aby wejść przez strony logowania lub rejestracji, blok jest dodawany do procesów biznesowych odpowiednich przycisków.

Sprawdźmy wynik na stronie startowej aplikacji. Aby to zrobić, dodajmy blok Label który przywita użytkownika po imieniu i w zależności od roli napisze czy jest on adminem czy nie.

Należy skonfigurować proces biznesowy, który odpala się po wyświetleniu dowolnego Label (Label onShow trigger).

  1. Expand User. Aby uzyskać informacje o nazwie użytkownika i rolach.
  2. In Array. Aby sprawdzić, czy dany użytkownik jest w Admins grupie.
  3. If-Else. Dla zmienności działań w zależności od wyników sprawdzenia.
  4. Set Variable (String). Do utworzenia zmiennej String o wartości "NOT ", jeśli użytkownik nie jest członkiem np. Admins grupy lub pustą wartością, jeśli jest.
  5. Concat Strings (Multiple). Aby utworzyć pełne wyrażenie, takie jak "Hi, Ken. You are NOT Admin".
  6. Label Update Properties. Aby uzyskać ostateczne wyświetlenie tej frazy na stronie.

Jeśli wszystko jest zrobione poprawnie, to przy dowolnym wariancie wejścia na stronę, ekran będzie miał podobny wynik.

Kontrola widoczności elementów menu

Teraz czas przejść do części głównej. Stwórzmy stronę przeznaczoną tylko dla Adminów i dodajmy odpowiednią pozycję menu (Admin Page), która ma do niej przechodzić. Najlepszym rozwiązaniem jest domyślne wyłączenie jej widoczności.

Korzystając z. Navigate należy zaznaczyć w parametrze Page parametrze i poznać ID tej strony.

W tym przykładzie jest tylko jedna strona z ograniczonym dostępem, ale lepiej od razu przewidzieć opcję, gdy takich stron może być wiele i stworzyć globalną zmienną tylko do odczytu, która będzie przechowywała listę stron.

Następnie należy stworzyć sam proces biznesowy (nazwijmy go Set NavItem Visibility), który będzie sterował widocznością elementów menu nawigacyjnego.

  1. Expand User. Aby uzyskać informacje o rolach użytkowników.
  2. In Array. Aby sprawdzić, czy dany użytkownik jest w Admins grupie.
  3. For each loop. Aby uruchomić pętlę dla wszystkich stron określonych w zmiennej globalnej.
  4. NavItem Update Properties. Aby sterować widocznością elementu w zależności od tego, czy użytkownik jest adminem.

Blok utworzonego procesu biznesowego musi być dodany przed przejściem do strony głównej w procesach biznesowych przycisków logowania i rejestracji użytkownika (wcześniej, Set Variable dodawano do nich bloki umożliwiające zapisanie zmiennej z informacjami o aktualnym użytkowniku).

Kontrola dostępu poprzez bezpośrednie łącze

Ostatnią czynnością jest ustawienie procesu biznesowego, który jest wykonywany przy każdym uruchomieniu aplikacji przez wyzwalacz "On app launch" trigger. Podobnie jak w poprzednim kroku, dodajemy Set NavItems Visibility blok dla uwierzytelnionych użytkowników.

Ponadto konieczne jest zapewnienie ochrony przed dostępem do zamkniętej strony za pośrednictwem bezpośredniego linku:

  1. In Array (Admin_pages). Aby sprawdzić, czy strona docelowa znajduje się na liście stron tylko dla administratorów.
  2. If-Else. Do zmienności działań w zależności od wyników sprawdzenia. Jeśli False, można przejść do wskazanej strony. W przypadku. True, wymagane jest dodatkowe sprawdzenie prawa dostępu do tej strony.
  3. Expand User. Aby odczytać informacje o użytkowniku ze zmiennej globalnej User_gv.
  4. In Array. Aby sprawdzić przynależność do grupy Admins.
  5. If-Else. Aby wybrać akcje w zależności od obecności praw administratora lub ich braku.
  6. Navigate. Aby przejść do wymaganej strony lub przekierować na stronę startową w przypadku, gdy użytkownik bez odpowiednich uprawnień próbuje otworzyć stronę przeznaczoną tylko dla administratorów.

Wybrane strony są teraz chronione przed nieautoryzowanym dostępem. W przypadku braku uprawnień nie są one wyświetlane w menu i nie można do nich dotrzeć nawet przez łącze bezpośrednie.

Należy pamiętać, że ochrona dostępu do określonych stron nie oznacza automatycznej ochrony punktów końcowych, które mogą być używane na tych stronach. Aby to zrobić, w razie potrzeby w Middleware Token Auth ustawieniach należy określić grupy użytkowników, które mają prawa dostępu do wybranego punktu końcowego.

Was this article helpful?

AppMaster.io 101 Kurs zderzeniowy

10 moduły
2 Tygodnie

Nie wiesz, od czego zacząć? Rozpocznij z naszym szybkim kursem dla początkujących i poznaj AppMaster od A do Z.

Rozpocznij kurs
Development it’s so easy with AppMaster!

Potrzebujesz więcej pomocy?

Rozwiąż każdy problem z pomocą naszych ekspertów. Oszczędzaj czas i skup się na tworzeniu aplikacji.

headphones

Skontaktuj się z pomocą techniczną

Opowiedz nam o swoim problemie, a my znajdziemy dla Ciebie rozwiązanie.

message

Czat społeczności

Omów pytania z innymi użytkownikami na naszym czacie.

Dołącz do społeczności