Postgraphile的现场授权级别

时间:2019-11-25 07:30:07

标签: graphql postgraphile

当前,我正在与Postgraphile合作,我需要在数据/字段级别强制执行权限。

例如,我有一个汽车模型表,查询如下:

{
   carmodel
      {  
         id
         name
         description
      }
}

好吧,在此表中,我有ID(1 = AUDI,2 = GM,3 = BMW) 当前用户(具有角色/声明)仅具有查看(1 = AUDI / 3 = BMW)的权限

有一种方法可以基于字段数据强制执行权限?并仅返回根据用户权限过滤的数据?

1 个答案:

答案 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;

签出our row level security cheatsheet