Fandalinana momba ny fampiharana ny fiarovana an'ny Row Level ao amin'ny PostgreSQL

Ho famenon'ny Fandalinana momba ny fampiharana ny lojikan'ny fandraharahana amin'ny ambaratongan'ny fiasa voatahiry PostgreSQL и indrindra ho an'ny valiny amin'ny antsipiriany amin'ny fanehoan-kevitra.

Ny ampahany teorika dia voafaritra tsara ao amin'ny antontan-taratasy PostgreSQL - Politika fiarovana andalana. Ity ambany ity ny fampiharana azo ampiharina kely asa fandraharahana manokana - manafina angona voafafa. Sketch natokana ho an'ny fampiharana Modely amin'ny RLS atolotra mitokana.

Fandalinana momba ny fampiharana ny fiarovana an'ny Row Level ao amin'ny PostgreSQL

Tsy misy zava-baovao ao amin'ny lahatsoratra, tsy misy dikany miafina na fahalalana miafina. Soso-kevitra fotsiny momba ny fampiharana azo ampiharina amin'ny hevitra teorika. Raha misy liana dia vakio. Raha tsy liana ianao dia aza mandany fotoana.

Fanambarana olana

Raha tsy mitsoraka lalina ao amin'ny faritry ny foto-kevitra, vetivety, ny olana dia azo amboarina toy izao manaraka izao: Misy latabatra iray izay mametraka orinasa iray. Ny andalana ao amin'ny latabatra dia azo fafana, fa ny andalana tsy azo fafana ara-batana fa tsy maintsy afenina.

Fa voalaza hoe: “Aza mamafa na inona na inona, ovao fotsiny ny anarany. Ny Internet dia mitahiry ny zava-drehetra"

Teny an-dalana dia tsara ny tsy mamerina manoratra ireo fiasa voatahiry efa misy miasa miaraka amin'ity sampana ity.

Mba hampiharana io hevitra io dia manana ny toetra ny latabatra dia_fafa. Dia tsotra ny zava-drehetra - mila mahazo antoka ianao fa ny mpanjifa dia afaka mahita afa-tsy ny tsipika izay ny toetra dia_fafa DISO Inona no atao hoe mekanika? Row Level Security.

fanatanterahana

Mamorona andraikitra sy tetika misaraka

CREATE ROLE repos;
CREATE SCHEMA repos;

Mamorona ny latabatra kendrena

CREATE TABLE repos.file
(
...
is_del BOOLEAN DEFAULT FALSE
);
CREATE SCHEMA repos

Alefaso Fiarovana amin'ny laharana

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 ;

Asa fanompoana - famafana andalana iray eo amin'ny latabatra

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;

Asa fandraharahana - famafana antontan-taratasy

CREATE OR REPLACE business_functions.deleteDoc( doc_for_delete JSON )
RETURNS JSON AS $$
BEGIN
...
PERFORM  repos.delete( doc_id ) ;
...
END
$$ LANGUAGE plpgsql SECURITY DEFINER;

vokatra

Ny mpanjifa dia mamafa ny antontan-taratasy

SELECT business_functions.delCFile( (SELECT json_build_object( 'CId', 3 )) );

Aorian'ny famafana dia tsy hitan'ny mpanjifa ilay antontan-taratasy

SELECT business_functions.getCFile"( (SELECT json_build_object( 'CId', 3 )) ) ;
-----------------
(0 rows)

Fa ao amin'ny tahiry dia tsy voafafa ny antontan-taratasy, ny toetra ihany no miova is_del

psql -d my_db
SELECT  id, name , is_del FROM repos.file ;
id |  name  | is_del
--+---------+------------
 1 |  test_1 | t
(1 row)

Izay no takiana amin'ny fanambarana olana.

Ny vokany

Raha mahaliana ny lohahevitra, amin'ny fianarana manaraka dia azonao atao ny mampiseho ohatra iray amin'ny fampiharana ny modely mifototra amin'ny anjara amin'ny fanasarahana ny fidirana amin'ny angona amin'ny fampiasana Row Level Security.

Source: www.habr.com

Add a comment