Im deutschen Apex-Forum kam diese Woche die Frage auf, wie einzelne Seiten für APEX-User gesperrt werden können.
Ich möchte dies aufgreifen und an einem kleinen Beispiel mit Screenshots erklären.
Der User „User1“ soll hier im Beispiel auf eine bestimmte Seite „NotforUser1“ keinen Zugriff erhalten. Damit diese auch nicht in den Tabs für ihn sichtbar ist, wenden wir das Authorization Scheme auf dem entsprechenden Tab an.
Als Vorarbeit haben wir eine Anwendung mit 2 Seiten, inkl. jeweils einem Tab (Page1 und NotforUser1) und dem Authentication Scheme „Application Express“ erstellt.
Im Bereich der Shared Components wählen wir Authorization Scheme aus (siehe Bild 1):
Dort klicken wir auf „Create“ (siehe Bild 2):
Die Voreinstellung „From Scratch“ können wir übernehmen und klicken auf „Next“ (siehe Bild 3):
Den Namen des Authorization Schemes können wir frei wählen. Wichtig ist an dieser Stelle der Scheme Type „Value of Item in Expression 1 Does NOT Equal Expression 2“ und die entsprechenden Werte für Expression 1 „APP_USER“ und Expression 2 „USER1“. Nun noch eine Error Message eintragen und das neu erstellte Authorization Scheme kann mit „Apply Changes“ angelegt werden (siehe Bild 4):
Damit der User1 die Seite und damit den Tabreiter nicht sieht, wählen wir in den Shared Components im Bereich „Tabs“ den entsprechenden Tabreiter (hier NotForUser1) aus und bearbeiten dessen Attribute. Im Bereich „Authorization“ brauchen wir nun noch unser neu erstelltes Authorization Scheme auswählen (siehe Bild 5):
UPDATE:Dasselbe Authorization Scheme gehört auch noch in die Security-Attribute der Seite „NotforUser1“.
Und schon ist die Seite „NotforUser1“ für den User1 zum einen nicht sichtbar und auch nicht erreichbar.
Natürlich funktioniert das nur in einem überschaubaren Bereich von wenigen Usern und Berechtigungsstufen sauber. Sollte die Anwendung und der Benutzerkreis wachsen, so ist über eine andere Möglichkeit (z.b. LDAP) nachzudenken.
Hi Carsten,
ganz wichtig ist, dass das Auhorization Scheme auch der Seite selbst zugewiesen wird (Edit Page Attributes), da ansonst der Benutzer durch eingabe der Page Nummer direkt auf die Seite kommt. Die Tab Zuweisung ist eigentlich nur aus „Usability“ Gruenden notwendig.
Gruesse
Patrick
Hallo Patrick,
du hast recht, das hatte ich vergessen aufzunehmen.
Hallo Carsten,
ich nutze die Version Application Express 4.0.2.00.07 und verzweifle langsam an der Authorisierungserstellung. Dein Beispiel oben funktioniert in dieser Version einfach nicht.
Welche Fehler bei der Erstellung sind noch möglich ?
besten Gruß
Michael
Hallo Michael,
kannst du vielleicht näher beschreiben, wo es bei dir klemmpt? Dann kann ich es in meiner Installation nachverfolgen.
Hallo Michael,
ich habe es gerade nochmal selber probiert. Die gleiche Apex-Version wie bei dir und genau nach dem Blogeintrag. Es funktioniert. Also hast du dich irgendwo vertan.
Hallo Carsten,
danke für Deine Antwort. Ich nutze die Appliance (siehe OTN Seite). Da diese große Probleme bzgl. der Darstellung von Umlauten hatte, habe ich die APEX multilang. Variante dort neu installiert. Es funktioniert alles perfekt, bis auf die Authorisierungserstellung. Ich habe die Lösung der Beispielanwendung übernommen, sie basiert auf einem Custom Scheme (User/Password in einer Tabelle). Damit habe ich es hinbekommen. :-()
besten Gruß
Michael
Wie lässt sich das mit den Expressions in der aktuellen Version Application Express 4.2.0.00.22 realisieren?
Expression 2 gibt es nicht zur Auswahl?
Hallo Patrick,
ich habe mir die neue Version noch gar nicht genau angeschaut. Das werde ich am Wochenende mal nachholen und dir dann Feedback geben.
Carsten
Wenn ein User sich mittels LDAP autorisiert, so erscheint auf der HTML-Seite „Willkommen L10420“ (Anmeldename).
Ich will diese Info für die Sperrung bestimmter Funktionen verwenden.
Mein Problem ist, wie kann ich den User auslesen?
Meine Suche blieb bis jetzt erfolglos.
Meinst du die Variable :APP_USER? Darin ist der aktuell angemeldete User enthalten.
Genau.
Vielen Dank für den Tipp.