天天看點

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont

首先,白話一下RBAC模型。RBAC是基于角色的通路控制(Role-Based Access Control)的簡稱。RBAC認為權限授權實際上是Who、What、How的問題。在RBAC模型中,who、what、how構成了通路權限三元組,也就是“Who對What進行How操作”。至于RBAC模型具體包含哪些内容,網上有很多相關的資料,可以參考一下。下面,主要寫寫自己對RBAC的了解和在Xianfeng平台中的應用。

了解RBAC,還是從““Who對What進行How操作”出發,Who實際上就是功能操作的主體,可以了解為系統使用者,而What實際上就是功能操作的客體,範圍比較廣泛,可以是系統菜單,也可以是功能頁面或者系統中的檔案等等,稱之為使用者可操作的系統資源,而How實際上就是對具體功能操作的一種抽象表示,比如把增加使用者的功能操作抽象表示為“新增使用者”。通過這樣簡單的了解,很容易把RBAC模型和我們實際開發的系統聯系起來。

實作權限控制的步驟大體分為以下幾步:

(1)建立系統使用者和系統資源之間的權限映射關系;

(2)對使用者通路的關鍵資源進行權限過濾;

(3)回報使用者權限過濾的結果

1、建立系統使用者和系統資源之間的權限映射關系

涉及到的實體如下:

子產品(Module):實作系統功能的子產品化劃分,比如子系統等;

功能(Function):一個完整的業務過程,比如使用者管理等;

操作(Operation):業務過程所包含的關鍵業務點,比如使用者管理的新增、修改、删除等,

資源(Resource):功能操作的客體,比如系統菜單,檔案等;

使用者(User):功能操作的主體,既登入系統的使用者;

角色(Role):可以認為是操作集合的另外一種表示方法,通過給使用者配置設定角色來确定使用者有權限的操作範圍。

實體關系模型如下圖所示:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont

使用者(User)和操作(Operation)、操作(Operation)和資源(Resource)之間的關系為弱化關系,既可有可無的關系,簡單實作方法可以忽略這種弱化關系的存在。

簡單來看,給使用者和資源之間建立權限映射關系,實際上就是确定使用者有哪些角色。

2、對使用者通路的關鍵資源進行權限過濾

以一個具體的業務場景為例,有一個管理功能頁面,頁面上包含“新增”、“修改”、“删除”3個按鈕,假設此頁面隻有管理者可通路,并且隻有超級管理者才有按鈕操作權限。

從假設的業務場景得知,管理功能具有4個操作,包含查詢、新增、修改和删除,管理者具有查詢權限,而超級管理者還具有新增、修改和删除的權限。

功能頁面,屬于系統資源,可以使用頁面的URL作為權限過濾的辨別符,因為在一個系統中,URL總是唯一的,另外,頁面上的操作按鈕,也屬于系統資源,為了實作權限過濾,必須綁定一個唯一的權限過濾辨別符,可以通過擴充HTML屬性的方式來綁定唯一的權限過濾辨別符,示例如下:

其中,safeURI屬性的值“system.user@insert"就表示系統增加使用者操作的唯一權限過濾辨別符。

無論是管理者,還是超級管理者,隻要對系統中的關鍵資源進行通路,根據其角色關聯的操作集合,周遊出是否包含目前資源的權限過濾辨別符,就可以判斷有無權限進行目前操作,進而實作權限控制。

3、回報權限過濾的結果

對系統關鍵資源進行權限過濾之後,如果目前登入使用者具有操作權限,就繼續使用者操作;反之,如果目前登入使用者沒有操作權限,需要傳回無操作權限的結果給使用者。