Oracle apex zawartość raportu w zależnosci od roli użytkownika w systemie

W Oracle Apex możesz nadawać uprawnienia do formularzy (stron) lub nawet do obiektów (komponentów) na danej stronie. Czasami jednak chcesz pozostawić tę samą stronę dla różnych ról w systemie i zarządzać treścią na poziomie SQL który jest źródłem danych formularza lub raportu. W ten sposób dane mogą być wyświetlane bardziej elastycznie dla jednej lub wielu ról i nie wymaga to tworzenia wielu stron.

Gdzie Oracle Apex przechowuje informacje o użytkownikach i ich rolach?

Przynależność użytkowników do ról przechowywana jest w tabeli 'apex_appl_acl_user_roles' (listę użytkowników możesz otrzymać z tabeli 'APEX_WORKSPACE_APEX_USERS').

SQL wyświetlający stosowne dla użytkownika dane

Nasz SQL sprawdzi przynależność użytkownika do ról 'ADMINISTRATOR' lub 'ANALITYCY'. Jeśli będzie członkiem jednej z tych grup, otrzyma zawartość bez warunku na kolumnie 'APP_USERNAME' tableli 'SOME_TABLE'. Jeśli nie będzie, wyświetlone zostaną mu tylko rekordy gdzie w tej kolumnie wpisany jest jego login.

Select * from SOME_TABLE 
 WHERE EXISTS (Select 1 from apex_appl_acl_user_roles WHERE user_name = V('APP_USER') AND role_static_id = 'ADMINISTRATOR' OR user_name = V('APP_USER') AND role_static_id = 'ANALITYCY')
OR (APP_USERNAME = V('APP_USER'));

SQL używa używa operatora EXISTS który zwraca prawdę lub fałsz. Więcej o tym operatorze przeczytasz tutaj.