参与者中心方案设计

news2025/2/25 10:39:43

参与者中心方案设计

⼀、背景介绍

为适应客⼾多元化,随着业务发展,需要⽀持以平台为基础⽀持多租⼾企业⼊驻⽅式进⾏对外放。

1.1 需求来源

客⼾、产品

1.2 需求描述

  1. ⽀持多租⼾
  2. ⽀持客⼾⾃定义⻆⾊、菜单权限
  3. ⽀持根据不同⻆⾊设置不同数据权限控制
  4. ⽀持⽩名单⽤⼾,⽩名单⽤⼾可以同时在多家企业中
  5. ⽀持跨部⻔查看数据,⽀持集团查看⼦公司数据权限
  6. ⽀持对⽤⼾划分岗位管理
  7. ⽀持对租⼾账号控制,可以对对应租⼾设置有效期,过期该租⼾下所有账号⾃动失效
  8. ⽤⼾可以对菜单、⽬录、按钮进⾏权限控制
  9. ⼀个⽤⼾同时可以赋予多种⻆⾊,并对不同⻆⾊取并集
  10. ⽀持对临时⽤⼾设置有效时间,过期⾃动失效
  11. 系统租⼾可以对租⼾账号额度充值,可以对租⼾菜单进⾏开放关闭,⼦租⼾只能操作被授予的菜单

⼆、设计⽬标

  1. 帮助集团更好的管理旗下所有⼦企业。
  2. 对⽤⼾权限更好的控制避免出现不同⼈员误操作造成数据混乱。
  3. 多元化管理⽤⼾,帮助企业降本增效。
  4. 以中台形式服务所有业务中台。
  5. 以sdk+apollo命名空间+权限注解 形式引⼊,插拔式⽅便快捷接⼊

三、需求范围

企业、⽤⼾、功能菜单

四、设计⽅案

4.1 架构设计

4.1.1 功能脑图

4.2 详细设计

4.2.1 系统用例

4.2.2 业务用例
租户管理

岗位管理

部门管理

菜单管理

角色管理

用户管理

4.2.3 业务序列图
获取菜单序列图

业务方接口调用请求序列图

4.2.4 E-R图

4.2.5 表设计
-- ⽤⼾表

create table t_user
(
    id bigint auto_increment comment 'ID' primary key,
    user_name  varchar(20) not null comment '⽤⼾名',
    nick_name  varchar(64) comment '⽤⼾昵称',
    phone  varchar(11) comment '⼿机号',
    email  varchar(255) comment '邮箱',
    password  varchar(255) not null comment '密码',
    avatar    varchar(255) comment '头像',
    last_login_time datetime comment '最后登陆时间',
    available_time datetime comment '失效时间',
    available tinyint(1) default 1 null comment '是否启⽤, 0-否,1-是',
    is_box_user   tinyint(1) default 0 null comment '是否已成为box服务⽤⼾,1-已成',
    is_whitelist    tinyint(1) default 0 null comment '是否是⽩名单⽤⼾, 0-否, 1-是',
    create_time datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
    creator_name  varchar(255) comment '创建⼈',
    update_time datetime    DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP comment '更新时间',
    updater_name  varchar(255) comment '更新⼈'
) engine=InnoDB DEFAULT charset = utf8 comment '⽤⼾表';


-- 租⼾表

create table t_tenant
(
    id    bigint auto_increment comment 'ID' primary key,
    parent_id bigint comment '⽗租⼾id',
    tenant_name   varchar(255) not null comment '租⼾名称',
    contact_mobile varchar(11) not null comment '联系⼈⼿机号',
    contact_person varchar(64) not null comment '联系⼈名称',
    email varchar(255) comment '邮箱',
    logo  varchar(255) comment 'log地址',
    account_max_num Integer(20) comment '账号最⼤额度,-1:不限',
    available_time datetime comment '失效时间',
    account_type  tinyint(1) default 1 comment '账号类型,0-系统租⼾,1-普通租⼾',
    available tinyint(1) default 1 comment '是否启⽤, 0-否,1-是',
    remark    varchar(255) comment '备注',
    create_time datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
    creator_name  varchar(255) comment '创建⼈',
    update_time datetime    DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP comment '更新时间',
    updater_name  varchar(255) comment '更新⼈'
) engine=InnoDB DEFAULT charset = utf8 comment '租⼾表';

