Cum se configurează autorizarea paginii în apexul oracolului

Când dezvoltați aplicații în APEX, adesea aveți nevoie de niveluri diferite de acces pentru utilizatori - de exemplu, atunci când o aplicație este utilizată de utilizatori din diferite departamente sau atunci când trebuie să creați rapoarte vizibile numai pentru administratori.







Autentificarea este dincolo de sfera acestui articol, însă există deja un material bun despre el.

De exemplu, luați în considerare o aplicație în care există două rapoarte - Raport de administrator și raport utilizator și utilizatori - ADMIN, USER1 și USER2.

Trebuie să vă asigurați că ADMIN vede toate paginile și că USER nu vede raportul de administrator.

1. Definirea modelului de rol

Pentru a începe, aveți nevoie pentru a decide ca un model va arata ca: mici aplicatii are sens pentru a determina lista de pagini disponibile direct pentru fiecare utilizator, dar, în cazul în care o mulțime de pagini sau de utilizatori în aplicația, este mai convenabil să se introducă rolul și de a face două pachete de „utilizator -> rol“ și "role -> page", care este atribuirea unui rol pentru fiecare utilizator și configurarea accesului la anumite pagini pentru fiecare rol.

Vom urmări cea de-a doua cale, așa cum ne așteptăm ca în urma numărului de utilizatori să crească.

Să introducem două roluri ADMIN și USER și să creăm tabelul USER_ROLE

și tabelul ROLE_PAGE

După cum puteți vedea, pentru rolul UTILIZATORULUI, accesul la pagina 2 nu este specificat.

Numerele paginilor pot fi vizualizate în aplicația Builder în APEX sau prin reprezentările APEX din baza de date:

selectați *
din APEX_APPLICATION_PAGES
unde APPLICATION_ID = <номер вашего приложения>

Acum, să scriem o funcție care să ia numele utilizatorului și pagina de aplicație pentru a returna o valoare booleană și dacă utilizatorul are acces la această pagină.

Acum trebuie să selectați schema creată pentru această aplicație. Pentru a face acest lucru, mergeți la componentele partajate -> atributele interfeței utilizator (bloc de interfață utilizator). În secțiunea Security -> Authorization, selectați schema creată și dați clic pe "Aplicați modificările".

Acum, când încercați USER1 și USER2, aruncați o privire la Raportul de administrator, veți vedea următoarele:







4. Modificați meniul de navigare (Navigare)

Puteți lăsa o astfel de implementare, dar este mai bine să ascundeți de utilizatorii din meniu acele pagini pe care încă nu le pot naviga.

Pentru ca utilizatorii să vadă meniul de navigare, în funcție de nivelul de acces, trebuie să treceți de la meniul de navigare static implicit la cel dinamic.

Ideea este de a lua un elemente de meniu statice (de obicei, numite „Meniu de navigare Spațiul de lucru“), pentru a vedea ce pagini sunt legate de obiectele sale, și folosind modelul rol stabilit, arată utilizatorul numai lista de intrări, care sunt asociate cu paginile disponibile pentru el.

Utilizăm vizualizarea APEX APEX_APPLICATION_LIST_ENTRIES, în care există informații care pagini sunt atașate la care obiecte de navigare. Pentru a nu susține un tabel separat cu un alt rol de comunicare -> obiect de navigație, de a crea o prezentare, care leagă rolul și înregistrări pe listă pe baza unui rol de comunicare -> Pagina:

SET DEFINE OFF;
CREATE OR REPLACE VIEW EDITIONABLE ROLE_LIST_ENTRY ( "USER_ROLE". "LIST_ENTRY_ID") AS
selectați p.user_role distinct, l.list_entry_id
de la apex_application_list_entries l
se alăture role_page p pe l.entry_target like'f? p = APP_ID.: '|| p.page_id || ':% SESSION%' sau input_target este null
unde l.list_name = 'Meniu de navigare desktop'
și l.application_id = <номер вашего приложения> ;

Dacă faceți selectați din vizualizarea creată, puteți observa că pentru rolul ADMIN există 3 intrări în listă, iar pentru USER - numai 2:

Este timpul să faceți un meniu de navigare dinamic. Pentru a face acest lucru, în meniul Componente partajate -> Navigare, creați un nou meniu: alegeți "De la zero" și Dynamic, în fereastra de interogare SQL afișată, introduceți următoarele:

selectați nivelul. eticheta al.entry_text. al.entry_target

de la apex_application_list_entries al

se alăture ROLE_LIST_ENTRY rl pe al.list_entry_id = rl.list_entry_id

alăture USER_ROLE ur pe ur.user_role = rl.user_role și superior (ur.user_name) = superioară (: APP_USER)

al.LIST_NAME = "Meniu de navigare desktop"

și al.application_id = <номер вашего приложения>

începe cu al.list_entry_parent_id este null

conectați după al.list_entry_id = al.list_entry_parent_id

ordonează frații cu al.display_sequence

Acum trebuie să selectați meniul de navigare dinamic pentru interfața noastră. Pentru a face acest lucru, reveniți la Atributele componentelor partajate -> Interfața utilizatorului. În secțiunea Interfață utilizator, faceți clic pe pictograma pentru editarea interfeței curente și accesați detaliile despre interfața cu utilizatorul. În meniul de navigare, selectați meniul pe care l-am creat și faceți clic pe "Aplicați modificările"

Acum, USER1 și USER2 nu vor apărea în meniul de navigare Report Audit când vă conectați la aplicație:

Mai multe articole despre APEX:

Conectați-vă cu rețeaua socială







Trimiteți-le prietenilor: