宋朝辉
摘 要:结合基于角色的访问控制原理,实现基于RESTful API模式的权限管理。围绕用户、角色、功能的基本定义及它们之间的关系进行API编码,实现了灵活、实用的基于角色的权限管理功能,达到灵活多变的权限控制。基于API的接口定义和访问机制,提高了系统的安全性和多终端的便捷访问,实际应用表明,该方式具有很好的可扩展性和通用性。
关键词:权限管理 角色访问 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通常基于使用HTTP、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.