权限管理数据库设计
在开发过程当中,权限管理是不可或缺的一个模块,用户在系统中可使用的模块和操作都需要权限管理来控制。最近正好在做权限管理这个模块,所以就对于权限管理的数据库设计做个小结,本文纯属个人观点。
一、用户表
用户表是肯定需要的,并且在用户表中需要有个唯一标识,可以是主键,在多主键的情况下可以加个自增列或者GUID来做唯一标识。
是否主键 | 列名 | 类型 | 描述 | 是否可空 | 备注 |
是 | USERNAME | VARCHAR(20) | 用户名 | 否 | |
否 | PASSWORD | VARCHAR(20) | 密码 | 否 | |
二、角色表
角色表可以设计成树形结构,这样就可以对角色进行分组。
是否主键 | 列名 | 类型 | 描述 | 是否可空 | 备注 |
是 | ROLEID | INT | 角色编号 | 否 | 自增列 |
否 | ROLENAME | VARCHAR(20) | 角色名称 | 否 | |
否 | PARENTID | INT | 父角色编号 | 否 | |
三、用户角色表
关联用户表和角色表的中间表。
是否主键 | 列名 | 类型 | 描述 | 是否可空 | 备注 |
是 | USERNAME | VARCHAR(20) | 用户名 | 否 | 用户表中USERNAME的外键 |
是 | ROLEID | INT | 角色编号 | 否 | 角色表中ROLEID的外键 |
四、模块表
模块包含子模块和父模块,这里也可以做成树形表。
是否主键 | 列名 | 类型 | 描述 | 是否可空 | 备注 |
是 | MODULE_TAG | VARCHAR(7) | 模块标识 | 否 | |
否 | MODULE_NAME | VARCHAR(50) | 模块中文名称 | 否 | |
否 | MODULE_EN | VARCHAR(50) | 模块英文名称 | 否 | |
否 | MODULE_HREF | VARCHAR(100) | 模块链接 | 是 | |
否 | MODULE_ICO | VARCHAR(100) | 模块图标路径 | 是 | |
否 | MODULE_PARENT_TAG | VARCHAR(7) | 父模块标识 | 是 | |
否 | MODULE_FLAG | BIT | 模块停用标识 | 否 | 默认值为0,0可用,1不可用 |
五、模块权限表
一个模块中包含多个权限,个人感觉权限中加个父权限会比较直观,实际用途有待研究。
是否主键 | 列名 | 类型 | 描述 | 是否可空 | 备注 |
是 | PERMISSION_TAG | VARCHAR(7) | 权限标识 | 否 | |
否 | MODULE_TAG | VARCHAR(7) | 模块标识 | 否 | |
否 | PERMISSION_NAME | VARCHAR(50) | 权限中文名称 | 否 | |
否 | PERMISSION_EN | VARCHAR(50) | 权限英文名称 | 否 | |
否 | PERMISSION_PARENT_TAG | VARCHAR(7) | 父权限标识 | 是 | |
否 | PERMISSION_FLAG | BIT | 权限停用标识 | 否 | 默认值为0,0为可用,1为不可用 |
六、角色权限表
角色和权限是多对多关系,所以要建张中间表。这张表决定用户的最大权限,具体拥有什么权限由用户权限表决定。
是否主键 | 列名 | 类型 | 描述 | 是否可空 | 备注 |
是 | ROLEID | INT | 角色编号 | 否 | 角色表中ROLEID的外键 |
是 | PERMISSION_TAG | VARCHAR(7) | 权限标识 | 否 | 权限模块表中PERMISSION_TAG的外键 |
七、用户权限表
用户和权限是多对多关系,所以要建张中间表。用户权限由这张表决定。
是否主键 | 列名 | 类型 | 描述 | 是否可空 | 备注 |
是 | USERNAME | VARCHAR(20) | 用户名 | 否 | 用户表中USERNAME的外键 |
是 | PERMISSION_TAG | VARCHAR(7) | 权限标识 | 否 | 权限模块表中PERMISSION_TAG的外键 |
小结:模块和权限归到一起,拥有该模块中的任何一个权限就能使用该模块,由于角色表是树形结构,所以可以划分用户组,然后给予不同角色的用户不同的最大权限,具体权限由用户权限表里决定。