涉及视图的 PostgreSQL row-level 安全性或具有连接的 select

PostgreSQL row-level security involving a view or a select with join

(欢迎提出更好或 more-descriptive 标题的建议)。

我想知道在使用 RLS(或任何其他机制)的 PostgreSQL 中是否可以实现以下功能。如果用户的用户名与另一个 table 中的列匹配,我希望用户能够更新 table 的某些行。在下面的示例中,我希望在 table t0 中显示为列 u 的用户 nene 能够更新列 ap 在 table t2 中。我想表达的是将策略应用于 t2 中的行,这些行将与以下 select 语句匹配:SELECT a, p FROM t2 INNER JOIN t1 ON (t2.t1id = t1.id) INNER JOIN t0 ON (t1.t0id = t0.id) WHERE t0.u = 'nene';

这可能吗?关于如何进行的任何建议?一个明显的解决方法是在 table t2 上复制用户名,但这会在 t2 上添加无关信息并且需要执行额外的约束。

这是我的三个table(实际情况下还有更多的字段,table t1不能排除问题;我把它留在例子中,因为需要两个加入可能会改变解决方案 space).

尝试

CREATE POLICY t2_policy_update ON t2 FOR UPDATE
    USING (EXISTS (SELECT * FROM t1 INNER JOIN t0 ON (t1.t0id = t0.id) WHERE t0.u = session_user AND t1id = t1.id))