大多数项目中,多多少少都会涉及到权限控制,各种编程语言也有相对应的开源代码。但是,在项目复杂的项目中,可能无法满足我们的需求,因此,我们来介绍下完整的RBAC 及其数据库设计。

RBAC,即基于角色的权限访问控制(Role-Based Access Control), 下面来设计其数据库。

数据库对应关系如下图:

7200f33cf2773445efc6bb9b2959ed5f.png

首先三张基础数据库表:

用户(rabc_user) 表:

c241e097a4a7160748ef1b66f1bffca2.png

角色(rbac_role)表:

a1fb758603c0f7c255bea6dae938851c.png

权限(rbac_node)表:

38e92c26e7b86ef8190bdcb394638b6d.png

以上三张表,分别负责存放用户(rbac_user)、角色(rbac_role)、权限(rbac_node)的信息, 如需其他信息,可自行添加字段。

下面我们创建角色与权限的中间表,负责角色与权限的对应:

5e6bae07fcaa7ab502ae348197949d41.png

在很多开源项目中, 一般只有这三张表,在用户(rbac_user)中加入 role_id ,即可实现用户的权限访问控制。

然而,对于多角色的访问控制, 我们仍需要加入另一张表,负责角色与用户的对应:

06a285b2fbd5570c049225061b860571.png

到此,我们可以通过以上5张表实现多角色的权限访问控制,但是当我们取用户权限时,需要连接4张表才可以取到权限,代码会比较复杂,因为,我们可以通过视图来简化我们的业务逻辑。不熟悉视图的朋友,可以参考MySQL 视图应用以及介绍 进行学习。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