具有 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;

查看 our row level security cheatsheet