当前,我正在与Postgraphile合作,我需要在数据/字段级别强制执行权限。
例如,我有一个汽车模型表,查询如下:
{
carmodel
{
id
name
description
}
}
好吧,在此表中,我有ID(1 = AUDI,2 = GM,3 = BMW) 当前用户(具有角色/声明)仅具有查看(1 = AUDI / 3 = BMW)的权限
有一种方法可以基于字段数据强制执行权限?并仅返回根据用户权限过滤的数据?
答案 0 :(得分:1)
是;行级安全性可以声明性地定义。像这样:
create policy audi_bmw on carmodel for select using (
id in (1, 3)
);
我猜想这个权限来自另一个表;所以可能更像是:
create policy audi_bmw on carmodel for select using (
id in (
select car_model_id
from user_carmodel_permissions
where user_id = current_user_id()
)
);
假设您已经具有current_user_id
函数,例如:
create function current_user_id() returns int as $$
select nullif(current_setting('jwt.claims.user_id', true), '')::int;
$$ language sql stable;