Пересечение использования на Postgresql с безопасностью на уровне строк - PullRequest
0 голосов
/ 30 мая 2018
create table user_table(
    idx text,
    _section text[]
);

create table section_table(
    _section text,
    sub_section text[]
);

alter table user_table enable row level security;

create policy user_p on user_table for select
using (section @> 
         (select _section from user_table 
            intersect
            (select _section::text[]
               from section_table 
               where current_setting('my.sub_section',true)::text[]
                     <@ (select sub_section 
                         from section_table)
            )
         )
      );

insert into user_table values
   (1,'{"section1"}'),(2,'{"section2"}'), 
   (2,'{"section2","section1"}');

insert into section_table values
   ('section1','{"s","b"}'), 
   ('section2','{"c","d"}');

ожидаемый результат:

set my.sub_section ='{"c"}';
select * from user_table;

должен отображать только (2,'{"section2"}'), но он показывает все.

Когда введено sub_section, оно должно перейти к section_tableи найти соответствующий раздел и пересечь с user_table, если значение пересечения не является нулевым, то должно вернуть соответствующее значение user_table.

Я смущен, почему он не показывает правильный ожидаемый результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...