2017-11-16 5 views
-1

私はいくつかのテーブルを持つデータベースを持っています。 ユーザーには複数のオブジェクトがあり、オブジェクトには複数の部分があります。Postgresqlの行レベルのセキュリティINSERTのポリシーでWITH CHECKの新しいデータをチェックします

私は、オブジェクトの作成者だけがオブジェクトに部品を追加できるというポリシーを書いておきたいと思います。したがって、私はオブジェクトを取得する必要がある部分が属しているに挿入するが、私はどのようにデータをチェックするか分からない。

ポリシーにデータを挿入する方法はありますか?

ご協力いただきありがとうございます。

答えて

0

ここでは、行レベルのセキュリティでそれを実装する方法の例を示します。それをあなたの必要に合わせてください!

CREATE TABLE object(
    id integer PRIMARY KEY, 
    name text NOT NULL, 
    owner name NOT NULL DEFAULT current_user 
); 

CREATE TABLE part(
    id integer PRIMARY KEY, 
    parent_id integer NOT NULL REFERENCES object(id), 
    name text NOT NULL 
); 

我々は、人々にいくつかの権限を付与する必要があります。

GRANT SELECT, INSERT ON object TO PUBLIC; 
GRANT SELECT, INSERT ON part TO PUBLIC; 

は、今、私たちは、行レベルのセキュリティを有効にしてpartときownerobjectで試合にのみINSERT秒を許可する:

ALTER TABLE part ENABLE ROW LEVEL SECURITY; 

CREATE POLICY insert_only_owned ON part 
    FOR INSERT TO PUBLIC 
    WITH CHECK (EXISTS(
        SELECT 1 
        FROM object o 
        WHERE o.id = parent_id 
        AND owner = current_user 
      )); 
+0

ゴージャスローレンツ。できます。どうもありがとう。 – cgfm

関連する問題