Je hebt gelijk, het beveiligen van een pagina en het beveiligen van elementen is anders.
Naar mijn mening en in de praktijk denk ik dat het koppelen van een code aan een rol of gebruiker eigenlijk de verkeerde benadering is. Koppel in plaats daarvan machtigingen aan elementen en pagina's en koppel vervolgens rollen aan die machtigingen. En natuurlijk krijgen gebruikers rollen toegewezen.
Het is belangrijk om ze alle drie te hebben:
- Gebruikers
- Rollen
- Machtigingen <-- dit is wat je mist
Machtigingen zijn wat beveiligde elementen en pagina's zijn, geen rollen of gebruikers Je code zou geen idee moeten hebben (omdat dat niet nodig is) welke gebruikers of rollen er zijn - alleen namen van machtigingen.
Wanneer een gebruiker inlogt, pak ik hun rol(len). Dan pak ik alle rechten die aan die rollen zijn toegewezen (gewoon een lijst met tekenreekswaarden).
Op een pagina heb ik bijvoorbeeld:
- Item toevoegen
- Bekijk item
- Item verwijderen
Wanneer ik die pagina codeer, beveilig ik eigenlijk elk van die elementen met machtigingsreeksen met de naam vergelijkbaar (addItem, viewItem, deleteItem).
<cfif listContainsNoCase( session.permissions, 'addItem' )>
<!--- code to add item --->
</cfif>
(Opmerking:ik raad aan om hiervoor een aangepaste tag of functie te gebruiken, maar als voorbeeld werkt het bovenstaande prima).
Als je het op deze manier doet, biedt het maximale flexibiliteit en abstractie. Als je elementen beveiligt op basis van rollen, beperk je jezelf:
- Het toevoegen van nieuwe rollen vereist veel codewijzigingen!
- Het wijzigen van rechten tussen rollen vereist veel codewijzigingen!
Als u het doet zoals hierboven vermeld, hoeft u nooit uw beveiligingscode in de codebasis te wijzigen, omdat de machtiging "addItem" altijd op de logica van "item toevoegen" moet staan, toch? :)
Als u nu een rol van het type "manager" moet maken, die alle gebruikersrollen en een beperkt aantal beheerdersrechten heeft, maakt u eenvoudig die rol aan en wijst u deze de juiste machtigingen toe (misschien addItem en editItem, maar niet deleteItem) . Bam! Nu heb ik een beheerdersrol om toe te wijzen aan gebruikers zonder geen codewijzigingen !
Als ik mijn code had besprenkeld met "is gebruiker deze rol" soort dingen - zou ik mijn code overal moeten bewerken om mijn nieuwe rol "manager" toe te staan - bah!
Zin?
=)