Si një shtesë për dhe në thelb për një përgjigje të zgjeruar në .
Pjesa teorike Ă«shtĂ« e shkruar shumĂ« mirĂ« nĂ« dokumentacion â . MĂ« poshtĂ« paraqitet realizimi praktik i njĂ« problemi specifik tĂ« biznesit â fshehja e tĂ« dhĂ«nave tĂ« fshirura. Studimi i dedikuar implementimit tĂ« Ă«shtĂ« paraqitur veçmas.

NĂ« artikull nuk ka asgjĂ« tĂ« re, nuk ka kuptim tĂ« fshehur dhe njohuri sekrete. Thjesht njĂ« skicĂ« mbi realizimin praktik tĂ« njĂ« ideje teorike. NĂ«se dikujt i intereson â lexoni. NĂ«se nuk intereson â mos e humbni kohĂ«n tuaj kot.
Vendosja e detyrës
Pa u thelluar shumë në fushën e lëndës, shkurt, detyra mund të formulohet si më poshtë: ka një tabelë që realizon një entitet të caktuar biznesi. Rreshtat në tabelë mund të fshihen, por nuk mund të fshihen fizikisht, duhet të fshihen.
Sepse Ă«shtĂ« thĂ«nĂ« â "Mos fshi asgjĂ«, thjesht riemĂ«roje. Interneti ruan GJITHĂKA"
Përveç kësaj, është e dëshirueshme të mos rishkruhen funksionet e pagabueshme që tashmë funksionojnë me këtë entitet.
PĂ«r tĂ« realizuar kĂ«tĂ« koncept, tabela ka atributin is_deleted. MĂ« pas, çdo gjĂ« Ă«shtĂ« e thjeshtĂ« â Ă«shtĂ« e nevojshme tĂ« bĂ«het qĂ« klienti tĂ« mund tĂ« shohĂ« vetĂ«m rreshtat ku atributi is_deleted Ă«shtĂ« i falsifikuar. PĂ«r kĂ«tĂ« shĂ«rben mekanizmi Siguria nĂ« Nivel tĂ« Rreshtave.
Realizimi
Krijojmë një rol dhe një skemë të veçantë
Krijo ROL repos;
Krijo SKEMà repos;Krijojmë tabelën e synuar
Krijo TABELĂ repos.file
(
...
is_del BOOLEAN DEFAULT FALSE
);
Krijo SKEMà reposAktivizojmë Siguria në Nivel të Rreshtave
MODIFIKO TABELĂ repos.file ENABLE ROW LEVEL SECURITY;
Krijo POLITIKĂ file_invisible_deleted ON repos.file PĂR TĂ GJITHA NGA dba_role PĂRDORIMI (Nuk Ă«shtĂ« is_deleted);
PROFITO Tà GJITHA Nà TABELà repos.file për dba_role;
PROFITO KĂRKIMIN NĂ SKEMĂ repos pĂ«r dba_role;Funksioni shĂ«rbyes â fshirja e njĂ« rreshti nĂ« tabelĂ«
Krijo OSE ZVENDOS repos.delete(curr_id repos.file.id%TYPE)
KTHE INTEGER AS $$
FILLIM
...
MODIFIKO repos.file
SET is_del = TRUE
KU ID = curr_id;
...
FUND
$$ GJUHA plpgsql SIGURIA DEFINER;Funksioni i biznesit â fshirja e dokumentit
Krijo OSE ZVENDOS business_functions.deleteDoc(doc_for_delete JSON)
KTHE JSON AS $$
FILLIM
...
PERFORM repos.delete(doc_id);
...
FUND
$$ GJUHA plpgsql SIGURIA DEFINER;Rezultatet
Klienti fshin dokumentin
SELECT business_functions.delCFile((SELECT json_build_object('CId', 3)));Pas fshirjes, klienti i dokumentit nuk e sheh
SELECT business_functions.getCFile((SELECT json_build_object('CId', 3)));
-----------------
(0 rreshta)Por në DB dokumenti nuk është fshirë, vetëm është ndryshuar atributi is_del
psql -d my_db
SELECT id, name, is_del FROM repos.file;
id | name | is_del
--+---------+------------
1 | test_1 | t
(1 rresht)ĂfarĂ« ishte e nevojshme pĂ«r tĂ« sqaruar objektivin.
Përfundimi
Nëse tema do të jetë interesante, në etyudin e ardhshëm mund të tregohet një shembull i zbatimit të modelit të rolit për ndarjen e aksesit në të dhëna duke përdorur Sigurinë në Nivelin e Rreshtave.
Burimi: habr.com
