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;
тогда это должно работать.