Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
CREATE OR REPLACE package VPD_IND_SETTINGS 

as 

 

  /* Procédure définissant le contexte des droits */ 

  PROCEDURE set_department; 
 
   

  /* fonction retournant la clause where de la policy */ 

  function predicate (obj_schema varchar2, obj_name varchar2) return varchar2; 

   

end VPD_IND_SETTINGS; 
 

CREATE OR REPLACE package body VPD_IND_SETTINGS as  

   

 as   

  /* Filtre sur les départements présents sur l'utilisateur */ 

  function predicate (obj_schema varchar2, obj_name varchar2) return varchar2 is 

  begin 

    if obj_name = 'HRM_PERSON' then 

        return 'INSTR(SYS_CONTEXT(''hrm_ctx'', ''dic_department_id''),DIC_DEPARTMENT_ID)>0 or SYS_CONTEXT(''hrm_ctx'', ''dic_department_id'') =''EVERYTHING'''; 

         

    end if; 

  end predicate; 

 

 

/* Définition du contexte */ 

PROCEDURE set_department 

  AS 

    department varchar2(255); 

  BEGIN 

      SELECT CVF_CHAR 

              INTO department 

              FROM com_vfields_value r, pc_user u 

             WHERE     cvf_tabname = 'PC_USER' 

                   AND cvf_REC_ID = PC_USER_ID 

                   AND USE_NAME = user 

                   AND cvf_fldname = 'VFLD_DEPARTMENTS'; 

     DBMS_SESSION.SET_CONTEXT('hrm_ctx', 'dic_department_id', department); 

  /* Pour gérer les utilisateurs système dans le cadre des dumps, aucun filtre n'est appliqué pour les users oracle qui ne sont pas définis dans PCS */ 

  EXCEPTION 

   WHEN NO_DATA_FOUND THEN DBMS_SESSION.SET_CONTEXT('hrm_ctx', 'dic_department_id', 'EVERYTHING'); 

  END set_department; 

   

end VPD_IND_SETTINGS; 

/  



 

Création du contexte 

Un contexte doit être créé en tant que SYS pour contenir l’information qui déterminera le filtre. 

...