Apache Shiro 授權概念
授權即是訪問控制,是對資源訪問管理過程。它將判斷使用者在應用程式中是否對資源有相應的訪問許可權。比如:判斷一個使用者有檢視頁面的許可權,編輯資料的許可權,擁有某一按鈕的許可權,以及是否擁有列印的許可權等等。
授權有三個核心元素:許可權,角色和使用者。
1許可權
在ApacheShiro中許可權是安全機制中最核心的元素。它在應用程式中明確地聲明瞭被允許的行為,一個格式良好的許可權宣告可以清晰地表達出使用者與資源互動時擁有的許可權。
許可權宣告的一些例子:
l開啟一個檔案;
l檢視'/user/list'網頁;
l列印文件;
l刪除使用者'jsmith'。
大多數資源都支援典型的CRUD(建立,讀取,更新,刪除)操作,但任何對特定資源有意義的行為都是可以的。最小的許可權宣告是基於資源和行為的。
這裡最重要的認識是許可權宣告沒有誰可以執行此行為,許可宣告僅能夠反映行為(與資源型別相關的行為)。它們不反映是誰能夠執行這樣的行為。
定義使用者被允許做什麼(許可權),是一種以某種方式給使用者分配許可權的操作。這是由應用程式自己決定的,通常在不同的應用程式間變化很大。比較常見的方法有將許可權集合到一個角色中,然後將角色與一個或多個使用者物件相關聯。或者某些應用程式可以有一組可以被分配一個角色的使用者組,建立的關聯意味著該組中的所有使用者都隱式地獲得了該角色的許可權。如何授予使用者許可權可以有很多變化——應用程式決定如何基於應用的要求來建模。
2角色
角色是一個命名的實體,通常代表一組行為或職責。這些行為演化為你在一個應用系統中能或者不能做的事情。角色通常是分配給使用者的,因此,通過分配使用者能夠“做”的事情可以歸屬於各種角色。
在Shiro中支援兩種型別的角色:
1、隱式角色
傳統的方式,一個角色代表著一系列的操作,當需要對某一操作進行授權驗證時,只需判斷是否是該角色即可。行為已被一個單獨的名字所蘊含。這種角色許可權相對簡單、模糊,不利於擴充套件。,隱式角色可能會增加許多軟體的維護和管理問題。
2、顯式角色
一個顯式角色本質上是一個授權宣告的命名集合。授權驗證時,需要判斷當前角色是否擁有該許可權。這種角色許可權可以對該角色進行詳細的許可權描述,適合更復雜的許可權設計。Shiro團隊提倡使用許可權和顯式角色,而不是陳舊的隱式方法。
3使用者
使用者實質上是指與應用程式有關的人。Subject是Shiro中“使用者”的概念。
允許使用者(Subjects)在你的應用程式中執行某些操作,是通過讓他們與角色相關聯或是直接授予許可權。你的應用程式的資料模型定義了Subject是如何被允許做某事或不允許做某事的。
例如,在你的資料模型中,你有一個實際的User類,在授權時你可以直接分配許可權給User例項。或者,你只分配許可權給角色,然後分配角色給使用者,通過關聯,讓使用者“延伸”地擁有某個許可權。或者你用"Group"的概念來代替這些東西。這些都隨便你——根據你自己的應用程式來定義。
你自己的資料模型定義授權究竟是如何工作的。Shiro依靠Realm來實現轉換你的資料模型,使其細節關聯到一種Shiro能夠理解的格式。