-- ⻆⾊表

create table t_role
(
    id    bigint auto_increment comment 'ID' primary key,
    role_name varchar(255) not null comment '⻆⾊名称',
    serial_number int(11) default 0 comment '显⽰顺序',
    data_permission tinyint(1) comment '数据权限,0-全部,1-指定部⻔数据,2-本部⻔数据,3-本部⻔及以下数据,4-进本⼈数据',
    tenant_id bigint comment '所属租⼾id',
    remark    varchar(255) comment '备注',
    deleted   tinyint(1) default 0 comment '是否删除, 0-正常,1-删除',
    create_time datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
    creator_name  varchar(255) comment '创建⼈',
    update_time datetime    DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP comment '更新时间',
    updater_name  varchar(255) comment '更新⼈'
) engine=InnoDB DEFAULT charset = utf8 comment '⻆⾊表';


 -- ⻆⾊部⻔关联表

create table t_role_dept_relationship
(
    id    bigint auto_increment comment 'ID' primary key,
    tenant_id bigint comment '所属租⼾id',
    dept_id bigint  not null comment '部⻔id,数据权限为指定部⻔时,所选中的部⻔id',
    role_id   bigint  not null comment '关联⻆⾊id',
    deleted   tinyint(1) default 0 comment '是否删除, 0-正常,1-删除',
    create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
    creator_name varchar(255) comment '创建⼈',
    update_time datetime    DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP comment '更新时间',
    updater_name varchar(255) comment '更新⼈'
) engine=InnoDB DEFAULT charset = utf8 comment '⻆⾊菜单关联表';

 -- 资源表

create table t_resource
(
    id    bigint auto_increment comment 'ID' primary key,
    tenant_id bigint comment '所属租⼾id',
    parent_id bigint comment '⽗菜单id',
    name  varchar(255) not null comment '资源名称',
    menu_type int(11) not null comment '资源类型,1-⽬录,2-菜单,3-按钮',
    menu_icon varchar(255) comment '资源名称图标',
    serial_number int(11) default 0 comment '显⽰顺序',
    remark    varchar(255) comment '备注',
    deleted   tinyint(1) default 0 comment '是否删除, 0-正常,1-删除',
    create_time datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
    creator_name varchar(255) comment '创建⼈',
    update_time datetime    DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP comment '更新时间',
    updater_name varchar(255) comment '更新⼈'
) engine=InnoDB DEFAULT charset = utf8 comment '资源表';


 -- 部⻔表

create table t_dept
(
    id   bigint auto_increment comment 'ID' primary key,
    tenant_id    bigint comment '所属租⼾id',
    parent_id    bigint comment '上级部⻔id',
    dept_name    varchar(255) not null comment '部⻔名称',
    principal_id bigint  not null comment '负责⼈id',
    principal_name   varchar(20) not null comment '负责⼈名称',
    principal_mobile varchar(11) comment '负责⼈联系电话',
    remark   varchar(255) comment '备注',
    deleted  tinyint(1) default 0 comment '是否删除, 0-正常,1-删除',
    create_time datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
    creator_name varchar(255) comment '创建⼈',
    update_time datetime    DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP comment '更新时间',
    updater_name varchar(255) comment '更新⼈'
) engine=InnoDB DEFAULT charset = utf8 comment '部⻔表';


 -- 岗位表

create table t_position
(
    id   bigint auto_increment comment 'ID' primary key,
    tenant_id    bigint comment '所属租⼾id',
    position_name varchar(255) not null comment '岗位名称',
    remark   varchar(255) comment '备注',
    deleted  tinyint(1) default 0 comment '是否删除, 0-正常,1-删除',
    create_time datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
    creator_name varchar(255) comment '创建⼈',
    update_time datetime    DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP comment '更新时间',
    updater_name varchar(255) comment '更新⼈'
) engine=InnoDB DEFAULT charset = utf8 comment '部⻔表';

-- 操作⽇志表
create table t_operate_log
(
    id   bigint auto_increment comment 'ID' primary key,
    tenant_id    bigint comment '所属租⼾id',
    type varchar(255) not null comment '操作类型,update、add、deleted',
    remark   varchar(255) not null comment '操作描述',
    deleted  tinyint(1) default 0 comment '是否删除, 0-正常,1-删除',
    create_time datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
    creator_name varchar(255) comment '创建⼈',
    update_time datetime    DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP comment '更新时间',
    updater_name varchar(255) comment '更新⼈'
) engine=InnoDB DEFAULT charset = utf8 comment '操作⽇志表';

