PostgreSQL / PostGraphile разрешения на строки не работают

Я пытаюсь настроить сервер GraphQL с PostGraphile (ранее известный как PostGraphQL), и я не могу заставить работать разрешения на строки, то есть я продолжаю получать сообщения об отказе в разрешении, несмотря на то, что это должно работать. Вот моя схема:

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

1 ответ

Нашел проблему сам. Оказывается, вы должны дать права доступа к идентификатору, даже если вы его не выбираете, а используете только в части WHERE.

Поэтому в приведенном выше примере измените его на:

предоставить выбор (id,name,about, updated_at,updated_at) в таблице app.profile для app_user;

тогда это должно работать.

Другие вопросы по тегам