Ut complementum
Pars theorica optime describitur in documentis
Nihil novi in ββarticulo, non est occulta significatio vel scientia secreta. Iustus adumbratio circa exsecutionem ideae theoreticae. Si quis interroget, lege hoc. Si non quaero, ne tempus perdis.
DE PECCATO quaestio
Sine penitus in subjectam partem tribuo, problema sic breviter enuntiari potest; Mensa est quae quoddam negotium ens conficit. Ordines in tabella deleri possunt, sed ordines physice deleri non possunt, occultari debent.
Dicitur enim: βNihil dele, modo illud nomen. Penitus recondit OMNIA "
Per viam, opportunum est functiones reconditas existentium rescribere quae cum hac re operantur.
Ad hunc notionem efficiendum, mensa habet attributum is_deleted. Tunc omnia simplicia sunt - opus fac ut cliens solas lineas in quibus attributum videre possit is_deleted falsus Quid est mechanism usus est? Row Level Securitatis.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ
Partes singulas crea et schema
CREATE ROLE repos;
CREATE SCHEMA repos;
Creare in scopum in mensa
CREATE TABLE repos.file
(
...
is_del BOOLEAN DEFAULT FALSE
);
CREATE SCHEMA repos
includuntur Level row Security
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 ;
Munus muneris - delendo row in mensa
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;
Negotium munus - delendo documentum
CREATE OR REPLACE business_functions.deleteDoc( doc_for_delete JSON )
RETURNS JSON AS $$
BEGIN
...
PERFORM repos.delete( doc_id ) ;
...
END
$$ LANGUAGE plpgsql SECURITY DEFINER;
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΡ
Cliens delet documentum
SELECT business_functions.delCFile( (SELECT json_build_object( 'CId', 3 )) );
Post deletionem, cliens documentum non videt
SELECT business_functions.getCFile"( (SELECT json_build_object( 'CId', 3 )) ) ;
-----------------
(0 rows)
Sed documentum in datorum non deletur, solum attributum mutatur is_del
psql -d my_db
SELECT id, name , is_del FROM repos.file ;
id | name | is_del
--+---------+------------
1 | test_1 | t
(1 row)
Id quod requirebatur in problemate propositione.
exitum
Si locus interesting est, in proximo studio exemplum monstrare potes exsequendi munus substructum exemplar ad notitias dividendas accessus utendi Row Level Securitatis.
Source: www.habr.com