合并用户权限



我正在尝试找到一种方法来合并包含用户资源访问权限的行。我执行此查询时会传递此用户拥有的组列表,并且可能一个组允许访问资源,而另一个组拒绝。

我有这样的东西:

RESOURCE | ACCESS (F force allow, D deny, A allow)
res1   | F
res1   | D
res2   | A
res3   | A
res3   | D

从这些行中,我想返回以下内容:

RESOURCE | ACCESS
res1   | F
res2   | A

如果我有强制允许,无论如何它都会允许。如果它有一个允许 + 一个拒绝,则拒绝获胜。所以最后我只需要知道什么是允许的。

你们看到它是如何制造的吗?

假设您的表是 RES,列是RESOURCE_,ACCESS_。然后,可以使用此查询获取允许的资源。

select resource_ , decode(appl_access,3,'F',1,'A') from (
      select r1.resource_, max (decode(r1.access_,'F',3,'D',2,'A',1,0)) 
        appl_access from res r1
      group by r1.resource_)
where appl_access in (1,3);

这是SQL Fiddle http://sqlfiddle.com/#!4/295c9d/1

函数

row_number() 的可能性之一:

select res, acc 
  from (
    select res, acc, 
        row_number() over (partition by res 
                           order by case acc when 'F' then 1 
                                             when 'D' then 2
                                             when 'A' then 3
                                    end) rn 
      from test )
  where rn=1 and acc<>'D'

SQLFiddle

相关内容