宋朝輝
摘 要:結合基于角色的訪問控制原理,實現基于RESTful API模式的權限管理。圍繞用戶、角色、功能的基本定義及它們之間的關系進行API編碼,實現了靈活、實用的基于角色的權限管理功能,達到靈活多變的權限控制?;贏PI的接口定義和訪問機制,提高了系統的安全性和多終端的便捷訪問,實際應用表明,該方式具有很好的可擴展性和通用性。
關鍵詞:權限管理 角色訪問 API
中圖分類號:TP31 文獻標識碼:A 文章編號:1674-098X(2017)12(c)-0136-03
現在是多終端的應用系統時代,應用系統不僅要在PC上運行,同時還需要在平板、智能手機端運行,實現方便快捷的管理和應用。傳統的B/S模式下的權限管理方式已經不能滿足現在的需求。
雖然現在市場上的實現方式很多,但API模式是大家都比較認可的,使用面也非常廣泛。API模式下所有的訪問接口面向外界是完全暴露的,由于API自身的特點,本文提出了基于API模式下權限訪問控制的全面解決方法。
用戶在Author 2.0授權訪問登錄系統后,通過用戶-角色-權限的關系,獲取到該用戶可以完成的功能及對這些功能的操作權限,回送給終端,終端可以通過功能及權限來控制用戶的操作,當有越權訪問情況發生時,API服務端也會進行訪問控制權限驗證,對于沒有訪問權限的操作直接略過。
1 RESTful及RESTful Web API
REST從資源的角度來觀察整個網絡,分布在各處的資源由URI確定,而客戶端的應用通過URI來獲取資源的表示方式。REST是設計風格而不是標準。REST通?;谑褂肏TTP、URI、XML以及HTML這些現有的廣泛流行的協議和標準。資源是由URI來指定,資源的操作包括獲取、創建、修改和刪除資源,這些操作正好對應HTTP協議提供的GET、POST、PUT和DELETE方法。
RESTful Web服務(也稱為 RESTful Web API)是一個使用HTTP并遵循REST原則的Web服務。它從以下3個方面資源進行定義:
(1)URI,比如:http://example.com/resources/。
(2)Web服務接受與返回的互聯網媒體類型,比如:JSON、XML、YAML等。
(3)Web服務在該資源上所支持的一系列請求方法,比如:POST、GET、PUT、DELETE。
2 角色、用戶、權限之間的關系
角色是具備一定操作權限的用戶組。
權限是資源與操作的一套組合,例如“增加用戶”是一種權限,“刪除用戶”是一種權限,所以對于一種資源所對應的權限有且只有4種,如圖1所示。
角色、用戶、權限之間的關系如圖2所示,三者之間的關系如下。
(1)角色與用戶的關系:一個角色對應一群用戶,一個用戶也可以扮演多個角色,所以它們是多對多的關系。
(2)角色與權限的關系:一個角色擁有一堆權限,一個權限卻只能屬于一個角色,所以它們是一(角色)對多(權限)的關系。
(3)權限與用戶的關系:由于一個用戶可以扮演多個角色,一個角色擁有多個權限,所以用戶與權限是間接的多對多關系。
3 數據庫設計
具體情況見表1~表4。
4 權限管理具體實現
4.1 基于PHP Slim框架下權限管理具體實現
系統采用PHP Slim框架進行開發實現,Slim是一款PHP微框架,可以幫助我們快速編寫簡單但功能強大的 web應用和API。Slim應用程序的每個路由都將當前的請求對象和響應對象作為它的回調例程的參數。這些對象實現了流行的PSR 7接口。Slim應用的路由可以必要地檢查或操作這些對象。最終,每個Slim應用路由必然返回一個 PSR 7響應對象。本文中Slim部分路由配置:
$app->group('/platform', function () {
$this->group('/menus', function () {
$this->get('/usermenus', '\MenuService:userMenus');
$this->get('[/{id}]', '\MenuService:get');
$this->post('/add', '\MenuService:add');
$this->put('/update', '\MenuService:update');
$this->delete('/delete/{id}', '\MenuService:delete');
});
$this->group('/roles', function () {
$this->get('/menuids', '\RoleService:getMenuIds');
$this->get('[/{id}]', '\RoleService:get');
$this->post('/grant', '\RoleService:grant');
$this->post('/revoke', '\RoleService:revoke');
$this->post('/add', '\RoleService:add');
$this->put('/update', '\RoleService:update');
$this->delete('/delete/{id}', '\RoleService:delete');
});
});
4.2 實際應用界面
本權限管理模塊已經成功應用于某國企信息管理平臺、調試平臺等實際項目中,并取得了良好的效果。具體界面(部分)見圖3、圖4。
5 結語
本文的權限管理模塊遵循RESTful Web API模式設計,將前端與后端服務有效分離,滿足多終端的訪問使用。
本系統在實際使用中通過Author 2.0做用戶認證模式,更提高了系統的安全性。在實際應用中,權限系統提交給用戶使用前,至少要建立一個缺省的管理員用戶,并且不能被刪除,以保證系統能正常運行。
本系統使用PHP的Slim框架進行API開發,使得API開發簡捷化,開發思路清晰化,易于管理與擴展,有效提高了開發效率,也滿足了高并發高吞吐量。同時該設計充分考慮了API系統權限控制的需求,能適用于大部分API的權限控制,具有很強的適用性和推廣價值。
參考文獻
[1] Gourley,Brian Totty,Marjorie Sayer,et al.HTTP:The Definitive Guide[M].O`Reilly Media,2002.
[2] 暴志剛,胡艷軍,顧新建.基于Web的系統權限管理實現方法[J].計算機工程,2006,32(1):169-170.
[3] Richard Stevens.TCP/IP Illustrated (Volumn 1:The Protocol)[M].Addison-Wesley Professional,2011.
[4] 高正憲,李中學.Web環境下基于角色的訪問控制策略及實現[J].計算機工程,2004,30(8):133-135.
[5] 邢光林,洪帆.基于角色和任務的工作流訪問控制模型[J].計算機工程與應用,2005,41(2):210-213.