အဖြည့်အဖြစ်
စာတမ်းတွင် သီအိုရီအပိုင်းကို ကောင်းစွာဖော်ပြထားသည်။
ဆောင်းပါးတွင် အသစ်အဆန်းမဟုတ်ပါ၊ လျှို့ဝှက်အဓိပ္ပာယ် သို့မဟုတ် လျှို့ဝှက်အသိပညာမရှိပါ။ သီအိုရီတစ်ခု၏ စိတ်ကူးကို လက်တွေ့အကောင်အထည်ဖော်ခြင်းအကြောင်း ပုံကြမ်းတစ်ခုမျှသာဖြစ်သည်။ စိတ်ဝင်စားတဲ့သူရှိရင် ဖတ်ကြည့်လိုက်ပါ။ စိတ်မဝင်စားရင် အချိန်မဖြုန်းပါနဲ့။
ပြဿနာကိုပုံဖော်ခြင်း
ဘာသာရပ်နယ်ပယ်ထဲသို့ နက်နက်နဲနဲ မ၀င်ရောက်ဘဲ အတိုချုပ်အားဖြင့် ပြဿနာကို အောက်ပါအတိုင်း ပုံဖော်နိုင်သည် ။ အချို့သော စီးပွားရေးလုပ်ငန်းတစ်ခုကို အကောင်အထည်ဖော်သည့် ဇယားတစ်ခုရှိသည်။ ဇယားရှိ အတန်းများကို ဖျက်နိုင်သော်လည်း အတန်းများကို ရုပ်ပိုင်းဆိုင်ရာ ဖျက်၍မရပါ၊ ၎င်းတို့ကို ဝှက်ထားရပါမည်။
“ဘာကိုမှ မဖျက်ပါနဲ့၊ နာမည်ပြောင်းရုံပါပဲ။ အင်တာနက်က အရာအားလုံးကို သိမ်းဆည်းထားတယ်"
လမ်းတစ်လျှောက်တွင်၊ ဤအရာနှင့်အလုပ်လုပ်သော ရှိပြီးသားသိမ်းဆည်းထားသောလုပ်ဆောင်ချက်များကို ပြန်လည်မရေးရန် အကြံပြုလိုပါသည်။
ဤအယူအဆကိုအကောင်အထည်ဖော်ရန်၊ ဇယားတွင် attribute ရှိသည်။ ဖျက်လိုက်ပါပြီ။. ထို့နောက်အရာအားလုံးသည်ရိုးရှင်းသည် - client သည် attribute ပါသောလိုင်းများကိုသာမြင်နိုင်ကြောင်းသေချာရန်လိုအပ်သည်။ ဖျက်လိုက်ပါပြီ။ အတုအယောင် ယန္တရားက ဘာအတွက်သုံးတာလဲ။ အတန်းအဆင့် လုံခြုံရေး။
အကောင်အထည်ဖော်မှု
သီးခြားအခန်းကဏ္ဍနှင့် schema ဖန်တီးပါ။
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;
ရလဒ်များကို
client သည် စာရွက်စာတမ်းကို ဖျက်သည်။
SELECT business_functions.delCFile( (SELECT json_build_object( 'CId', 3 )) );
ဖျက်ပြီးနောက်၊ client သည် စာရွက်စာတမ်းကို မတွေ့ပါ။
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)
ပြဿနာထုတ်ပြန်ချက်တွင် မည်သည့်အရာ လိုအပ်သနည်း။
ရလဒ်
ခေါင်းစဉ်က စိတ်ဝင်စားစရာဖြစ်ပါက၊ နောက်လေ့လာမှုတွင် Row Level Security ကို အသုံးပြု၍ ဒေတာဝင်ရောက်ခွင့်ကို ပိုင်းခြားရန် အခန်းကဏ္ဍအခြေခံစံနမူနာကို အကောင်အထည်ဖော်ခြင်း၏ နမူနာကို သင်ပြသနိုင်ပါသည်။
source: www.habr.com