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
相交,一旦值为。{
intersect不为null,则应返回相应的值
user_table
。
我很困惑为什么它没有显示正确的期望结果。