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