In de meeste toepassingen is er behoefte aan toegangscontrole, afhankelijk van de rol van de gebruiker. In deze les bekijken we een voorbeeld van het opzetten van zo'n controle voor een webtoepassing. Als onderdeel van deze taak moet u:
- Gebruikersrol definiëren
- Afhankelijk van de rol de weergave van navigatiemenu-items regelen
- Het onmogelijk maken om te navigeren naar pagina's die niet toegankelijk zijn voor een specifieke rol
Eerste voorbereiding
Laten we beginnen met het voorbereidende deel. Voor het gemak van verdere configuratie is het nodig een globale variabele aan te maken die informatie over de huidige gebruiker opslaat. Als u dus een controle moet uitvoeren, hoeft u niet telkens contact op te nemen met de backend en informatie over de gebruiker op te vragen. Het volstaat om de nodige gegevens uit de globale variabele te lezen.
Het is noodzakelijk rekening te houden met de verschillende mogelijkheden waarmee een geautoriseerde gebruiker in de applicatie kan komen:
- Inloggen na succesvolle autorisatie op de pagina Login.
- Inloggen als gevolg van registratie.
- Rechtstreeks inloggen via een link naar een specifieke pagina voor gebruikers die al geautoriseerd zijn.
In elk van deze gevallen wordt een backend query gebruikt die informatie over de gebruiker teruggeeft. In het bijbehorende bedrijfsproces hoeft alleen een Set Variable blok toe te voegen om de globale variabele User_gv die je eerder hebt aangemaakt.
Dit blok wordt toegevoegd aan het CheckAuth bedrijfsproces voor geautoriseerde gebruikers, dat zich bevindt in de Prebuilt map in de sectie Bedrijfsprocessen.
Om binnen te komen via de aanmeldings- of aanmeldingspagina's wordt het blok toegevoegd aan de bedrijfsprocessen van de betreffende knoppen.
Laten we het resultaat controleren op de startpagina van de applicatie. Hiervoor voegen we een Label die de gebruiker bij naam begroet en, afhankelijk van de rol, schrijft of hij een admin is of niet.
U moet een bedrijfsproces opzetten dat afgaat wanneer een Label wordt weergegeven (Label onShow trigger).
- Expand User. Voor informatie over de naam en de rollen van de gebruiker.
- In Array. Om te controleren of de opgegeven gebruiker in de Admins groep zit.
- If-Else. Voor verschillende acties afhankelijk van de resultaten van de controle.
- Set Variable (String). Om een variabele String aan te maken met een waarde van "NOT " als de gebruiker geen lid is van de Admins groep of een lege waarde indien dat wel het geval is.
- Concat Strings (Multiple). Om een volledige zin te creëren zoals "Hi, Ken. You are NOT Admin".
- Label Update Properties. Voor de uiteindelijke weergave van deze zin op de pagina.
Als alles goed is gedaan, zal bij elke variant van binnenkomst op de pagina, het scherm een vergelijkbaar resultaat hebben.
Controle van de zichtbaarheid van menu-items
Nu is het tijd om naar het hoofdgedeelte te gaan. Laten we een pagina maken die alleen bedoeld is voor Admins en het bijbehorende menu-item (Admin Page) om ernaar toe te gaan. De beste oplossing is om de zichtbaarheid ervan standaard uit te schakelen.
Met behulp van het Navigate blok moet je de aangemaakte pagina selecteren in de Page parameter en de ID van deze pagina achterhalen.
In dit voorbeeld is er slechts één pagina met beperkte toegang, maar het is beter om meteen de optie te voorzien wanneer er veel van dergelijke pagina's kunnen zijn en een globale alleen-lezen variabele te maken om de lijst van pagina's op te slaan.
Vervolgens moet u het bedrijfsproces zelf maken (laten we het noemen Set NavItem Visibility) om de zichtbaarheid van de items in het navigatiemenu te regelen.
- Expand User. Voor informatie over gebruikersrollen.
- In Array. Om te controleren of de gegeven gebruiker in de Admins groep zit.
- For each loop. Om de lus uit te voeren voor alle pagina's die in de globale variabele zijn opgegeven.
- NavItem Update Properties. Om de zichtbaarheid van een element te controleren, afhankelijk van of de gebruiker een admin is.
Het blok van het aangemaakte bedrijfsproces moet worden toegevoegd voordat u naar de startpagina gaat in de bedrijfsprocessen van de knoppen voor aanmelding en gebruikersregistratie (voorheen, Set Variable werden er blokken aan toegevoegd om een variabele met informatie over de huidige gebruiker op te nemen).
Toegangscontrole via directe link
Als laatste moet een bedrijfsproces worden ingesteld dat wordt uitgevoerd telkens wanneer de toepassing wordt gestart door de "On app launch" trigger. Net als in de vorige stap voegt u het Set NavItems Visibility blok toe voor geauthenticeerde gebruikers.
Daarnaast is het nodig bescherming te bieden tegen toegang tot een gesloten pagina via een directe link:
- In Array (Admin_pages). Om te controleren of de doelpagina op de lijst van alleen voor beheerders bestemde pagina's staat.
- If-Else. Voor variabiliteit van acties, afhankelijk van de resultaten van de controle. Indien False, kunt u naar de opgegeven pagina navigeren. In het geval van True, is een extra controle van het recht op toegang tot deze pagina vereist.
- Expand User. Om gebruikersinformatie uit de globale variabele te lezen User_gv.
- In Array. Lidmaatschap van de groep Admins controleren .
- If-Else. Acties selecteren afhankelijk van de aanwezigheid of afwezigheid van beheerdersrechten .
- Navigate. Om naar de gewenste pagina te gaan of om door te verwijzen naar de startpagina in het geval dat een gebruiker zonder de juiste rechten een pagina probeert te openen die alleen voor admins bedoeld is.
De geselecteerde pagina's zijn nu beschermd tegen ongeoorloofde toegang. Bij gebrek aan rechten worden ze niet in het menu weergegeven en zijn ze zelfs via een directe link niet toegankelijk.
Het is belangrijk te onthouden dat toegangsbeveiliging voor bepaalde pagina's niet automatisch bescherming betekent voor eindpunten die op die pagina's kunnen worden gebruikt. Hiervoor moet u, indien nodig, in de Middleware Token Auth instellingen gebruikersgroepen op te geven die toegangsrechten hebben tot het geselecteerde eindpunt.