功能权限设计
- 引言
- 权限介绍
- 什么是权限
- 权限的作用
- RBAC概述
- RBAC的组成
- RBAC支持的安全原则
- RBAC模型
- 基于RBAC的权限设计
- 用户管理
- 角色管理
- 菜单管理
- 部门管理
- 岗位管理
- 权限系统设计ER图
- 标准RBAC模型表
- 复杂RBAC模型表
- 多租户架构
- 什么是多租户?
- 多租户特点
- 多租户模型
- 竖井隔离模式
- 共享模式
- 分域隔离模式
- 本框架权限系统数据库表
- 设计表知识点
- ER图
- 租户表(system_tenant)
- 租户套餐表 (system_tenant_package)
- 岗位表(system_post)
- 角色表(system_role)
- 用户表(system_user)
- 部门表(system_dept)
- 菜单表(system_menu)
- 用户岗位表(system_user_post)
- 用户角色表(system_user_role)
- 角色权限表(system_role_menu)
引言
为何得先了解权限,因为大多数系统都离不开权限,而且在做任何一个系统的业务功能之前,我认为首先得把权限管理设计出来,如果了解RBAC,此节可以跳过。
权限介绍
什么是权限
权限是指在信息系统中,用户或角色可以访问和执行的特定功能、数据或资源的范围。权限是一种访问控制机制,用于控制用户对系统中数据和资源的访问和操作,以确保系统的安全性和保密性。权限通常由管理员或系统管理员分配给用户或角色,并可以根据用户或角色的职责和需求进行调整。常见的权限包括新增、修改、删除、导入和复制等。
- 功能权限是系统执行权限控制的基本单元,包括页面权限、菜单权限、按钮权限等
- 数据权限包括基础数据、业务数据、资源数据等
权限的作用
权限的作用是保护系统资源,防止未经授权的用户访问和修改系统资源,从而提高系统的安全性和可靠性。以下是权限的几个作用:
- 保护系统资源:权限可以帮助组织保护系统资源,防止未经授权的用户访问和修改系统资源。例如,只有管理员才能访问和修改系统配置文件,普通用户不能访问和修改这些文件。
- 控制用户访问:权限可以控制用户对系统资源的访问。例如,只有特定的用户或用户组才能访问某个文件或目录,其他用户不能访问这些文件或目录。
- 限制用户操作:权限可以限制用户对系统资源的操作。例如,只有特定的用户或用户组才能执行某个命令或操作,其他用户不能执行这些命令或操作。
- 提高系统安全性:权限可以提高系统的安全性,防止恶意用户对系统资源进行攻击或破坏。例如,在OA系统中,只有授权的用户才能修改人员信息,防止未经授权的用户对数据进行修改或删除
RBAC概述
**RBAC(Role-Based Access Control,基于角色的访问控制)**是一种被广泛使用的权限管理模型,用于控制用户对系统资源的访问权限。通过将权限与角色相关联,然后将角色分配给用户,从而实现更灵活、更易于管理的安全策略。
RBAC的组成
在RBAC模型里面,有3个基础组成部分,分别是:用户、角色和权限。
RBAC通过定义角色的权限,并对用户授予某个角色从而来控制用户的权限,实现了用户和权限的逻辑分离(区别于ACL模型),极大地方便了权限的管理
下面在讲解之前,先介绍一些名词:
- User(用户):每个用户都有唯一的UID识别,并被授予不同的角色
- Role(角色):不同角色具有不同的权限
- Permission(权限):访问权限
- 用户-角色映射:用户和角色之间的映射关系
- 角色-权限映射:角色和权限之间的映射
它们之间的关系如下图所示:
用户、角色、权限关系
例如下图,管理员和普通用户被授予不同的权限,普通用户只能去修改和查看个人信息,而不能创建创建用户和冻结用户,而管理员由于被授 予所有权限,所以可以做所有操作。
RBAC支持的安全原则
RBAC支持三个著名的安全原则:最小权限原则、责任分离原则和数据抽象原则
- 最小权限原则:RBAC可以将角色配置成其完成任务所需的最小权限集合
- 责任分离原则:可以通过调用相互独立互斥的角色来共同完成敏感的任务,例如要求一个计账员和财务管理员共同参与统一过账操作
- 数据抽象原则:可以通过权限的抽象来体现,例如财务操作用借款、存款等抽象权限,而不是使用典型的读、写、执行权限
RBAC模型
RBAC是⼀种分析模型,主要分为:RBAC0(基本模型Core RBAC)、RBAC1(⾓⾊分层模型Hierarchal RBAC)、RBAC2(⾓⾊限制模型Constraint RBAC)和RBAC3(统⼀模型Combines RBAC),整体又叫做RBAC96。 其中 RBAC0 是基础,也是核心部分,RBAC1、 RBAC2、 RBAC3 都是在 RBAC0 为基础上扩展的。
(1)RBAC0
RBAC0,是最简单、最原始的实现方式,也是其他RBAC模型的基础。
在该模型中,用户和角色之间可以是多对多的关系,即一个用户在不同场景下是可以有不同的角色,例如:项目经理也可能是组长也可能是架构师。同时每个角色都至少有一个权限。这种模型下,用户和权限被分离独立开来,使得权限的授权认证更加灵活。
(2)RBAC1
基于RBAC0模型,引入了角色间的继承关系,即角色上有了上下级的区别
角色间的继承关系可分为一般继承关系和受限继承关系。一般继承关系仅要求角色继承关系是一个绝对偏序关系,允许角色间的多继承。而受限继承关系则进一步要求角色继承关系是一个树结构,实现角色间的单继承。
这种模型适合于角色之间层次分明,可以给角色分组分层。
(3)RBAC2
RBAC2,基于RBAC0模型的基础上,进行了角色的访问控制。
RBAC2中的一个基本限制是互斥角色的限制,互斥角色是指各自权限可以互相制约的两个角色。对于这类角色一个用户在某一次活动中只能被分配其中的一个角色,不能同时获得两个角色的使用权。
该模型有以下几种约束:
- 互斥角色 :同一用户只能分配到一组互斥角色集合中至多一个角色,支持责任分离的原则。互斥角色是指各自权限互相制约的两个角色。对于这类角色一个用户在某一次活动中只能被分配其中的一个角色,不能同时获得两个角色的使用权。常举的例子:在审计活动中,一个角色不能同时被指派给会计角色和审计员角色。
基数约束 :一个角色被分配的用户数量受限;一个用户可拥有的角色数目受限;同样一个角色对应的访问权限数目也应受限,以控制高级权限在系统中的分配。例如公司的领导人有限的;
先决条件角色 :可以分配角色给用户仅当该用户已经是另一角色的成员;对应的可以分配访问权限给角色,仅当该角色已经拥有另一种访问权限。指要想获得较高的权限,要首先拥有低一级的权限。就像我们生活中,国家主席是从副主席中选举的一样。
运行时互斥 :例如,允许一个用户具有两个角色的成员资格,但在运行中不可同时激活这两个角色。
(4) RBAC3
RBAC3是统一模型,他是RBAC1与RBAC2的合集,所以RBAC3是既有⾓⾊分层⼜有约束的⼀种模型,综合了 RBAC0、 RBAC1 和 RBAC2 的所有特点.
(5)用户组
当系统用户较多,角色多时,如果直接给用户配角色,管理员的工作量就会很大。这时候我们可以引入一个概念“用户组”,就是将相同属性的用户归类到一起。
用户组是指一组用户,这些用户具有相同的角色和权限,可以被视为一个整体进行管理。用户组通常是由系统管理员创建和维护的,一个用户可以属于多个用户组,每个用户组可以包含多个用户。管理员可以根据不同的需求创建不同的用户组,并为每个用户组分配不同的角色和权限,用户组里的每个用户即可拥有该角色,以后其他用户加入用户组后,即可自动获取用户组的所有角色。通过用户组的管理,管理员可以更加方便地进行用户管理和权限控制,同时也可以提高系统的安全性和可靠性。
在实际应用中,用户组可以用于实现不同的管理需求,例如按照部门、岗位、职责等进行划分,或者按照不同的业务流程进行划分。用户组的使用可以提高系统的管理效率和灵活性,同时也可以为用户提供更好的使用体验。根据用户组是否有上下级关系,可以分为有上下级的用户组(部门)和普通用户组(分组)
基于RBAC的权限设计
用户管理
用户管理模块主要用于管理系统中的用户账号。该模块包括用户账号、修改密码、分配角色等功能。用户可以通过该模块进行账户管理,包括查看用户个人信息、修改个人信息、查看账户角色等功能。
- 用户列表页:展示系统中所有的用户。应支持新增、编辑、删除、导出、导入及批量操作。
- 添加用户页:根据业务选择创建时需要的字段。添加用户时,必须为用户设置角色,可选角色为“角色列表”中存在的自定义角色和内置角色。
“角色分配”也可以单独放在用户列表中的操作里,这样的交互更专一,但实际没有什么不同
角色管理
角色管理模块用于管理系统中不同用户角色的权限。该模块可以定义不同的角色,如管理员、普通用户等,并为每个角色分配不同的权限。通过该模块,管理员可以对不同的角色进行管理,包括添加、修改、删除角色等操作。同时,管理员还可以为不同的角色分配不同的权限,保证系统的安全性和稳定性。
- 角色列表页:展示系统中的所有角色,至少应显示角色名称以及查询、删除(自定义角色)、查看(内置角色)、新增、编辑等操作。
- 添加角色页:必须输入不可重复的角色名称,可选填状态、备注、排序等信息。
- 配置权限:可在创建角色的同时配置权限,也可在创建角色后配置权限,两种方式没有本质区别,常说的权限包含数据权限以及功能权限
菜单管理
权限管理模块用于管理系统中各个功能模块的访问权限。该模块可以定义不同的权限,数据权限、操作权限、范围权限等,比如,操作权限可以设置查看、编辑、删除、导出等。通过该模块,管理员可以对不同的功能模块进行管理,包括添加、修改、删除权限等操作。同时,管理员还可以为不同的角色分配不同的权限,保证系统的安全性和稳定性。
“菜单”分为三类:
目录:在系统内没有实际页面
菜单:存在实际页面
按钮:菜单中的可操作项
- 菜单列表页:导航菜单是分上下级的,因此可以用树状图表示,常见的菜单属性包括菜单名称、菜单类型(目录、菜单、按钮)、图标、排序、路由地址(浏览器访问菜单的地址)、组件路径(项目的组件文件的路径)、权限标识(查看、编辑、添加等)、是否外链、启用状态和创建时间。除了图中展示的字段,根据业务需求还可以增加“编号、是否打开新页面、是否隐藏、是否缓存(切换到其他菜单当前菜单会进行缓存)”等字段
- 添加菜单页
部门管理
部门管理功能旨在通过Web界面,为系统管理员或具有相应权限的用户提供一个便捷的工具,用于创建、编辑、删除、查询及调整组织内部的部门结构。通过这一功能,可以灵活地构建多层级、多维度的组织架构,以支持企业复杂的业务需求和权限控制策略。
部门管理”有三种使用场景。第一种是为了构建企业的组织架构,在这种情况下,部门管理与功能权限没有关系,仅用于归类用户,同时在用户管理经常会以树形展示部门并与用户列表联动。
与功能权限有关系的是下面两种场景:
- 部门可以绑定角色,给某个部门分配角色,用户根据所在部门查询相关权限
2)部门直接设置权限
岗位管理
用于创建、编辑、删除、查询及调整组织内部的岗位信息
1)与权限无关
2)与权限有关
一个组织下面会有很多职位,比如财务管理会有财务总监、财务主管、会计、出纳员等职位,每个职位需要的权限是不一样的,由于一个人的职位是固定的,所以用户跟职位的对应关系时一对一的关系,职位跟角色的对应关系可以是多对多的关系
权限系统设计ER图
标准RBAC模型表
标准RBAC模型的表是比较简单了,要表示用户-角色-权限三者之前的关系,首先要创建用户表、角色表、权限表,用户和角色是多对多的关系,角色和权限是多对多的关系,需要再创建两张关系表,分别是用户-角色关系表和角色-权限关系表。这六张表的ER图如下所示:
复杂RBAC模型表
理想的RBAC模型是标准RBAC模型经过多次扩展得到的,表结构也会比较复杂,因为要维护很多关系,如下图所示是理想的RBAC模型的ER图:
多租户架构
什么是多租户?
多租户技术是一种软件架构技术,它是在探讨与实现如何于多用户的环境下共用相同的系统或程序组件,并且仍可确保各用户间数据的隔离性。它是为共用的数据中心内如何以单一系统架构与服务提供多数客户端相同甚至可定制化的服务,并且仍可保障客户的数据隔离。简单来说是一个单独的实例可以为多个组织服务。
多租户特点
1. 资源共享
多租户技术通过共享物理和虚拟资源,如服务器、存储设备和网络资源,降低了系统的总体成本。同时,这种共享方式提高了资源利用率,使系统能够支持更多的租户。
2. 数据隔离
数据隔离是多租户架构的核心要求。不同租户的数据需要被严格隔离,以防止数据泄露和混淆。这种隔离机制保障了租户数据的安全性和隐私性。
3. 定制和扩展
多租户架构允许每个租户根据自身需求进行定制和扩展。通过提供API、插件或自定义字段等方式,系统可以灵活满足不同租户的业务需求。
4. 可扩展性
多租户架构具备良好的可扩展性,可以通过水平扩展来满足用户规模的增长。随着租户数量的增加,可以轻松地添加更多的服务器和实例,以处理更多的并发请求。
多租户模型
多租户模型描述了租户和该租户的数据之间的映射关系。不同的多租户模型会影响数据库和应用程序的设计、管理和维护。
第一层是隔离SaaS系统底层所涉及到的计算、存储、网络等资源;
第二层是隔离系统的基础数据,如:组织、用户、角色、权限、产品能力授权关系等;
第三层是系统使用过程中,各类业务动态数据的隔离,如:业务单据、操作记录等。
竖井隔离模式
1)定义:竖井隔离模式,也称为独立实例模式,是指每个租户都运行在完全隔离的一套资源中,包括服务实例、数据库实例等基础设施。每个租户拥有自己独立的应用环境,互不干扰。
2)特点:
- 高度隔离:每个租户的数据、服务、基础设施都与其他租户完全隔离,确保了数据的安全性和业务的独立性。
- 独立环境:每个租户都拥有自己独立的计算资源、存储资源和网络资源,避免了租户之间的相互影响。
- 灵活配置:针对不同租户的需求,可以灵活配置资源和服务,满足个性化的业务要求。
3)优点
- 满足强隔离需求:对于一些对安全性要求较高的租户,竖井隔离模式能够提供完全独立的环境,确保数据和业务的安全。
- 降低故障影响:由于每个租户的系统都部署在独立的环境中,因此一个环境的故障不会影响其他租户的软件服务。
- 易于管理:在竖井隔离模式下,每个租户的环境都是独立的,因此管理和维护起来相对简单。
4)缺点
- 成本较高:每个租户都需要独立的部署环境,这会增加SaaS厂商的成本,降低盈利能力。
- 规模化问题:随着租户数量的增加,管理和运营这些独立环境将变得复杂和困难。
- 资源浪费:对于规模较小的租户,单独创建服务和基础设施可能会造成资源的浪费。
5)应用场景
竖井隔离模式适用于对安全性、稳定性和个性化要求较高的场景,如金融、医疗、政务等领域。在这些领域,租户往往对数据和业务的隔离性有很高的要求,因此竖井隔离模式能够满足他们的需求。
共享模式
1)定义:多租户共享模式是指在多租户架构中,多个租户共同使用同一套服务和基础设施资源,如应用程序代码、数据库、计算资源等,同时保持各自数据和配置的独立性。
2)特点:
- 资源共享:多个租户共享同一套服务和基础设施资源,实现了资源的最大化利用。
- 成本降低:由于资源共享,SaaS厂商可以根据租户数量动态扩展服务和基础设施资源,降低了单位租户的成本。
- 管理高效:SaaS厂商能够集中管理、运营所有租户,提高了管理效率。
- 隔离性:尽管共享资源,但每个租户的数据和配置仍保持独立,确保了租户间的隔离性。
3)优点
- 成本效益:通过资源共享,降低了每个租户的成本,提高了SaaS厂商的盈利能力。
- 灵活扩展:能够根据业务需求动态扩展资源,满足业务增长的需求。
- 高效管理:集中管理、运营所有租户,提高了管理效率。
4)缺点
- 数据隔离性:需要确保不同租户的数据相互隔离,避免数据泄露和混淆。
- 性能优化:在共享资源的情况下,需要优化系统性能,确保每个租户都能获得良好的服务体验。
- 安全性:需要加强安全防护措施,确保租户数据和系统的安全性。
5)应用场景
多租户共享模式广泛应用于SaaS、云计算、企业资源规划(ERP)等领域。SaaS提供商可以通过多租户共享模式为不同客户提供定制化的应用程序服务;云服务提供商则可以通过多租户共享模式为不同用户提供云计算资源;企业则可以利用多租户共享模式为不同部门或子公司提供统一的ERP系统
分域隔离模式
1)定义:多租户分域隔离模式是指在多租户环境中,根据业务需求、安全性要求或租户规模等因素,将租户划分为不同的域(Domain),每个域内的租户共享一套服务和基础设施资源,但不同域之间保持隔离。
2)特点:
- 分域管理:将租户划分为不同的域,每个域由独立的团队或系统负责管理,降低了管理的复杂性和风险。
- 资源共享:域内租户共享服务和基础设施资源,提高了资源利用率和成本效益。
- 隔离性:不同域之间保持隔离,确保了租户间的数据安全和业务独立性。
3)优点
- 提高安全性:通过分域隔离,降低了不同租户之间的安全风险,提高了系统的整体安全性。
- 灵活扩展:根据业务需求灵活划分域,并动态扩展资源和服务,满足了不同租户的个性化需求。
- 降低管理成本:分域管理降低了管理的复杂性和风险,提高了管理效率,降低了管理成本
4)缺点
- 域间协调:不同域之间可能存在业务关联或数据共享的需求,需要建立有效的协调机制来确保域间通信和数据传输的顺畅
- 资源分配:在资源有限的情况下,如何公平、合理地分配资源给不同域内的租户是一个挑战。
- 技术实现:实现多租户分域隔离模式需要复杂的技术支持,包括网络隔离、数据隔离、服务隔离等方面的技术实现。
5)应用场景
多租户分域隔离模式适用于需要对不同租户进行差异化管理和隔离的场景,如大型电商平台、云计算服务提供商、企业资源规划(ERP)系统等。在这些场景中,不同租户可能有不同的业务需求、安全性要求或资源需求,通过分域隔离模式可以更好地满足这些需求。
本框架权限系统数据库表
设计表知识点
1.字符集选择
准确性
utf8mb4_unicode_ci 是基于标准的 Unicode 来排序和比较,能够在各种语言之间精确排序
utf8mb4_general_ci 没有实现 Unicode 排序规则,在遇到某些特殊语言或者字符集,排序结果可能不一致。
但是绝大多数情况下,这些特殊字符的顺序并不需要那么精确。
性能
utf8mb4_general_ci 在比较和排序的时候更快
utf8mb4_unicode_ci 在特殊情况下,Unicode 排序规则为了能够处理特殊字符的情况,实现了略微复杂的排序算法。
但是在绝大多数情况下,不会发生此类复杂比较。相比选择哪一种 collation,使用者更应该关心字符集与排序规则在 db 里需要统一。
推荐用 utf8mb4_unicode_ci,但是用 utf8mb4_general_ci 也没啥问题.
2.字典字段类型选择
char(1)——用单个字符非数字来做标识的情况我们很少用到,并且该字符做查询的时候需要增加单引号,比较麻烦。
bit——类型不能做索引,当然通常Bit类型的字段我们也不需要做索引,有些朋友觉的可能会影响到插入速度。
tinyint——可以做索引,我在一个项目中将Bit改成tinyint做索引后,速度有极大提升。
结论:1.有扩展可能性的字段以及需要做索引的字段,使用tinyint类型,体积小,取值范围相对较广,便于扩展。
2.确定只有两种状态的字段,使用bit类型,只有两种状态的字段不建议做索引反而会降低速度。
is_deleted,is_lock建议用bit类型,state建议用tinyint类型
3.阿里巴巴规范
阿里巴巴手册数据库规范
ER图
租户表(system_tenant)
表结构
字段名 | 字段类型 | 注释 |
---|---|---|
id | bigint | 租户ID |
name | varchar(30) | 租户名 |
contact_user_id | bigint | 联系人的用户编号 |
contact_name | varchar(20) | 联系人 |
contact_mobile | varchar(20) | 联系手机 |
status | tinyint | 租户状态(0正常 1停用) |
website | varchar(100) | 绑定域名 |
package_id | bigint | 套餐编号 |
start_time | datetime | 开始时间 |
end_time | datetime | 结束时间 |
account_count | int | 账号限额 |
create_by | bigint | 创建者 |
create_time | datetime | 创建时间 |
update_by | bigint | 更新者 |
update_time | datetime | 更新时间 |
is_deleted | bit(1) | 是否删除(0 否 1 是) |
SQL语句
CREATE TABLE `system_tenant`(`id` bigint NOT NULL AUTO_INCREMENT COMMENT '租户id',`name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '租户名',`contact_user_id` bigint NULL DEFAULT NULL COMMENT '联系人的用户编号',`contact_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '联系人',`contact_mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '联系手机',`status` tinyint NOT NULL DEFAULT 0 COMMENT '租户状态(0正常 1停用)',`website` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '绑定域名',`package_id` bigint NOT NULL COMMENT '套餐编号',`start_time` datetime NOT NULL COMMENT '开始时间',`end_time` datetime NOT NULL COMMENT '结束时间',`account_count` int NOT NULL COMMENT '账号限额',`create_by` bigint NULL DEFAULT NULL COMMENT '创建者',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_by` bigint NULL DEFAULT NULL COMMENT '更新者',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`is_deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 101 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '租户表' ROW_FORMAT = Dynamic;
租户套餐表 (system_tenant_package)
字段名 | 字段类型 | 注释 |
---|---|---|
id | bigint | 套餐id |
name | varchar(30) | 套餐名 |
status | tinyint | 租户状态(0正常 1停用) |
remark | varchar(256) | 备注 |
menu_ids | varchar(4096) | 联系手机 |
create_by | bigint | 创建者 |
create_time | datetime | 创建时间 |
update_by | bigint | 更新者 |
update_time | datetime | 更新时间 |
is_deleted | bit(1) | 是否删除(0 否 1 是) |
SQL语句
CREATE TABLE `system_tenant_package`(`id` bigint NOT NULL AUTO_INCREMENT COMMENT '套餐id',`name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '套餐名',`status` tinyint NOT NULL DEFAULT 0 COMMENT '租户状态(0正常 1停用)',`remark` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '备注',`menu_ids` varchar(4096) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '关联的菜单编号',`create_by` bigint NULL DEFAULT NULL COMMENT '创建者',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_by` bigint NULL DEFAULT NULL COMMENT '更新者',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`is_deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 105 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '租户套餐表';
岗位表(system_post)
字段名 | 字段类型 | 注释 |
---|---|---|
id | bigint | 岗位id |
code | varchar(64) | 岗位编码 |
name | varchar(30) | 岗位名称 |
sort | int | 显示顺序 |
status | tinyint | 状态(0正常 1停用) |
remark | varchar(500) | 备注 |
create_by | bigint | 创建者 |
create_time | datetime | 创建时间 |
update_by | bigint | 更新者 |
update_time | datetime | 更新时间 |
is_deleted | bit(1) | 是否删除(0 否 1 是) |
tenant_id | bigint | 租户id |
SQL语句
CREATE TABLE `system_post`(`id` bigint NOT NULL AUTO_INCREMENT COMMENT '岗位id',`code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '岗位编码',`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '岗位名称',`sort` int NOT NULL COMMENT '显示顺序',`status` tinyint NOT NULL COMMENT '状态(0正常 1停用)',`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注',`create_by` bigint NULL DEFAULT NULL COMMENT '创建者',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_by` bigint NULL DEFAULT NULL COMMENT '更新者',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`is_deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户id',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '岗位信息表' ROW_FORMAT = Dynamic;
角色表(system_role)
字段名 | 字段类型 | 注释 |
---|---|---|
id | bigint | 角色id |
name | varchar(30) | 角色名称 |
code | varchar(100) | 角色编码 |
sort | int | 显示顺序 |
status | tinyint | 角色状态(0正常 1停用) |
type | tinyint | 角色类型 |
remark | varchar(500) | 备注 |
create_by | bigint | 创建者 |
create_time | datetime | 创建时间 |
update_by | bigint | 更新者 |
update_time | datetime | 更新时间 |
is_deleted | bit(1) | 是否删除(0 否 1 是) |
tenant_id | bigint | 租户id |
SQL语句
CREATE TABLE `system_role`(`id` bigint NOT NULL AUTO_INCREMENT COMMENT '角色id',`name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '角色名称',`code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '角色标识',`sort` int NOT NULL COMMENT '显示顺序',`status` tinyint NOT NULL COMMENT '角色状态(0正常 1停用)',`type` tinyint NOT NULL COMMENT '角色类型',`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注',`create_by` bigint NULL DEFAULT NULL COMMENT '创建者',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_by` bigint NULL DEFAULT NULL COMMENT '更新者',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`is_deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户id',PRIMARY KEY (`id`, `code`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 18 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '角色信息表' ROW_FORMAT = Dynamic;
用户表(system_user)
字段名 | 字段类型 | 注释 |
---|---|---|
id | bigint | 用户id |
username | varchar(30) | 用户账号 |
password | varchar(100) | 密码 |
nickname | varchar(30) | 用户昵称 |
remark | varchar(500) | 备注 |
dept_id | bigint | 部门id |
varchar(50) | 用户邮箱 | |
mobile | varchar(11) | 手机号码 |
sex | tinyint | 用户性别 |
avatar | varchar(255) | 头像地址 |
status | tinyint | 帐号状态(0正常 1停用) |
login_ip | varchar(50) | 最后登录IP |
login_date | datetime | 最后登录时间 |
create_by | bigint | 创建者 |
create_time | datetime | 创建时间 |
update_by | bigint | 更新者 |
update_time | datetime | 更新时间 |
is_deleted | bit(1) | 是否删除(0 否 1 是) |
tenant_id | bigint | 租户id |
SQL语句
CREATE TABLE `system_user`(`id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户id',`username` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户账号',`password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '密码',`nickname` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '用户昵称',`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注',`dept_id` bigint NULL DEFAULT NULL COMMENT '部门id',`email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '用户邮箱',`mobile` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '手机号码',`sex` tinyint NULL DEFAULT 0 COMMENT '用户性别',`avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '头像地址',`status` tinyint NOT NULL DEFAULT 0 COMMENT '帐号状态(0正常 1停用)',`login_ip` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '最后登录IP',`login_date` datetime NULL DEFAULT NULL COMMENT '最后登录时间',`create_by` bigint NULL DEFAULT NULL COMMENT '创建者',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_by` bigint NULL DEFAULT NULL COMMENT '更新者',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`is_deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除(0 否 1 是)',`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户id',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 86 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户信息表' ROW_FORMAT = Dynamic;
部门表(system_dept)
字段名 | 字段类型 | 注释 |
---|---|---|
id | bigint | 部门id |
name | varchar(30) | 部门名称 |
parent_id | bigint | 父部门id |
sort | int | 显示顺序 |
leader_user_id | bigint | 负责人id |
phone | varchar(11) | 联系电话 |
varchar(50) | 邮箱 | |
status | tinyint | 部门状态(0正常 1停用) |
create_by | bigint | 创建者 |
create_time | datetime | 创建时间 |
update_by | bigint | 更新者 |
update_time | datetime | 更新时间 |
is_deleted | bit(1) | 是否删除(0 否 1 是) |
tenant_id | bigint | 租户id |
SQL语句
CREATE TABLE `system_dept`(`id` bigint NOT NULL AUTO_INCREMENT COMMENT '部门id',`name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '部门名称',`parent_id` bigint NOT NULL DEFAULT 0 COMMENT '父部门id',`sort` int NOT NULL DEFAULT 0 COMMENT '显示顺序',`leader_user_id` bigint NULL DEFAULT NULL COMMENT '负责人id',`phone` varchar(11) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '联系电话',`email` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '邮箱',`status` tinyint NOT NULL COMMENT '部门状态(0正常 1停用)',`create_by` bigint NULL DEFAULT NULL COMMENT '创建者',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_by` bigint NULL DEFAULT NULL COMMENT '更新者',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`is_deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除(0 否 1 是)',`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户id',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 114 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '部门表' ROW_FORMAT = Dynamic;
菜单表(system_menu)
字段名 | 字段类型 | 注释 |
---|---|---|
id | bigint | 菜单id |
name | varchar(50) | 菜单名称 |
permission | varchar(100) | 权限标识 |
type | tinyint | 菜单类型 |
sort | int | 显示顺序 |
parent_id | bigint | 父菜单id |
path | varchar(200) | 路由地址 |
icon | varchar(100) | 菜单图标 |
status | tinyint | 菜单状态 |
visible | bit(1) | 是否可见 |
keep_alive | bit(1) | 是否缓存 |
always_show | bit(1) | 是否总是显示 |
create_by | bigint | 创建者 |
create_time | datetime | 创建时间 |
update_by | bigint | 更新者 |
update_time | datetime | 更新时间 |
is_deleted | bit(1) | 是否删除(0 否 1 是) |
SQL语句
CREATE TABLE `system_menu`(`id` bigint NOT NULL AUTO_INCREMENT COMMENT '菜单id',`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '菜单名称',`permission` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '权限标识',`type` tinyint NOT NULL COMMENT '菜单类型',`sort` int NOT NULL DEFAULT 0 COMMENT '显示顺序',`parent_id` bigint NOT NULL DEFAULT 0 COMMENT '父菜单id',`path` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '路由地址',`icon` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '#' COMMENT '菜单图标',`status` tinyint NOT NULL DEFAULT 0 COMMENT '菜单状态',`visible` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否可见',`keep_alive` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否缓存',`always_show` bit(1) NOT NULL DEFAULT b'1' COMMENT '是否总是显示',`create_by` bigint NULL DEFAULT NULL COMMENT '创建者',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_by` bigint NULL DEFAULT NULL COMMENT '更新者',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`is_deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2736 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '菜单权限表' ROW_FORMAT = Dynamic;
用户岗位表(system_user_post)
字段名 | 字段类型 | 注释 |
---|---|---|
id | bigint | 关联id |
user_id | bigint | 用户id |
post_id | bigint | 岗位id |
create_by | bigint | 创建者 |
create_time | datetime | 创建时间 |
update_by | bigint | 更新者 |
update_time | datetime | 更新时间 |
is_deleted | bit(1) | 是否删除(0 否 1 是) |
tenant_id | bigint | 租户id |
SQL语句 |
CREATE TABLE `system_user_post`(`id` bigint NOT NULL AUTO_INCREMENT COMMENT '关联id',`user_id` bigint NOT NULL DEFAULT 0 COMMENT '用户id',`post_id` bigint NOT NULL DEFAULT 0 COMMENT '岗位id',`create_by` bigint NULL DEFAULT NULL COMMENT '创建者',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_by` bigint NULL DEFAULT NULL COMMENT '更新者',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`is_deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户id',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 119 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户岗位表' ROW_FORMAT = Dynamic;
用户角色表(system_user_role)
字段名 | 字段类型 | 注释 |
---|---|---|
id | bigint | 关联id |
user_id | bigint | 用户id |
role_id | bigint | 角色id |
create_by | bigint | 创建者 |
create_time | datetime | 创建时间 |
update_by | bigint | 更新者 |
update_time | datetime | 更新时间 |
is_deleted | bit(1) | 是否删除(0 否 1 是) |
tenant_id | bigint | 租户id |
SQL语句
CREATE TABLE `system_user_role`(`id` bigint NOT NULL AUTO_INCREMENT COMMENT '关联id',`user_id` bigint NOT NULL COMMENT '用户id',`role_id` bigint NOT NULL COMMENT '角色id',`create_by` bigint NULL DEFAULT NULL COMMENT '创建者',`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_by` bigint NULL DEFAULT NULL COMMENT '更新者',`update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`is_deleted` bit(1) NULL DEFAULT b'0' COMMENT '是否删除',`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户id',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 37 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '用户和角色关联表' ROW_FORMAT = Dynamic;
角色权限表(system_role_menu)
字段名 | 字段类型 | 注释 |
---|---|---|
id | bigint | 关联id |
role_id | bigint | 角色id |
menu_id | bigint | 菜单id |
create_by | bigint | 创建者 |
create_time | datetime | 创建时间 |
update_by | bigint | 更新者 |
update_time | datetime | 更新时间 |
is_deleted | bit(1) | 是否删除(0 否 1 是) |
tenant_id | bigint | 租户id |
SQL语句
CREATE TABLE `system_role_menu`(`id` bigint NOT NULL AUTO_INCREMENT COMMENT '关联id',`role_id` bigint NOT NULL COMMENT '角色id',`menu_id` bigint NOT NULL COMMENT '菜单id',`create_by` bigint NULL DEFAULT NULL COMMENT '创建者',`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_by` bigint NULL DEFAULT NULL COMMENT '更新者',`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`is_deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',`tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户id',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1122 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '角色和菜单关联表' ROW_FORMAT = Dynamic;