關於RBAC(Role-Base Access Control)的理解

來源:互聯網
上載者:User

標籤:

 角色型存取控制(Role-Base Access Control)

有兩種正在實踐中使用的RBAC存取控制方式:隱式(模糊)的方式和顯示(明確)的方式。

今天依舊有大量的軟體應用是使用隱式的存取控制方式。顯示的存取控制方式更適合於當前的軟體應用。

隱式的存取控制

隱式的存取控制就是並沒有給角色添加具體許可權操作,只是給訪問的使用者添加了一個標識,告訴系統我是隸屬於這個角色的,只要系統允許這角色操作的資源,我就有許可權去操作。

比如說,我現在某個系統有兩個角色,分別是“超級管理員”,"專案系統管理員",“普通使用者”;

使用者有: root 、zhangSan;

分別給上面三個使用者賦予角色:root  賦予 “超級管理員” 角色 / zhangSan 賦予 “普通使用者” 角色

那麼我現在有一個修改使用者密碼的功能,這個功能只能是“超級管理員”角色的使用者才能操作,那麼隱式存取控制的具體代碼將會是如下:

if( currentUser.hasRole("超級管理員")){    //有許可權進行操作}else{   //沒有許可權進行操作}

上面這段代碼說的是,如果當前訪問使用者物件隸屬於“超級管理員”這個角色,那麼有許可權進行修改使用者密碼操作,否則沒有許可權進行操作。

這種許可權操作是沒有明確告訴系統這個角色可以幹什麼,而是程式員知道這個角色能幹嗎,靠if else在程式中進行判斷這些角色能幹嗎。

如果此時增加一個“普通使用者”也可以修改使用者密碼的許可權,那麼此時代碼就應該改成如下:

if( currentUser.hasRole("超級管理員") || currentUser.hasRole("普通使用者")){    //有許可權進行操作}else{   //沒有許可權進行操作}

這樣的許可權管理不太好,僅僅是因為一個微小的許可權方面的需求變動,就需要改動代碼,重新編譯、部署...

如果又讓專案系統管理員也有這樣的許可權的話,又得修改了。。。

所以,推薦下面的顯式的存取控制。

顯式的存取控制

顯式的存取控制是明確的告訴系統這些角色具體能幹嗎,讓隸屬於這個角色的使用者都擁有相應的許可權。

如:“超級管理員”{“建立使用者”,“修改使用者密碼”,“刪除使用者”}的許可權

那麼修改使用者密碼的代碼就該如下所示:

//擷取目前使用者的角色,再通過角色來判斷是否有“修改使用者密碼的許可權”if( currentUser.getRole().isPermission("修改使用者密碼")){   //有許可權進行操作}else{    //無許可權進行操作  }

假設我要去除掉超級管理員的“修改使用者密碼”的許可權,那麼我只需要修改許可權的設定檔,而不需要修改代碼部分。

所以,推薦使用顯式存取控制。

 

 

參考資料:http://www.thinksaas.cn/group/topic/150841/

關於RBAC(Role-Base Access Control)的理解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.