...
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.
...