-- ⽤⼾⻆⾊关联表
create table t_user_role_relationship
(
    id   bigint auto_increment comment 'ID' primary key,
    user_id  bigint  not null comment '关联⽤⼾id',
    role_id  bigint  not null comment '关联⻆⾊id',
    tenant_id    bigint comment '所属租⼾id',
    deleted  tinyint(1) default 0 comment '是否删除, 0-正常,1-删除',
    create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
    creator_name varchar(255) comment '创建⼈',
    update_time datetime    DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP comment '更新时间',
    updater_name varchar(255) comment '更新⼈'
) engine=InnoDB DEFAULT charset = utf8 comment '⽤⼾⻆⾊关联表';

-- ⻆⾊菜单关联表

create table t_role_resource_relationship
(
    id   bigint auto_increment comment 'ID' primary key,
    resource_id bigint   not null comment '关联资源菜单id',
    role_id  bigint  not null comment '关联⻆⾊id',
    tenant_id    bigint comment '所属租⼾id',
    deleted  tinyint(1) default 0 comment '是否删除, 0-正常,1-删除',
    create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
    creator_name varchar(255) comment '创建⼈',
    update_time datetime    DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP comment '更新时间',
    updater_name varchar(255) comment '更新⼈'
) engine=InnoDB DEFAULT charset = utf8 comment '⻆⾊菜单关联表';

-- ⽤⼾部⻔关联表
create table t_user_dept_relationship
(
    id   bigint auto_increment comment 'ID' primary key,
    user_id bigint not null comment '关联⽤⼾id', 
    dept_id bigint not null comment '所属部⻔id', 
    tenant_id  bigint comment '所属租⼾id',
    deleted  tinyint(1) default 0 comment '是否删除, 0-正常,1-删除', 
    create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
    creator_name varchar(255) comment '创建⼈',
    update_time datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP comment '更新时间',
    updater_name varchar(255) comment '更新⼈'
) engine=InnoDB DEFAULT charset = utf8 comment '⽤⼾⻆⾊关联表';

-- ⽤⼾岗位关联表
create table t_user_position_relationship
 (
    id  bigint auto_increment comment 'ID' primary key,
    user_id bigint  not null comment '关联⽤⼾id',
    position_id bigint  not null comment '关联所属岗位id',
    tenant_id   bigint comment '所属租⼾id',
    deleted tinyint(1) default 0 comment '是否删除, 0-正常,1-删除',
    create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP comment '创建时间',
    creator_name varchar(255) comment '创建⼈',
    update_time datetime    DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP comment '更新时间', 
    updater_name varchar(255) comment '更新⼈' 
 ) engine=InnoDB DEFAULT charset = utf8 comment  '⽤⼾⻆⾊关联表';
4.2.6 接口设计
4.2.6.1 租户管理
4.2.6.2 岗位管理
4.2.6.3 部门管理
4.2.6.4 日志管理
4.2.6.5 菜单管理
4.2.6.6 角色管理
4.2.6.7 用户管理

4.3 权限框架

4.3.1 Shiro

Apache Shiro是⼀个⼤且易于使⽤的Java框架可执、授学和理。借助Shiro易于API,您松地保任何应-动应序到Web

4.3.2 Spring Security

Spring Security是⼀个框架,提供 认证(authentication)、授权(authorization) 和 保护,以抵御常⻅的攻击。它对保护命令式和响应式应⽤程序有⼀流的⽀持,是保护基于Spring的应⽤程序的事实

Spring Security的真⼤之处于可扩展以满⾜⾃定义要求

Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架,它是用于保护基于Spring的应用程序的事实上的标准。Spring Security提供了全面的安全性功能,包括认证、授权、密码加密、会话管理等。

在Spring应用程序中集成Spring Security可以帮助您实现以下目标:

  1. 保护应用程序的URL和资源,确保只有经过身份验证和授权的用户才能访问它们。
  2. 提供多种身份验证机制,如用户名/密码、OAuth2、LDAP等。
  3. 支持基于角色的访问控制,允许您根据用户的角色和权限来限制对特定资源的访问。
  4. 提供会话管理功能,包括会话超时、并发会话控制等。
  5. 集成与其他安全相关的库和框架,如Spring Social、Spring Data等

