数据库表设计1:用户权限管理

前言:权限管理是所有后台系统的都会涉及的一个重要组成部分,主要目的是对不同用户访问资源进行权限的控制,避免因权限控制缺失或操作不当引发的风险问题,如操作错误,隐私数据泄露等问题。

1、RBAC简介

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

对于通常的系统而言,存在多个用户具有相同的权限,在分配的时候,要为指定的用户分配相关的权限,修改的时候也要依次的对这几个用户的权限进行修改,有了角色这个权限,在修改权限的时候,只需要对角色进行修改,就可以实现相关的权限的修改。这样做增加了效率,减少了权限漏洞的发生。

2、什么是权限

权限是资源的集合,这里的资源指的是软件中的所有的内容,即,对页面的操作权限,对页面的访问权限,对数据的增删查改的权限。举个栗子。对于下图中的系统而言,

数据库表设计1:用户权限管理_第1张图片

拥有计划管理,客户管理,合同管理,出入库通知单管理,粮食安全追溯,粮食统计查询,设备管理这几个页面,对这几个页面的访问,以及是否能够访问到菜单,还有相关操作都属于权限。

3、用户组的使用

对于用户组来说,是把众多的用户划分为一组,进行批量授予角色,即,批量授予权限。举个栗子,对于部门来说,一个部门拥有一万多个员工,这些员工都拥有相同的角色,如果没有用户组,可能需要一个个的授予相关的角色,在拥有了用户组以后,只需要,把这些用户全部划分为一组,然后对该组设置授予角色,就等同于对这些用户授予角色。

优点:减少工作量,便于理解,增加多级管理等。

4、实体间的关系

现在有三个实体:用户、角色、权限,首先我们搞清楚他们之间的关系是什么

假设

用户有:张三、李四、王五

角色有:超管、普管、会员

权限有:删帖、看帖、

用户与角色多对多:张三可以既是超管又是普管;张三、李四都可以是普管;

角色与权限多对多:超管既可以删帖又可以看帖;超管、普管、会员都可以看帖。

需要维护的表

由上可知,为了维护这三个实体(用户、角色、权限),另外还要维护两个多对多的关系,我们便有了五张表:

用户表                      user_info

用户角色关系表        user_role_info

角色表                      role_info

角色权限关系表        role_permission_info

权限表                      permission_info

5、RBAC经典五张表

大致用到5张表:三张主表,两张从表

主表:用户表(UserInfo)、角色表(RoleInfo)、菜单表(MenuInfo)

从表:用户角色表(UserRole)、角色菜单表(RoleMenu)。

  各表的大体表结构如下:

  ①、用户表(UserInfo):Id、UserName、UserPwd

  ②、角色表(RoleInfo):Id、RoleName

  ③、权限表(PermissionInfo):Id、PermissionName

  ④、用户角色表(UserRole):Id、UserId、RoleId

  ⑤、角色权限表(RolePermission):Id、RoleId、PermissionId

你可能感兴趣的:(Java后端开发,RBAC基于角色的访问控制,权限管理系统,数据库设计)