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

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

01313cb1d666b1edcc8c0b2d77ba59bd.png

sql_tool

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

CREATE TABLE `user` (

`id` int(11) NOT NULL AUTO_INCREMENT ,

`name` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL ,

PRIMARY KEY (`id`)

)

ENGINE=InnoDB

DEFAULT CHARACTER SET=latin1 COLLATE=latin1_swedish_ci

AUTO_INCREMENT=2

ROW_FORMAT=COMPACT

;

CREATE TABLE role(

`id` int(11) NOT NULL AUTO_INCREMENT ,

`name` varchar(255) CHARACTER SET latin5 NULL DEFAULT NULL ,

PRIMARY KEY (`id`)

)

ENGINE=InnoDB

DEFAULT CHARACTER SET=latin1 COLLATE=latin1_swedish_ci

AUTO_INCREMENT=2

ROW_FORMAT=COMPACT

;

CREATE TABLE permission(

`id` int(11) NOT NULL AUTO_INCREMENT ,

`permission` varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL ,

PRIMARY KEY (`id`)

)

ENGINE=InnoDB

DEFAULT CHARACTER SET=latin1 COLLATE=latin1_swedish_ci

AUTO_INCREMENT=3

ROW_FORMAT=COMPACT

;

CREATE TABLE user_role(

`id` int(11) NOT NULL AUTO_INCREMENT ,

`user_id` int(11) NULL DEFAULT NULL ,

`role_id` int(11) NULL DEFAULT NULL ,

PRIMARY KEY (`id`)

)

ENGINE=InnoDB

DEFAULT CHARACTER SET=latin1 COLLATE=latin1_swedish_ci

AUTO_INCREMENT=2

ROW_FORMAT=COMPACT

;

CREATE TABLE role_permission(

`id` int(11) NOT NULL AUTO_INCREMENT ,

`role_id` int(11) NULL DEFAULT NULL ,

`permission_id` int(11) NULL DEFAULT NULL ,

PRIMARY KEY (`id`)

)

ENGINE=InnoDB

DEFAULT CHARACTER SET=latin1 COLLATE=latin1_swedish_ci

AUTO_INCREMENT=3

ROW_FORMAT=COMPACT

;

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

INSERT INTO `permission` VALUES ('1', '/user/orgs');INSERT INTO `role` VALUES ('1', 'user');INSERT INTO `role_permission` VALUES ('1', '1', '1');INSERT INTO `user` VALUES ('1', 'forezp');INSERT INTO `user_role` VALUES ('1', '1', '1');

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

SELECT a.id,a.permission from permission a ,role_permission b,role c,user_role d,user e WHERE a.id=b.permission_id and c.id=b.role_id and d.role_id=c.id and d.user_id=e.id and e.id=1"

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

vim /usr/example/lualib/sql_tool.lua ,编辑加入以下的代码:

local mysql = require("resty.mysql")  local function close_db(db)  if not db then  return  end  db:close() end local function select_user_permission(user_id) local db, err = mysql:new() if not db then  ngx.say("new mysql error : 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值