2015-06-12 70 views
0

我正在試圖找到合併包含用戶資源訪問權限的行的方法。我將這個查詢傳遞給這個用戶擁有的組的列表,並且有可能一個組允許訪問資源而另一個組拒絕訪問。合併用戶權限

我有這樣的事情:

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 

如果我有一個強制允許,它無論做什麼都允許。如果它有允許+否認,則拒絕勝利。所以最後我只需要知道什麼是允許的。

你們看看它是如何製造的?

+0

什麼,甚至是什麼邏輯? 1)爲什麼'res3'完全沒有返回? 2)你是怎麼決定'res1'變成'F'而不是'N'的? – Tom

+0

我編輯了原文。謝謝 –

+0

條件檢查F我猜? – Adam

回答

0

比方說你的表是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小提琴http://sqlfiddle.com/#!4/295c9d/1

+0

它的工作,謝謝你 –

+0

歡迎:) – Martina

0

一個與函數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