Benutzer-Werkzeuge

Webseiten-Werkzeuge


prog:apex_authorization_scheme_protect_link

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
prog:apex_authorization_scheme_protect_link [2019/11/04 14:34] gpipperrprog: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 #800000>**Aufgabe:**</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 #008080>Lösung:</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    IN    VARCHAR2) 
 +RETURN BOOLEAN;
 +
 +-- Nach 19.1
 +APEX_AUTHORIZATION.IS_AUTHORIZED (
 +    p_authorization_name IN VARCHAR2 )
 +    RETURN BOOLEAN;
 +    
 +</code>
 +=> https://docs.oracle.com/en/database/oracle/application-express/19.1/aeapi/PUBLIC_CHECK_AUTHORIZATION-Function-DEPRECATED.html
 +
 +Beispiel Code :
 +
 +<code plsql>
 +
 +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 := '<a href="' 
 +                || APEX_UTIL.PREPARE_URL( p_url => 'f?p=' 
 +                || p_app_id 
 +                || ':'
 +                || p_link_to
 +                ||':'
 +                || p_session
 +                ||'::NO::'
 +                || p_link_item
 +                ||':'
 +                || p_row_val
 +                , p_checksum_type => 'SESSION'
 +                || '"><img src="/i/menu/pencil2_16x16.gif"></a>';
 +      
 +   -- 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:='<span aria-hidden="true" class="fa fa-universal-access fam-minus fam-is-disabled"></span>';
 +   else
 +        v_return:=v_row_link;
 +   end if;
 +
 +return v_return;
 +
 +end checkRowAccess;
 +
 +</code>
 +
 +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 
 +               ,   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
 +....
 +</code>
 +
 +
 +
 +----
 +
 +==== Quellen ====
 +
 +Web:
 +
 +  * https://stackoverflow.com/questions/28299582/oracle-apex-interactive-report-conditional-column-link-display
 +
  
prog/apex_authorization_scheme_protect_link.txt · Zuletzt geändert: 2020/05/05 11:11 von gpipperr