4.3.3 Sa-Token

Sa-Token 是⼀个轻量级 Java 认证框架录认证认证OAuth2.0分布式Session会话微服务鉴权 等⼀列权相关

Sa-Token  在以雅的⽅完成认证

4.3.4 权框架对

Shiro

Spring Security

sa-token

1shiro代码更易于阅使

2shiroweb境,任何框架或容绑定

1spring⼀员spring结合较好spring- boot使起来更加便

2oauth

1雅的⽅

完成认证

2

3OAuth权认

4分布式会话

5⽂⽂

第三⽅登⼿

杂度最

新⽣

建议采

五 其

硬件资源要求 24G

中间件依赖mysqlRedisApollo

并发1K+并发请

时间毫秒

障数据正按照

Q&A

 如果对您有帮助的话,希望能得到您的打赏支持。你的每一份鼓励都是我前行的动力源泉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1524421.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

备战蓝桥杯Day26 - 二叉搜索树查询和删除操作

一、查询 递归查询 寻找的值比根节点大&#xff0c;遍历右子树&#xff1b; 寻找的值比根节点小&#xff0c;遍历左子树。 def qurey(self, node, val):if not node: # 没有节点&#xff0c;返回空return Noneif node.data < val:return self.qurey(node.rchild, val)el…

Spring MVC 如何返回响应

上期我们讲请求的时候&#xff0c;每个方法返回的数据就是响应&#xff0c;我们也可以返回一个静态页面&#xff0c;设置响应的状态码&#xff0c;Header信息等。 1. 返回静态页面 我们先在项目的static文件夹下创建一个HTML文件作为我们返回的页面&#xff1a; <!DOCTYPE…

OLAP与数据仓库和数据湖

OLAP与数据仓库和数据湖 本文阐述了OLAP、数据仓库和数据湖方面的基础知识以及相关论文。同时记录了我如何通过ChatGPT以及类似产品&#xff08;通义千问、文心一言&#xff09;来学习知识的。通过这个过程让我对于用AI科技提升学习和工作效率有了实践经验和切身感受。 预热 …

粤嵌6818嵌入式开发入门教程

学习目标 1.了解嵌入式开发 2.开发环境的搭建 3.Linux操作系统的基本操作 一、了解嵌入式开发 以应用为中心&#xff0c;以计算机技术为基础&#xff0c;软硬件可裁剪&#xff0c;适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。 1.嵌入式可以干…

再见 Pandas,又一数据处理神器

cuDF介绍 cuDF是一个基于Apache Arrow列内存格式的Python GPU DataFrame库&#xff0c;用于加载、连接、聚合、过滤和其他数据操作。cuDF还提供了类似于pandas的API。 GitHub&#xff1a; https://github.com/rapidsai/cudf Documentation&#xff1a; https://docs.rapids.a…

基于springboot+vue的大学生就业需求分析系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

2.亿级积分数据分库分表:增量数据同步之代码双写,为什么没用Canal?

1.亿级积分数据分库分表&#xff1a;总体方案设计 上一篇博客中写了一下积分数据分库分表的总体方案设计&#xff0c;里面说了采用应用程序代码双写的方式实现的增量数据同步&#xff0c;本篇就对这一块进行一些细化的介绍&#xff0c;包括&#xff1a; 为什么不用Canal监听数…

WebServer -- 八股(终章)

&#x1f442; Honey Honey - 孙燕姿 - 单曲 - 网易云音乐 目录 &#x1f33c;触类旁通 &#x1f6a9;线程 && 进程 线程与进程的区别 多线程锁是什么 进程 / 线程 / 协程 的区别 线程切换时&#xff0c;需要切换的状态 &#x1f382;并发 && 并行 并…

一起玩儿3D打印机——03 Marlin固件的获取和安装环境的配置

摘要&#xff1a;本文介绍Marlin固件的获取和安装环境的配置 Marlin是一款开源软件&#xff0c;其主页为&#xff1a;https://marlinfw.org/&#xff0c;首页正中就是下载连接&#xff0c;如下图所示&#xff1a; 单击下面的“Download Marlin 2.1.2.2”按钮就会进入下载页面&a…

