Mysql
 sql >> Baza danych >  >> RDS >> Mysql

ColdFusion:Opcje aplikacji na podstawie roli?

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:

  1. Użytkownicy
  2. Role
  3. 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?

=)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql dump - wyklucz niektóre dane z tabeli

  2. MySQL, kolejność wstawiania ORDER BY, bez sortowania kolumn

  3. Podnoszenie procedury składowanej jest niezgodne z funkcją sql_mode=only_full_group_by, mimo że sql_mode jest puste

  4. Czy sortowanie InnoDB naprawdę jest TAK wolne?

  5. MySQL — Oblicz różnicę czasu netto między dwiema datami i godzinami, wykluczając przerwy?