prog:apex_authorization_scheme_plsql
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende Überarbeitung | |||
prog:apex_authorization_scheme_plsql [2018/06/12 19:25] – [Oracle Apex 5 - Authorization Scheme in PL/SQL umsetzen] gpipperr | prog:apex_authorization_scheme_plsql [2018/06/13 22:51] (aktuell) – [Der komplette Code] gpipperr | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | =====Oracle Apex 5 - Authorization Scheme in PL/SQL umsetzen===== | ||
+ | |||
+ | <fc # | ||
+ | |||
+ | Je nachdem in welcher Gruppe ein User ist sollen bestimmte Menü Elemente angezeigt werden und der Anwender soll das entsprechende Admin Formular aufrufen können. | ||
+ | |||
+ | |||
+ | Da es sich um über 50 Stammdaten Tabellen mit wachsender Tendenz handelt, die ganz unterschiedlichen Benutzern zur Verfügung stehen sollen, wird es rein mit Gruppen in Apex ohne weitere Logik schwierig. | ||
+ | |||
+ | Zusätzlich können nicht alle 50 Masken ohne Test in Produktion gestellt werden, d.h. in der Produktion sollen nur die Masken angezeigt werden, die " | ||
+ | |||
+ | Die Standard Administratoren sollen das Rechte behalten, ohne Kontrolle im Detail, die Masken aufrufen zu können. | ||
+ | |||
+ | Die Pflege, welche APEX Rolle die Tabelle bearbeiten kann, soll in der Apex Oberfläche bearbeitet werden können. | ||
+ | |||
+ | <fc # | ||
+ | |||
+ | * ADMIN Gruppe für die Haupt Administratoren - volle Rechte | ||
+ | * BUSINESS Gruppe für die Sachbearbeiter, | ||
+ | * FACHBEREICH Gruppe für den Sachbearbeiter, | ||
+ | |||
+ | |||
+ | In einer Master Tabelle mit allen Informationen über die Stammdaten Masken wird hinterlegt welche FACHBEREICH Gruppe Rechte auf die Maske hat, dies erfolgt über Mitglieder der ADMIN Gruppe. In dieser Tabelle ist auch die ID der Maske hinterlegt mit der die Pflege erfolgen soll, darüber kann wieder zurück auf das Navigationselement für die Maske gefolgert werden. | ||
+ | |||
+ | Damit also ein Sachbearbeiter die Maske sieht, benötigt er die BUSINESS Gruppe und die richtige FACHBEREICH Gruppe, das muss über die Workspace User Verwaltung zuvor zugeordnet werden. | ||
+ | |||
+ | |||
+ | Auf allen Parameter Seiten und allen Navigations List Elementen ist ein Authorization Scheme " | ||
+ | |||
+ | Über " | ||
+ | |||
+ | Nun können wir das ganze individuell mit unseren eigenen Regeln umsetzen. | ||
+ | |||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Code ==== | ||
+ | |||
+ | Die wichtigsten Komponenten des Codes sind: | ||
+ | |||
+ | ==Aus welchen Kontext wird aufgerufen== | ||
+ | |||
+ | <code sql> | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | |||
+ | Funktioniert aber nur wenn der „Evaluation Point“ des Schemas auf „Once per component“ oder " | ||
+ | |||
+ | |||
+ | == Welchen Gruppen ist der User zugeordnet== | ||
+ | |||
+ | <code sql> | ||
+ | -- get the user groups | ||
+ | | ||
+ | </ | ||
+ | |||
+ | |||
+ | == Ist die Komponente vom Typ " | ||
+ | |||
+ | <code sql> | ||
+ | | ||
+ | into v_page_link | ||
+ | from APEX_APPLICATION_LIST_ENTRIES | ||
+ | where LIST_ENTRY_ID = : | ||
+ | |||
+ | | ||
+ | </ | ||
+ | |||
+ | |||
+ | === Der komplette Code === | ||
+ | |||
+ | <code sql> | ||
+ | declare | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | begin | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | -- get the user groups | ||
+ | | ||
+ | |||
+ | -- check for parameter user | ||
+ | if : | ||
+ | then | ||
+ | -- check over ADMIN_TABLES if the user can access this page | ||
+ | begin | ||
+ | | ||
+ | , ENABLED | ||
+ | into v_business_user | ||
+ | , | ||
+ | from ADMIN_TABLES | ||
+ | where PAGEID = : | ||
+ | exception | ||
+ | when no_data_found | ||
+ | then | ||
+ | select PAGE_TITLE | ||
+ | into v_page_title | ||
+ | from APEX_APPLICATION_PAGES | ||
+ | where PAGE_ID = : | ||
+ | |||
+ | v_table_text := | ||
+ | ' | ||
+ | || : | ||
+ | || ' | ||
+ | || : | ||
+ | || ' | ||
+ | || : | ||
+ | |||
+ | apex_debug.message(' | ||
+ | |||
+ | |||
+ | |||
+ | -- insert to the admin table the missing record | ||
+ | insert into ADMIN_TABLES(TABLE_NAME | ||
+ | , | ||
+ | , | ||
+ | , | ||
+ | | ||
+ | ,'Fix :: missing Admin Table Text' | ||
+ | , | ||
+ | , : | ||
+ | |||
+ | commit; | ||
+ | end; | ||
+ | else | ||
+ | -- get the Menü item to this Param table | ||
+ | -- over the APP_COMPONENT_ID := | ||
+ | --select | ||
+ | select replace(regexp_substr(entry_target, | ||
+ | into v_page_link | ||
+ | from APEX_APPLICATION_LIST_ENTRIES | ||
+ | where LIST_ENTRY_ID = : | ||
+ | |||
+ | apex_debug.message(' | ||
+ | |||
+ | begin | ||
+ | if v_page_link != ' | ||
+ | then | ||
+ | select BUSINESS_USER_GROUP | ||
+ | , ENABLED | ||
+ | into v_business_user | ||
+ | , v_enabled | ||
+ | from ADMIN_TABLES | ||
+ | where PAGEID = to_number(v_page_link); | ||
+ | else | ||
+ | v_business_user := ' | ||
+ | end if; | ||
+ | exception | ||
+ | when others | ||
+ | then | ||
+ | v_business_user := ' | ||
+ | apex_debug.message(' | ||
+ | end; | ||
+ | end if; | ||
+ | |||
+ | | ||
+ | |||
+ | if instr(v_group_list, | ||
+ | then | ||
+ | if instr(upper(v_group_list), | ||
+ | then | ||
+ | | ||
+ | end if; | ||
+ | end if; | ||
+ | |||
+ | |||
+ | -- check for Admin User | ||
+ | |||
+ | if instr(v_group_list, | ||
+ | then | ||
+ | v_return := true; | ||
+ | end if; | ||
+ | |||
+ | -- show only enabled admin tables | ||
+ | if : | ||
+ | then | ||
+ | v_return := false; | ||
+ | end if; | ||
+ | |||
+ | | ||
+ | end; | ||
+ | </ | ||
+ | |||
+ | |||
+ | <note important> | ||
+ | |||
+ | ---- | ||
+ | |||
+ | |||
+ | ==== Quellen ==== | ||
+ | |||
+ | |||
+ | Blogs: | ||
+ | |||
+ | * http:// | ||
+ | * https:// | ||
+ | |||
+ | |||
+ | Doku: | ||
+ | * https:// | ||
+ | |||
+ | |||
+ | |||
+ | |||
prog/apex_authorization_scheme_plsql.txt · Zuletzt geändert: 2018/06/13 22:51 von gpipperr