Mysql
 sql >> Datenbank >  >> RDS >> Mysql

ColdFusion:Anwendungsmöglichkeiten basierend auf der Rolle?

Sie haben Recht, das Sichern einer Seite und das Sichern von Elementen ist anders.

Meiner Meinung nach und in der Praxis halte ich es für den falschen Ansatz, beliebigen Code an eine Rolle oder einen Benutzer zu binden. Binden Sie stattdessen Berechtigungen an Elemente und Seiten – und binden Sie dann Rollen an diese Berechtigungen. Und natürlich werden Benutzern Rollen zugewiesen.

Es ist wichtig, alle drei zu haben :

  1. Benutzer
  2. Rollen
  3. Berechtigungen <-- das fehlt Ihnen

Berechtigungen sichern Elemente und Seiten, nicht Rollen oder Benutzer Ihr Code sollte keine Ahnung haben (weil er es nicht muss), welche Benutzer oder Rollen es gibt - nur Namen von Berechtigungen.

Wenn sich ein Benutzer anmeldet, übernehme ich seine Rolle(n). Dann ergreife ich alle Berechtigungen, die diesen Rollen zugewiesen sind (einfach eine Liste von Zeichenfolgenwerten).

Zum Beispiel könnte ich auf einer Seite Folgendes haben:

  • Element hinzufügen
  • Element anzeigen
  • Element löschen

Wenn ich diese Seite codiere, sichere ich tatsächlich jedes dieser Elemente mit ähnlich benannten Berechtigungszeichenfolgen ( addItem, viewItem, deleteItem).

<cfif listContainsNoCase( session.permissions, 'addItem' )>
    <!--- code to add item --->
</cfif>

(Hinweis:Ich empfehle die Verwendung eines benutzerdefinierten Tags oder einer benutzerdefinierten Funktion dafür, aber als Beispiel funktioniert das obige gut).

Wenn Sie es auf diese Weise tun, bietet es maximale Flexibilität und Abstraktion. Wenn Sie Elemente basierend auf Rollen sichern, schränken Sie sich selbst ein:

  • Das Hinzufügen neuer Rollen erfordert viele Codeänderungen!
  • Das Ändern von Berechtigungen zwischen Rollen erfordert eine Menge Codeänderungen!

Wenn Sie es wie oben erwähnt tun, müssen Sie Ihren Sicherheitscode niemals innerhalb der Codebasis ändern, da die Berechtigung "addItem" immer in der Logik "Element hinzufügen" enthalten sein sollte, richtig? :)

Wenn Sie nun zufällig eine Rolle vom Typ „Manager“ erstellen müssen, die alle Benutzerrollen und einige ausgewählte Administratorrechte hat, erstellen Sie einfach diese Rolle und weisen ihr die richtigen Berechtigungen zu (vielleicht addItem und editItem, aber nicht deleteItem). . Bam! Jetzt kann ich Benutzern keine Codeänderungen eine Managerrolle zuweisen !

Wenn ich meinen Code mit "ist Benutzer dieser Rolle"-Zeug bestreut hätte - müsste ich meinen Code überall bearbeiten, um meine neue Rolle "Manager" zuzulassen - igitt!

Sinnvoll?

=)