د بشپړولو په توګه
نظري برخه په اسنادو کې ښه تشریح شوې
په مقاله کې هیڅ نوی نشته، هیڅ پټ معنی یا پټ پوهه نشته. د نظري مفکورې د عملي تطبیق په اړه یوازې یو خاکه. که څوک یې لیواله وي، ولولئ. که تاسو علاقه نه لرئ، خپل وخت مه ضایع کوئ.
د ستونزې تشکیل
پرته له دې چې د موضوع ساحه کې ژوره ډوبه وکړو، په لنډه توګه، ستونزه په لاندې ډول ترتیب کیدی شي: دلته یو میز شتون لري چې یو مشخص سوداګریز ارګان پلي کوي. په جدول کې قطارونه حذف کیدی شي، مګر قطارونه په فزیکي توګه نه شي حذف کیدی؛ دوی باید پټ شي.
ځکه چې ویل کیږي: "هیڅ شی مه حذف کوئ، یوازې نوم یې بدل کړئ. انټرنیټ هر څه ذخیره کوي"
د لارې په اوږدو کې، دا مشوره ورکول کیږي چې موجوده زیرمه شوي فعالیتونه بیا ونه لیکئ چې د دې ادارې سره کار کوي.
د دې مفکورې پلي کولو لپاره، جدول ځانګړتیا لري ړنګ شوی دی. بیا هرڅه ساده دي - تاسو اړتیا لرئ ډاډ ترلاسه کړئ چې پیرودونکي یوازې هغه لینونه لیدلی شي چې په هغه کې صفت ړنګ شوی دی دروغ میکانیزم د څه لپاره کارول کیږي؟ د قطار په کچه امنیت.
پلي کول
یو جلا رول او سکیما جوړه کړئ
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)
کوم چې د ستونزې په بیان کې اړین و.
نتیجه
که موضوع په زړه پورې وي، په راتلونکې څیړنه کې تاسو کولی شئ د قطار کچې امنیت په کارولو سره د معلوماتو لاسرسي جلا کولو لپاره د رول پر بنسټ ماډل پلي کولو مثال وښایئ.
سرچینه: www.habr.com