Mar thaic ri
Tha am pàirt teòiridheach air a mhìneachadh gu math anns na sgrìobhainnean
Chan eil dad ùr san artaigil, chan eil brìgh falaichte no eòlas dìomhair ann. Dìreach sgeidse mu bhuileachadh practaigeach beachd teòiridheach. Ma tha ùidh aig duine sam bith, leugh e. Mura h-eil ùidh agad, na caill an ùine agad.
Aithris dhuilgheadas
Gun a bhith a 'dàibheadh gu domhainn a-steach don raon cuspair, goirid, faodar an duilgheadas a dhealbhadh mar a leanas: Tha clàr ann a bhios a’ buileachadh eintiteas gnìomhachais sònraichte. Faodar sreathan sa chlàr a dhubhadh às, ach chan urrainnear sreathan a dhubhadh às gu corporra; feumaidh iad a bhith falaichte.
Oir thathar ag ràdh: “Na sguab às dad, dìreach ainmich e. Bidh an eadar-lìn a’ stòradh a h-uile càil"
Air an t-slighe, tha e ciallach gun a bhith ag ath-sgrìobhadh gnìomhan gnàthaichte a tha ag obair leis an eintiteas seo.
Gus am bun-bheachd seo a bhuileachadh, tha am feart aig a’ chlàr tha_ air a sguabadh às. An uairsin tha a h-uile dad sìmplidh - feumaidh tu dèanamh cinnteach nach fhaic an neach-dèiligidh ach na loidhnichean anns a bheil am feart tha_ air a sguabadh às breugach Dè an uidheam a thathar a' cleachdadh airson? Tèarainteachd ìre sreath.
Реализация
Cruthaich àite agus sgeama air leth
CREATE ROLE repos;
CREATE SCHEMA repos;
Cruthaich an clàr targaid
CREATE TABLE repos.file
(
...
is_del BOOLEAN DEFAULT FALSE
);
CREATE SCHEMA repos
Tionndaidh air Tèarainteachd Ìre Row
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 ;
Gnìomh seirbheis - cuir às do shreath sa chlàr
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;
Gnìomh gnìomhachais - a sguabadh às sgrìobhainn
CREATE OR REPLACE business_functions.deleteDoc( doc_for_delete JSON )
RETURNS JSON AS $$
BEGIN
...
PERFORM repos.delete( doc_id ) ;
...
END
$$ LANGUAGE plpgsql SECURITY DEFINER;
Toraidhean
Bidh an neach-dèiligidh a’ cuir às don sgrìobhainn
SELECT business_functions.delCFile( (SELECT json_build_object( 'CId', 3 )) );
Às deidh a dhubhadh às, chan fhaic an neach-dèiligidh an sgrìobhainn
SELECT business_functions.getCFile"( (SELECT json_build_object( 'CId', 3 )) ) ;
-----------------
(0 rows)
Ach anns an stòr-dàta chan eil an sgrìobhainn air a dhubhadh às, chan eil ach am feart air atharrachadh tha_del
psql -d my_db
SELECT id, name , is_del FROM repos.file ;
id | name | is_del
--+---------+------------
1 | test_1 | t
(1 row)
Sin na bha a dhìth anns an aithris duilgheadas.
An toradh
Ma tha an cuspair inntinneach, anns an ath sgrùdadh faodaidh tu eisimpleir de bhith a’ cur an gnìomh modal stèidhichte air dreuchd airson a bhith a’ sgaradh ruigsinneachd dàta a’ cleachdadh Row Level Security.
Source: www.habr.com