查询获取所有权限或具有单个用户权限的角色

时间:2021-03-15 14:10:16

标签: sql postgresql

table set user to permission or some role - 角色可能有一些权限

set_id|user_id|role_id|permission_id|set_to|add_time           |start_at|end_at|active|
------|-------|-------|-------------|------|-------------------|--------|------|------|
    15|      2|       |            7|{}    |2021-03-15 13:00:43|        |      |true  |
    16|      1|      1|             |{}    |2021-03-15 13:02:29|        |      |true  |
    14|      1|       |            7|{1,2} |2021-03-15 13:00:43|        |      |true  |
    17|       |      1|            7|{99}  |2021-03-15 13:02:43|        |      |true  |

问题:尝试获取用户及其权限和角色(如果没有权限但设置了具有该权限的某个角色)

尝试这样:

select *  from permission_set ps
where ps.user_id = 1 
and ps.permission_id = 7  
or ps.role_id = any(select role_id from permission_set pss 
                    where pss.permission_id = 7  
                      and pss.active is true)

问题是角色以任何方式出现,我无法修复它。

附言。 DDL

CREATE TABLE public.permission_set (
    set_id serial NOT NULL,
    user_id int4 NULL,
    role_id int4 NULL,
    permission_id int8 NULL,
    set_to _int4 NULL DEFAULT '{}'::integer[],
    add_time timestamp NULL DEFAULT timezone('utc'::text, now()),
    start_at timestamp NULL,
    end_at timestamp NULL,
    active bool NULL DEFAULT true
);

0 个答案:

没有答案