prog:apex_authorization_scheme_protect_link
Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
prog:apex_authorization_scheme_protect_link [2019/11/04 14:30] – [Quellen] gpipperr | prog:apex_authorization_scheme_protect_link [2020/05/05 11:11] (aktuell) – gpipperr | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | ====Oracle Apex 18 / 19 / 20 - einen Link in einem Report mit einem Authorization Scheme schützen===== | ||
+ | |||
+ | <fc # | ||
+ | |||
+ | In einem Bericht soll ein Link zum Bearbeiten nur dann aktiv sein, wenn der Anwender die entsprechenden Rechte in APEX besitzt und der Datensatz für Ihn auch freigeschaltet ist. | ||
+ | |||
+ | Für die Prüfung der Berechtigung steht bereits ein Authorization Scheme zur Verfügung. | ||
+ | |||
+ | Wir möchten allerdings jetzt das Authorization Scheme auf Einzelsatz Ebene der Daten einsetzen. | ||
+ | |||
+ | |||
+ | |||
+ | **<fc # | ||
+ | |||
+ | Über die PL/SQL API von APEX kann direkt auf das Schem zugegriffen werden: | ||
+ | |||
+ | <code plsql> | ||
+ | -- Vor 19.1 | ||
+ | APEX_UTIL.PUBLIC_CHECK_AUTHORIZATION ( | ||
+ | p_security_scheme | ||
+ | RETURN BOOLEAN; | ||
+ | |||
+ | -- Nach 19.1 | ||
+ | APEX_AUTHORIZATION.IS_AUTHORIZED ( | ||
+ | p_authorization_name IN VARCHAR2 ) | ||
+ | RETURN BOOLEAN; | ||
+ | | ||
+ | </ | ||
+ | => https:// | ||
+ | |||
+ | Beispiel Code : | ||
+ | |||
+ | <code plsql> | ||
+ | |||
+ | create or replace function checkRowAccess( p_row_val varchar2 | ||
+ | , | ||
+ | , | ||
+ | , | ||
+ | , | ||
+ | , | ||
+ | , | ||
+ | return varchar2 | ||
+ | is | ||
+ | v_return | ||
+ | v_admin_user boolean: | ||
+ | v_row_link | ||
+ | | ||
+ | begin | ||
+ | -- create the link with the correct checksum | ||
+ | v_row_link := '<a href="' | ||
+ | || APEX_UTIL.PREPARE_URL( p_url => ' | ||
+ | || p_app_id | ||
+ | || ':' | ||
+ | || p_link_to | ||
+ | ||':' | ||
+ | || p_session | ||
+ | ||':: | ||
+ | || p_link_item | ||
+ | ||':' | ||
+ | || p_row_val | ||
+ | , p_checksum_type => ' | ||
+ | || '">< | ||
+ | | ||
+ | -- check if the data is protected ( if 1 only Admin can change the data!) | ||
+ | |||
+ | if p_sec_check = ' | ||
+ | v_admin_user := apex_util.public_check_authorization(p_security_scheme => p_security_scheme ); | ||
+ | end if; | ||
+ | |||
+ | | ||
+ | | ||
+ | | ||
+ | else | ||
+ | v_return: | ||
+ | end if; | ||
+ | |||
+ | return v_return; | ||
+ | |||
+ | end checkRowAccess; | ||
+ | |||
+ | </ | ||
+ | |||
+ | Aufruf im SQL eines Interactive Reports z.B. über: | ||
+ | <code sql> | ||
+ | select | ||
+ | -- generate the link text, switch off security for this row! | ||
+ | checkRowAccess( dn.id -- p_row_val | ||
+ | , | ||
+ | , | ||
+ | , | ||
+ | , | ||
+ | , | ||
+ | , | ||
+ | ) | ||
+ | as LINK_TEXT | ||
+ | .... | ||
+ | -- show that the case can only accessed by privileged user | ||
+ | ,case when dn.ADMIN_LOCK = 1 then ' | ||
+ | from my_table | ||
+ | where | ||
+ | .... | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ---- | ||
+ | |||
+ | ==== Quellen ==== | ||
+ | |||
+ | Web: | ||
+ | |||
+ | * https:// | ||
+ | |||
prog/apex_authorization_scheme_protect_link.txt · Zuletzt geändert: 2020/05/05 11:11 von gpipperr