我正在尝试实现一个视图级规则,以限制可用的列为特定的web_anonymous"postgresql api的用户。例如,在事件视图中,我不希望整个视图对该组可用,因此将其限制为某些列。
这是我的代码
ON SELECT TO manifestation.ds_evenements
WHERE (CURRENT_USER = 'web_anonyme')
DO INSTEAD
(SELECT nom_evenement, description_evenement
FROM manifestation.ds_evenements);
当我想要验证规则时,我有这个错误消息,我无法解释:
ERROR: Event qualifications are not implemented for rules on SELECT
最好的方面
不能创建带有WHERE
条件的ON SELECT
规则。而且,你的规则是循环的。
不要试图使用规则。相反,应该定义视图,让它做正确的事情,例如:
CREATE VIEW ... AS
SELECT /* something */
WHERE current_user IS DISTINCT FROM 'web_anonyme'
UNION ALL
SELECT /* something else */
WHERE current_user = 'web_anonyme';
另一种选择可能是在底层表上使用行级安全性,并结合security_invoker
视图。