具有 Postgraphile 的现场授权级别
Field Authorization level with Postgraphile
目前,我正在使用 Postgraphile,我需要在 data/field 级别执行权限。
例如,我有一个 carmodel table,我的查询是这样的:
{
carmodel
{
id
name
description
}
}
好吧,在这个 table 中我有 ID(1 = AUDI,2 = GM,3 = BMW)
当前用户(在 roles/claims 上)仅具有查看 (1=AUDI/3=BMW)
的权限
有没有一种方法可以根据字段数据强制执行权限? return 仅根据用户权限过滤数据?
是;行级安全性可以以声明方式定义。类似于:
create policy audi_bmw on carmodel for select using (
id in (1, 3)
);
不过我猜这个许可来自另一个 table;所以它可能更像是:
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;
目前,我正在使用 Postgraphile,我需要在 data/field 级别执行权限。
例如,我有一个 carmodel table,我的查询是这样的:
{
carmodel
{
id
name
description
}
}
好吧,在这个 table 中我有 ID(1 = AUDI,2 = GM,3 = BMW) 当前用户(在 roles/claims 上)仅具有查看 (1=AUDI/3=BMW)
的权限有没有一种方法可以根据字段数据强制执行权限? return 仅根据用户权限过滤数据?
是;行级安全性可以以声明方式定义。类似于:
create policy audi_bmw on carmodel for select using (
id in (1, 3)
);
不过我猜这个许可来自另一个 table;所以它可能更像是:
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;