PostgreSQL / PostGraphile行权限不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PostgreSQL / PostGraphile行权限不起作用相关的知识,希望对你有一定的参考价值。

我正在尝试使用PostGraphile(以前称为PostGraphQL)设置GraphQL服务器,但我无法获得行权限,这意味着我不断获取权限被拒绝的消息,尽管它应该有效。这是我的架构:

create function app.current_user() returns app.profile as $$
  select *
  from app.profile
  where id = current_setting('jwt.claims.person_id')::integer
$$ language sql stable;

comment on function app.current_user() is 'Gets the person who was identified by our JWT.';

grant select (name,about,created_at,updated_at) on table app.profile to app_user;
grant update (name,about) on table app.profile to app_user;
alter table app.profile enable row level security;


create policy select_profile on app.profile for select to app_user
  using (id = current_setting('jwt.claims.person_id')::integer);

create policy update_profile on app.profile for update to app_user
  using (id = current_setting('jwt.claims.person_id')::integer);

就我在调试输出中看到的而言,一切都按预期工作。我可以进行身份​​验证,获取JWT令牌,当JWT令牌无效时,它会在正确的错误消息中抱怨,所以它不是任何一个。

我做错了什么,或者我如何更仔细地调试发生的事情?

我正在使用PostGraphile v4和PostgreSQL 10.4

答案

自己发现了这个问题。事实证明,您必须对id赋予权限,即使您没有选择它,也只能在WHERE部分中使用它。

所以在上面的例子中,将其修改为:

将表app.profile上的select(id,name,about,created_at,updated_at)授予app_user;

那它应该工作。

以上是关于PostgreSQL / PostGraphile行权限不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Postgraphile + express + jwt 正在抛出“未找到授权令牌”,即使 graphiql 有效

AWS 弹性 beantalk 上的 postgraphile 出现 408 超时错误

PostGraphile deleteEdge 具有多对多关系

当我的 GraphQL 架构在运行时由 postgraphile(在其自己的容器中)自动生成时,如何将中继编译器作为离线构建步骤运行?

中继编译器 12 + graphql 16 = 无效的 AST 节点

GraphQL“必须提供查询字符串” graphql-tag react-apollo