2008-10-28 14 views
7

Ich diskutiere den besten Weg, ziemlich komplexe Berechtigungen vom Server auf eine AJAX-Anwendung zu propagieren, und ich bin mir nicht sicher, der beste Ansatz zu nehmen.Berechtigungen für Javascript weitergeben

Im Wesentlichen möchte ich meine Berechtigungen definiert werden, so dass ich eine ganze Reihe von Berechtigungen in einem Schuss anfordern kann, und passen Sie die Benutzeroberfläche wie geeignet an (die UI-Änderungen können so niedrig wie das Deaktivieren bestimmter Kontextmenüpunkte sein). Natürlich muss ich immer noch die Berechtigungen Server Seite erzwingen.

Also, ich frage mich, ob jemand irgendwelche Vorschläge für die beste Art und Weise muss

  1. die Berechtigungen pflegen und sie in Servercode
  2. haben einfachen Zugang zu den Berechtigungen in Javascript
  3. nicht haben um eine Round-Trip-Anfrage an den Server für jede einzelne Erlaubnis zu machen

Gedanken?

Antwort

2

Wenn Sie einen klaren Satz von Berechtigungen, wie ein „Anwenderebene "oder" Benutzertyp ", Sie könnten den Wert einfach in einem versteckten Feld übergeben und auf den Wert über das DOM zugreifen. Sie könnten dies immer noch tun, wenn Ihre Berechtigungen granularer wären, aber Sie hätten entweder viele versteckte Felder oder Sie müssten die Informationen in XML oder JSON oder ein anderes Format codieren.

Sie könnten sie als Bitflags setzen, so dass Sie ODER einen einzelnen numerischen Wert mit einer Maske sehen könnten, um zu sehen, ob der Benutzer die Berechtigung für eine bestimmte Aktivität hatte. Das wäre sehr flexibel und solange Sie nicht mehr als 32 oder so spezifische "Rechte" haben, würde dies eine beliebige Permutation dieser Rechte in einem sehr kleinen Paket ermöglichen (im Grunde ein unsigniertes int).

Zum Beispiel:

0x00000001 //edit permission 
0x00000002 //create new thing permission 
0x00000004 //delete things permission 
0x00000008 //view hidden things permission 
    . 
    . 
    . 
0x80000000 //total control of the server and everyone logged in 

Dann ein Benutzer mit einer Genehmigung von 0x000007 könnte bearbeiten, erstellen und löschen, aber sonst nichts.

In jedem Fall denke ich, dass Sie auf dem richtigen Weg sind - machen Sie die Anfrage einmal pro Seite Aufruf, speichern Sie die Berechtigungen in einer globalen JavaScript-Datenstruktur, und gehen Sie von dort. AJAX ist nett, aber Sie möchten nicht den Server für jede spezifische Erlaubnis auf Ihrer ganzen Seite abfragen. Sie würden es einmal beim Laden der Seite tun, die Präsentation Ihrer Seite einrichten und den Wert in einer globalen Variablen speichern und dann lokal auf die Berechtigung (en) für Ereignisfunktionen verweisen.

+0

Wenn Sie Berechtigungsinformationen in einem globalen JS-Objekt speichern, kann der Benutzer dann das JS-Objekt nicht vom Clientcomputer aus bearbeiten/ändern? –

+0

Die Berechtigungen werden in JS ausschließlich für die UI-Manipulation gespeichert, nicht für den eigentlichen Datenzugriff - z. B. den Zugriff auf Tab X verbergen oder die Spalte Y anzeigen. – jvenema

+0

Für was es wert ist, habe ich etwas gefunden: var MyApp. canRead = function (entity, property) {... liest das JS-Objektliteral, das vom Server gerendert wurde, um den Lesezugriff auf die angegebene Entität zu bestimmen ...} ;. Die Berechtigungen werden in einer Tabelle auf dem Server definiert und für den Zugriff über die Funktion canRead() auf den Client gerendert. – jvenema

-1

Codieren Sie sie als JSON.

2

Wenn Sie die Berechtigungsstruktur als JSON-Objekt (oder XML, wenn Sie bevorzugen) an den Client übertragen, können Sie dieses Objekt mit dem clientseitigen Code bearbeiten und an den Server zurücksenden, der alles tun kann Es muss die Daten validieren und beibehalten.

+0

Diese Art vermisst den Punkt ... Ich kann hin und her in dem Format senden, das ich will, das merke ich.Ich frage, wie man die auf dem Server definierten Berechtigungen am besten mit Benutzeroberflächenelementen auf dem Client in Beziehung setzt. – jvenema

1

Ich sehe es nicht unbedingt als die "richtige" Lösung, aber wäre es möglich, alle Berechtigungen Zeug auf der Serverseite zu halten, und nur die aktualisierte Benutzeroberfläche eher als eine Art von JSON-Berechtigungssystem dienen?

Sie müssten die Entscheidung treffen, je nachdem, wie beschäftigt und intensiv Ihre App zu sein erwartet, aber auf jeden Fall eine Entscheidung lohnt sich so oder so

+0

Das wäre der bevorzugte ASP.Net-Ansatz, aber mit einer gewissen Granularität auf jedem Typsystem gibt es auch Vorteile, clientseitige Kontrolle zu haben. – CMPalmer

+0

Es ist komplexer als das; Ich benutze tatsächlich ExtJS, also ist alles in JS vordefiniert. Zum Beispiel hat die App 5 "Bereiche", aber nur bestimmte Benutzer haben Zugriff auf diese Bereiche, aber ich möchte nicht wirklich jedes Mal verschiedene JS rendern (und möglicherweise Probleme haben, weil Element X fehlt, usw.). Stattdessen denke ich, dass die Benutzeroberfläche für alle gleich definiert sein sollte, aber nach Dauerzeichen ausblenden/anzeigen sollte. – jvenema

Verwandte Themen