In einem meiner letzten Projekte musste ich wissen, ob der angemeldete Benutzer auch Entwicklerrechte für den Workspace hat oder ob es sich “nur” um einen normalen User handelt.
Im Unterschied zu einem anderen Tipp möchte ich nicht feststellen, ob er auch bereits am Workspace eingeloggt ist. Ich möchte wissen, ob er für den Workspace freigeschaltet ist und sich anmelden könnte.
Der Aufruf APEX_UTIL.GET_USER_ROLES(:APP_USER) kann uns dabei folgendermaßen weiterhelfen.
Wie der Titel der Funktion erahnen lässt, liefert diese für den Namen eines Workspace-Users die freigeschalteten Rollen. Wenn der Benutzer als Workspace-Administrator oder zumindest als Developer freigeschaltet ist, dann erhalten wir einen Rückgabewert zurück. Ansonsten wird NULL zurück gegeben.
Eine Übersicht über die zurückgegebenen Rollen, habe ich in einem eigenen Beitrag zusammengefasst.
Authorization Scheme “APEX Developer” erstellen
Wir können die Funktion nun dafür nutzen, um bestimmte Berechtigungen, also Autorisierungen zu erstellen. Dafür wählen wir für ein eigenes Autorisierungsschema folgende Einstellungen.
Scheme Type:
PL/SQL Function Returning Boolean
PL/SQL Function Body:
begin if APEX_UTIL.GET_USER_ROLES(p_username=>:APP_USER) is null then return false; else return true; end if; end;
Dieses Autorisierungsschema können wir nun verwenden, um zum Beispiel Menüpunkte anzeigen zu lassen, die nur für Entwickler zugänglich sein sollen.
Damit das beschriebene Vorgehen funktioniert, gibt es noch eine Voraussetzung: Die Benutzernamen der Anwendung müssen mit den Benutzernamen des Workspace-User übereinstimmen.
Übrigens: Die erwähnte Funktion liefert auch null, wenn der Benutzer nur für den “Team Development Access” freigeschaltet ist. Aber dann ist der User ja auch kein “echter” Entwickler. 😉