Transformer学习笔记(一)

一、预训练 1、图像领域的预训练 通过 ImageNet 数据集我们训练出一个模型 A由于 CNN 的浅层学到的特征通用性特别强&#xff0c;我们可以对模型 A 做出一部分改进得到模型 B&#xff08;两种方法&#xff09;&#xff1a; 冻结&#xff1a;浅层参数使用模型 A 的参数&#x…

postgres中的hook机制

瀚高数据库 目录 环境 文档用途 详细信息 环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 7 版本&#xff1a;14,13,12,11 文档用途 1.了解使用postgres中的hook机制&#xff0c;在不更改内核代码的前提下完成一些定制化需求&#xff1b; 2.从底层理解插…

Visual Studio 2022 出现:E1696无法打开 源 文件 “stdafx.h“;E0020未定义标识符 “_TCHAR“错误解决办法

今天在用自己电脑上的visual studio2022写并行计算实验报告时出现了这种错误&#xff0c;但我在机房电脑vs2010版本运行时没有任何问题&#xff0c;于是我在网上找了解决办法&#xff0c;现总结如下。 1.报错E1696无法打开 源 文件 "stdafx.h"&#xff0c;解决办法&a…

移动通信网络AT指令

AT 命令是用来控制 TE(如 PC 等用户终端)和 MT(如移动台等移动终端)之间交互 的规则 AT 命令的返回值包括两部分,响应信息和结果码。 PLMN 移动通信网络PLMN = MCC + MNC,PLMN由MCC移动国家码和MNC移动网络码组成,例如:中国移动GSM的PLMN为:46000(MCC:460, M…

Internet Download Manager(IDM下载) v6.42.3 绿色版介绍

互联网下载管理器是一个广泛使用的软件&#xff0c;它可以帮助用户更好地管理和加速他们的下载。最新版本v6.42.3已经发布&#xff0c;它带来了一系列新功能和改进&#xff0c;让用户更加方便和快速地下载他们需要的文件。 新版本的互联网下载管理器增加了对最新浏览器的支持&…

通过键盘对机械臂进行操作

1 #include<myhead.h>2 #include<linux/input.h>3 #define SER_PORT 88884 #define SER_IP "192.168.116.225"5 #define CLI_PORT 99996 #define CLI_IP "192.168.65.129"7 int main(int argc, const char *argv[])8 {9 //1、创建用于连接…

题目:特殊的三角形(蓝桥OJ 3008)

问题描述&#xff1a; 解题思路&#xff1a; 可以先求出1~1e6每个位置是否有解&#xff0c;后计算前缀和再求出不同区间的和。&#xff08;时间复杂度小&#xff09; 进行dfs操作&#xff1a;依次组合1~1e6所有元素。并计算每一个组合的乘积&#xff0c;在该乘积位置的cnt加一。…

2024.3.15

1.单向循环链表 代码&#xff1a; #include"loop.h" //创建单向循环链表 loop_p create_loop_list() {loop_p H (loop_p)malloc(sizeof(loop));if(HNULL){printf("空间申请失败\n");return NULL;}H->len0;H->nextH;return H; } //创建节点 loop_p…

AJAX概念和axios使用、URL、请求方法和数据提交、HTTP协议、接口、form-serialize插件

AJAX概念和axios使用 AJAX概念 AJAX就是使用XMLHttpRequest对象与服务器通信&#xff0c;它可以使用JSON、XML、HTML和text文本等格式发送和接收数据&#xff0c;AJAX最吸引人的就是它的异步特性&#xff0c;也就是说它可以在不重新刷新页面的情况下与服务器通信&#xff0c;…

2024全国水科技大会-协办单位:海南立昇净水科技实业有限公司

海南立昇净水科技实业有限公司 集膜技术研发、生产和销售服务于一体的集团型高科技企业。30年来一直专注于“膜”技术研发&#xff0c;始终坚持走自主科技创新之路。在国内构建起由26家直属分公司和超过500家经销代理商组成的营销服务网络&#xff0c;立昇净水设备被广泛应用于…

前端学习之css伪元素选择器

伪元素选择器 &#xff08;注释是对各个内容的解释与理解&#xff09; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>伪元素选择器</title><!-- 双冒号开头一般都称为伪元素&#xff0c;…