TÀienduseks ja peamiselt pÔhjaliku vastuse jaoks . Tundub, et .
Teoreetiline osa on dokumentatsioonis suurepĂ€raselt kirjeldatud â . Allpool kĂ€sitletakse vĂ€ikese konkreetse Ă€riprobleemi â kustutatud andmete peitmine. EtĂŒĂŒd on pĂŒhendatud rakendamisele on esitatud eraldi.

Artiklis ei ole midagi uut, pole peidetud tÀhendust ega saladusi. Lihtsalt visand teoreetilise idee praktilisest rakendamisest. Kui see huvitab, lugege. Kui ei, siis Àrge raisake oma aega.
Ălesande seadmine
Mitte sĂŒvenedes sĂŒgavale teemasse, on ĂŒlesanne lĂŒhidalt jĂ€rgmine: on tabel, mis rakendab mingit Ă€riĂŒksust. Tabelist saavad read kustutatud, kuid fĂŒĂŒsiliselt ei tohi ridu kustutada, neid tuleb peita.
Nagu öeldud â 'Ăra kustuta midagi, lihtsalt nimetage ĂŒmber. Internet hoiab KĂIKE'
Samas on soovitav mitte kirjutada ĂŒmber juba olemasolevaid salvestatud funktsioone, mis töötavad selle ĂŒksusega.
Selle kontseptsiooni rakendamiseks on tabelil atribuut is_deleted. Edasi on kĂ”ik lihtne â tuleb teha nii, et klient nĂ€eb ainult ridu, kus atribuut is_deleted on vale. Selleks kasutatakse Ridade taseme turvalisust.
Rakendamine
Loome eraldi rolli ja skeemi
LOODE ROLLI repos;
LOODE SKEEM repos;Loome sihtotstarbelise tabeli
LOODE TABEL repos.file
(
...
is_del BOOLEAN DEFAULT FALSE
);
LOODE SKEEM reposLĂŒlitame sisse Rea taseme turvalisuse
MUUDA TABEL repos.file LUBA REA TASEME TURVALISUS ;
LOODE POLIITIKA file_invisible_deleted ON repos.file KĂIK DBA_ROLLILE KASUTAMINE (MITTE is_deleted );
ANNE KĂIK TABELILE repos.file dba_rollile ;
ANNE KASUTUS SKEEMILE repos dba_rollile ;Teenindusfunktsioon â rida kustutamine tabelis
LOODE VĂI ASENDA repo.delete( curr_id repos.file.id%TĂĂP)
NAJAL integer KUI $$
ALUSTAGE
...
UUENDAGE repos.file
SEADKE is_del = TĂENE
KUS id = curr_id ;
...
LĂPP
$$ KEEL plpgsql TURVALINE DEFINIATOR;Ărifunktsioon â dokumentide kustutamine
LOODE VĂI ASENDA business_functions.deleteDoc( doc_for_delete JSON )
NAJAL JSON KUI $$
ALUSTAGE
...
SOORITUSTA repos.delete( doc_id ) ;
...
LĂPP
$$ KEEL plpgsql TURVALINE DEFINIATOR;tulemused nÀitasid ainult nelja ebaolulise koodibloki kattuvust, mis olid tingitud POSIX ja ANSI C nÔuetest.
Klient kustutab dokumendi
VALI business_functions.delCFile( (VALI json_build_object( 'CId', 3 )) );PÀrast kustutamist ei nÀe dokumendi klient
VALI business_functions.getCFile"( (VALI json_build_object( 'CId', 3 )) ) ;
-----------------
(0 rida)Kuid andmebaasis ei ole dokument kustutatud, vaid ainult atribuudi is_del
psql -d my_db
VALI id, name , is_del FROM repos.file ;
id | name | is_del
--+---------+------------
1 | test_1 | t
(1 rida)Just seda nĂ”uti ĂŒlesande mÀÀramisel.
KokkuvÔte
Kui teema tundub huvitav, siis jĂ€rgmises etĂŒĂŒdis saab nĂ€idata nĂ€idet rollimudeli rakendamisest andmete juurdepÀÀsu jagamiseks, kasutades Row Level Security't.
Allikas: habr.com
