Openresty最佳案例 | 第8篇:RBAC介绍、sql和redis模块工具类

举报
方志朋 发表于 2018/12/22 16:07:35 2018/12/22
【摘要】 RBAC(Role-Based Access Control,基于角色的访问控制),用户基于角色的访问权限控制。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般都是多对多的关系。

RBAC介绍

RBAC(Role-Based Access Control,基于角色的访问控制),用户基于角色的访问权限控制。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般都是多对多的关系。如图所示:


image.png


sql_tool

在本案例中,采用的就是这种权限设计的方式。具体的sql语句脚本如下:


image.png

image.png


初始化以下的sql脚本,即给用户id为1的用户关联角色,角色并关联权限:


image.png


在本案例中,需要根据user表中的Id获取该Id对应的权限。首先根据userId获取该用户对应的角色,再根据根据该角色获取相应的权限,往往一个用户具有多个角色,而角色又有多个权限。比如查询userId为1 的用户的权限的sql语句如下:


image.png


在Openresty中怎么连接数据库,怎么查询sql语句,在之前的文章已将讲述过了。根据用户id获取用户的权限的功能是一个使用率极高的功能,所以考虑将这个功能模块化。


image.png

image.png


在上面的代码中,有一个select_user_permission(user_id)方法,该方法根据用户名获取该用户的权限。查出来存在一个table 类型的 local permissions={}中。


vim /usr/example/example.conf 加上以下的代码:


image.png


在浏览器访问http://116.196.177.123/sql_tool,浏览器显示如下的内容:


image.png


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 编辑一下内容:


image.png

image.png

image.png


vim /usr/example/lua/test_token_tool.lua,加上以下的内容:


image.png


在/usr/example/example.conf加上以下的内容:


image.png


打开浏览器访问http://116.196.177.123/token_tool,浏览器显示:


image.png


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。