====Oracle Apex 18 / 19 / 20 - einen Link in einem Report mit einem Authorization Scheme schützen===== **Aufgabe:** 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. **Lösung:** Über die PL/SQL API von APEX kann direkt auf das Schem zugegriffen werden: -- Vor 19.1 APEX_UTIL.PUBLIC_CHECK_AUTHORIZATION ( p_security_scheme IN VARCHAR2) RETURN BOOLEAN; -- Nach 19.1 APEX_AUTHORIZATION.IS_AUTHORIZED ( p_authorization_name IN VARCHAR2 ) RETURN BOOLEAN; => https://docs.oracle.com/en/database/oracle/application-express/19.1/aeapi/PUBLIC_CHECK_AUTHORIZATION-Function-DEPRECATED.html Beispiel Code : create or replace function checkRowAccess( p_row_val varchar2 ,p_sec_check varchar2 ,p_security_scheme varchar2 ,p_link_to varchar ,p_link_item varchar2 ,p_session varchar2 ,p_app_id varchar2) return varchar2 is v_return varchar2(8000); v_admin_user boolean:=false; v_row_link varchar2(8000); begin -- create the link with the correct checksum v_row_link := ''; -- check if the data is protected ( if 1 only Admin can change the data!) if p_sec_check = '1' then v_admin_user := apex_util.public_check_authorization(p_security_scheme => p_security_scheme ); end if; if p_sec_check = '1' and v_admin_user=false then v_return:=''; else v_return:=v_row_link; end if; return v_return; end checkRowAccess; Aufruf im SQL eines Interactive Reports z.B. über: select -- generate the link text, switch off security for this row! checkRowAccess( dn.id -- p_row_val , dn.ADMIN_LOCK -- ,p_sec_check , 'APEX_Admin' -- ,p_security_scheme , '332' -- ,p_link_to , 'P332_ID' -- ,p_link_item , '&SESSION.' -- ,p_session , '&APP_ID.' -- ,p_app_id ) as LINK_TEXT .... -- show that the case can only accessed by privileged user ,case when dn.ADMIN_LOCK = 1 then 'fa-lock fam-minus fam-is-danger' else 'fa-unlock fam-blank fam-is-success' end as ADMIN_LOCK from my_table where .... ---- ==== Quellen ==== Web: * https://stackoverflow.com/questions/28299582/oracle-apex-interactive-report-conditional-column-link-display