Ҳамчун илова ба
Қисми назариявӣ дар ҳуҷҷатҳо хуб тасвир шудааст
Дар макола ягон чизи наве нест, маънои нихонй ва дониши махфй нест. Факат эскиз дар бораи татбици амалии идеяи назариявй. Агар касе шавқ дошта бошад, хонед. Агар шумо шавқ надошта бошед, вақти худро беҳуда сарф накунед.
Тартиб додани масъала
Бидуни амиқ ба мавзӯи мавзӯъ, ба таври мухтасар, мушкилотро метавон ба таври зерин таҳия кард: Ҷадвале мавҷуд аст, ки як субъекти тиҷоратиро амалӣ мекунад. Сатрҳои ҷадвалро нест кардан мумкин аст, аммо сатрҳоро аз ҷиҳати ҷисмонӣ нест кардан мумкин нест; онҳо бояд пинҳон карда шаванд.
Зеро гуфта мешавад: «Ҳеҷ чизро нест накунед, танҳо онро тағир диҳед. Интернет ҳама чизро нигоҳ медорад"
Дар баробари ин, тавсия дода намешавад, ки функсияҳои мавҷудаи захирашуда, ки бо ин объект кор мекунанд, аз нав нанависед.
Барои татбиқи ин консепсия ҷадвал дорои атрибут мебошад нест карда шудааст. Он гоҳ ҳама чиз оддӣ аст - шумо бояд боварӣ ҳосил кунед, ки муштарӣ метавонад танҳо сатрҳои дар он атрибутӣ дид нест карда шудааст дурӯғ Механизм барои чӣ истифода мешавад? Амнияти сатҳи сатр.
Реализация
Нақш ва схемаи алоҳида эҷод кунед
CREATE ROLE repos;
CREATE SCHEMA repos;
Ҷадвали мақсаднокро эҷод кунед
CREATE TABLE repos.file
(
...
is_del BOOLEAN DEFAULT FALSE
);
CREATE SCHEMA repos
Мо дохил мекунем Амнияти сатрҳои сатр
ALTER TABLE repos.file ENABLE ROW LEVEL SECURITY ;
CREATE POLICY file_invisible_deleted ON repos.file FOR ALL TO dba_role USING ( NOT is_deleted );
GRANT ALL ON TABLE repos.file to dba_role ;
GRANT USAGE ON SCHEMA repos TO dba_role ;
Функсияи хидматрасонӣ — нест кардани сатри ҷадвал
CREATE OR REPLACE repos.delete( curr_id repos.file.id%TYPE)
RETURNS integer AS $$
BEGIN
...
UPDATE repos.file
SET is_del = TRUE
WHERE id = curr_id ;
...
END
$$ LANGUAGE plpgsql SECURITY DEFINER;
Функсияи тиҷоратӣ — нест кардани ҳуҷҷат
CREATE OR REPLACE business_functions.deleteDoc( doc_for_delete JSON )
RETURNS JSON AS $$
BEGIN
...
PERFORM repos.delete( doc_id ) ;
...
END
$$ LANGUAGE plpgsql SECURITY DEFINER;
натиҷаҳои
Муштарӣ ҳуҷҷатро нест мекунад
SELECT business_functions.delCFile( (SELECT json_build_object( 'CId', 3 )) );
Пас аз нест кардан, муштарӣ ҳуҷҷатро намебинад
SELECT business_functions.getCFile"( (SELECT json_build_object( 'CId', 3 )) ) ;
-----------------
(0 rows)
Аммо дар базаи маълумот ҳуҷҷат нест карда намешавад, танҳо атрибут иваз карда мешавад is_del
psql -d my_db
SELECT id, name , is_del FROM repos.file ;
id | name | is_del
--+---------+------------
1 | test_1 | t
(1 row)
Он чизе ки дар изҳороти мушкилот талаб карда мешуд.
Натиҷа
Агар мавзӯъ ҷолиб бошад, дар омӯзиши навбатӣ шумо метавонед намунаи татбиқи модели нақшро барои ҷудо кардани дастрасии додаҳо бо истифода аз сатҳҳои амнияти сатҳ нишон диҳед.
Манбаъ: will.com