Openresty最佳案例 | 第8篇:RBAC介绍、sql和redis模块工具类
RBAC介绍
RBAC(Role-Based Access Control,基于角色的访问控制),用户基于角色的访问权限控制。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般都是多对多的关系。如图所示:
sql_tool
在本案例中,采用的就是这种权限设计的方式。具体的sql语句脚本如下:
初始化以下的sql脚本,即给用户id为1的用户关联角色,角色并关联权限:
在本案例中,需要根据user表中的Id获取该Id对应的权限。首先根据userId获取该用户对应的角色,再根据根据该角色获取相应的权限,往往一个用户具有多个角色,而角色又有多个权限。比如查询userId为1 的用户的权限的sql语句如下:
在Openresty中怎么连接数据库,怎么查询sql语句,在之前的文章已将讲述过了。根据用户id获取用户的权限的功能是一个使用率极高的功能,所以考虑将这个功能模块化。
在上面的代码中,有一个select_user_permission(user_id)方法,该方法根据用户名获取该用户的权限。查出来存在一个table 类型的 local permissions={}中。
vim /usr/example/example.conf 加上以下的代码:
在浏览器访问http://116.196.177.123/sql_tool,浏览器显示如下的内容:
tokentool
在之前的文章讲述了如何使用Openresty连接redis,并操作redis。 这小节将讲述如何使用openresty连接redis,并写几个方法,用于存储用户的token等,并将这些信息模块化,主要有以下几个方法:
close_redis(red) 通过连接池的方式释放一个连接
connect() 连接redis
has_token(token) redis中存在token 与否
get_user_id(token) 根据token获取用户id
set_permissions(user_id,permissions) 根据userid设置权限
get_permissions(user_id)根据userid获取权限
vim /usr/example/lualib/tokentool.lua 编辑一下内容:
vim /usr/example/lua/test_token_tool.lua,加上以下的内容:
在/usr/example/example.conf加上以下的内容:
打开浏览器访问http://116.196.177.123/token_tool,浏览器显示:
- 点赞
- 收藏
- 关注作者
评论(0)