Masz rację, zabezpieczanie strony i zabezpieczanie elementów jest inne.
Moim zdaniem i w praktyce uważam, że powiązanie dowolnego kodu z rolą lub użytkownikiem jest w rzeczywistości złym podejściem. Zamiast tego powiąż uprawnienia z elementami i stronami, a następnie powiąż role z tymi uprawnieniami. Oczywiście użytkownikom przypisuje się role.
Ważne jest, aby mieć wszystkie trzy:
- Użytkownicy
- Role
- Uprawnienia <-- tego Ci brakuje
Uprawnienia to zabezpieczenia elementów i stron, nie ról ani użytkowników Twój kod nie powinien mieć pojęcia (ponieważ nie musi), jacy są użytkownicy lub role - tylko nazwy uprawnień.
Kiedy użytkownik się loguje, przejmuję jego role. Następnie pobieram wszystkie uprawnienia przypisane do tych ról (po prostu listę wartości ciągów).
Na przykład na stronie, którą mogę mieć:
- Dodaj element
- Wyświetl element
- Usuń element
Kiedy koduję tę stronę, faktycznie zabezpieczam każdy z tych elementów za pomocą ciągów uprawnień o podobnej nazwie ( addItem, viewItem, deleteItem).
<cfif listContainsNoCase( session.permissions, 'addItem' )>
<!--- code to add item --->
</cfif>
(Uwaga:zalecam użycie do tego niestandardowego tagu lub funkcji, ale dla przykładu powyższe działa dobrze).
Jeśli robisz to w ten sposób, zapewnia to maksymalną elastyczność i abstrakcję. Jeśli zabezpieczasz elementy na podstawie ról, ograniczasz się:
- Dodanie nowych ról będzie wymagało wielu zmian w kodzie!
- Zmiana uprawnień między rolami wymaga wielu zmian w kodzie!
Jeśli zrobisz to tak, jak wspomniano powyżej, nigdy nie będziesz musiał zmieniać kodu bezpieczeństwa w bazie kodu, ponieważ uprawnienie „addItem” powinno zawsze znajdować się w logice „dodaj element”, prawda? :)
Teraz, jeśli zdarzy ci się stworzyć rolę typu „menedżer”, która ma wszystkie role użytkownika i kilka wybranych uprawnień administratora, po prostu utwórz tę rolę i przypisz jej odpowiednie uprawnienia (może addItem i editItem, ale nie deleteItem) . Bam! Teraz mam rolę menedżera, którą mogę przypisać użytkownikom bez bez zmian w kodzie !
Gdybym dodał do swojego kodu rzeczy typu „jest użytkownikiem tej roli” – musiałbym wszędzie edytować swój kod, aby umożliwić mojej nowej roli „menedżer” – fuj!
Czy ma to sens?
=)