- 设计表说明
系统中有以下的表:
用户表(user)、组织表(organization)、角色表(role)、权限表(power)、角色权限表(role_power)、用户角色表(user_role)、组表(group)、组角色表(group_role)、操作日志表(log)
用户表:描述系统中用户。使用系统的用户属性在该表中定义。
用户具有上下级关系部分应用场景比如推荐应用。有下级用户的概念。为了让系统具有足够的通用性所以做这个上下级用户的设计
组织表:可以理解为一个群体、组织。例如一个公司、一个QQ群、一个社团、一个公司下各个部门等等都可以定义在组织表中。
组织表也具有上下级关系
角色表:系统中具有的角色。比如CTO/CEO团队leader等等。角色归属于一个组织。一个角色只有在一个组织中才有其具备的具体角色的功能
角色也需要具备上下级的关系。
权限表:一个系统中包含的权限信息。一个权限需要在一个组织中才具有该权限的具体权限的意思。
角色权限表:一个角色可以有多个权限一个权限也可以对应多个角色。该表描述权限和角色映射关系
用户角色表:一个用户具有多个角色,一个角色可以分配给多个用户。该表属于用户和角色的中间表
组表:我们在给一个角色分配权限。或者是多个组织有同一种角色的概念。我们在一个复杂的系统中会有大量重复的角色和权限。我们可以设计一个和组织无关的一些通用的集合。方便在新建一个系统时原本类似的组织权限能够方便的应用到新建的系统中我们设计一个组的概念
在给角色分配一个组信息的时候把组相关的信息(权限信息)全量的更新到其他表结构中。在读取一个角色所具备的权限时不用关心组表。不至于业务处理起来过于复杂
其中组表中存储的是一些通用的权限。
组角色表:一个角色可以有多个组,一个组可以归属多个角色。该表描述组表和角色关系。
操作日志表:记录给系统分配相关权限和用户相关的操作日志
- 表设计
这里暂时添加醉简单的字段后面做功能的时候具体需要的属性再进行添加。
针对上面的描述我们设计的表结构如下:
用户表:user
CREATE TABLE `user` (
`id` bigint(20) NOT NULL COMMENT '主键id',
`parents_id` bigint(20) DEFAULT NULL COMMENT '父id',
`org_id` bigint(20) DEFAULT NULL COMMENT '所属组织',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
组织表:organization
CREATE TABLE `organization` (
`id` bigint(20) NOT NULL COMMENT '主键id',
`parents_id` bigint(20) DEFAULT NULL COMMENT '父id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='组织表';
角色表:role
CREATE TABLE `role` (
`id` bigint(20) NOT NULL COMMENT '主键id',
`parents_id` bigint(20) DEFAULT NULL COMMENT '父id',
`org_id` bigint(20) DEFAULT NULL COMMENT '所属组织',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色表';
权限表:power
CREATE TABLE `power` (
`id` bigint(20) NOT NULL COMMENT '主键',
`org_id` bigint(20) DEFAULT NULL COMMENT '所属组织',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='权限表';
角色权限表:role_power
CREATE TABLE `role_power` (
`id` bigint(20) NOT NULL COMMENT '主键',
`role_id` bigint(20) DEFAULT NULL COMMENT '角色id',
`power_id` bigint(20) DEFAULT NULL COMMENT '权限id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色权限表';
用户角色表:user_role
CREATE TABLE `user_role` (
`id` bigint(20) NOT NULL,
`user_id` bigint(20) DEFAULT NULL COMMENT '用户id',
`role_id` bigint(20) DEFAULT NULL COMMENT '角色id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户角色表';
组表:group
CREATE TABLE `group` (
`id` bigint(20) NOT NULL COMMENT '主键',
`org_id` bigint(20) DEFAULT NULL COMMENT '所属组织id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='组表';
组角色表:group_role
CREATE TABLE `group_role` (
`id` bigint(20) NOT NULL COMMENT '主键',
`group_id` bigint(20) DEFAULT NULL COMMENT '组id',
`role_id` bigint(20) DEFAULT NULL COMMENT '角色id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='组角色表';
操作日志表:log
CREATE TABLE `log` (
`id` bigint(20) NOT NULL,
`org_id` bigint(20) DEFAULT NULL COMMENT '所属组织',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='操作日志表';
- 表之间的逻辑关系
在我们后面的编码过程中难免会对部分设计进行改造。在后面的文章中会记录下来