参与者中心方案设计

参与者中心方案设计

⼀、背景介绍

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

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.mfbz.cn/a/472998.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

<Linux> 生产者消费者模型

目录 前言: 一、什么是生产者消费者模型 (一)概念 (二)生产者消费者之间的关系 (三)生产者消费者模型特点 (四)生产者消费者模型的优点 二、基于阻塞队列实现生产…

Vue按需加载:提升应用性能的利器

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

Golang 异步(bsd/linux)io

Golang 异步(bsd/linux)io 在日常开发中,读写文件的底层调用函数是syscall.Read/Write。一切都是围绕这两个函数展开的,不过有时候需要或者就是单纯想异步执行。liburing是linux上一个很好的原生异步io库,这里需要适配bsd派系的系统&#xf…

Kotlin runBlocking CoroutineScope synchronized简单死锁场景

Kotlin runBlocking CoroutineScope synchronized简单死锁场景 import kotlinx.coroutines.*fun main(args: Array<String>) {runBlocking {val lock1 Any()val lock2 Any()CoroutineScope(Dispatchers.IO).launch {repeat(10) {println("A-$it 申请 lock1...&quo…

[NCom]:CeO2上单原子 Pt用于 CO 氧化的记忆驱动动力学

摘要&#xff1a;CeO2上的铂族金属单原子代表了降低汽车尾气处理催化剂贵金属需求的潜在方法。在这里&#xff0c;我们展示了CeO2上两种类型的单原子 Pt (Pt1) 的动态演化&#xff0c;即Pt/CeO2中的吸附 Pt 1和PtATCeO2中的方形平面 Pt1&#xff0c;在 500 C 下制造&#xff0c…

金融知识分享系列之:KD指标

金融知识分享系列之&#xff1a;KD指标 一、KD指标二、KD指标计算三、KD指标原理四、KD指标应用 一、KD指标 KD信号提供入场的工具 名称&#xff1a;随机震荡指标参数&#xff1a;&#xff08;9,3,3&#xff09;组成&#xff1a;K线&#xff0c;D线&#xff0c;20轴&#xff0…

【学习心得】Python数据分析的基本思路

一、什么是数据分析&#xff1f; 数据分析是指通过一些方法&#xff0c;对一些数据进行分析&#xff0c;从中提取出有价值的信息并形成结论进行展示。 &#xff08;1&#xff09;一些方法 数学和统计学方法&#xff1a;例如回归分析、聚类分析、主成分分析、时间序列分析等&a…

Day01-数据类型和运算符(MySQL服务器的安装,MySQL客户端,数据类型,运算符,MySQL的语法规范)

文章目录 Day01-数据类型和运算符学习目标1. 数据库介绍1.1 数据库的发展历史1.2 数据库分类1.2.1 关系型(SQL)数据库1.2.2 非关系型(NoSQL)数据库1.2.3 数据库排名 2. MySQL服务器的安装2.1 MySQL介绍2.2 下载2.3 安装2.4 启动服务器2.5 卸载 3. MySQL客户端3.1 使用命令行客户…

数据库关系运算理论:关系数据操作与关系完整性概念解析

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

Java学习六—面向对象

一、关于面向对象 1.1简介 Java 是一种面向对象编程语言&#xff0c;其核心思想是面向对象编程&#xff08;Object-Oriented Programming&#xff0c;OOP&#xff09;。 面向对象编程是一种程序设计范式&#xff0c;它将数据与操作数据的方法&#xff08;函数&#xff09;捆…

K8S核心原理

K8S核心原理 K8S的网络模型 K8S的网络中主要存在4种类型的通信&#xff1a; 同一Pod内的容器间通信各个Pod彼此间的通信Pod和Service间的通信集群外部流量和Service之间的通信 K8S为Pod和Service资源对象分别使用了各自的专有网络&#xff0c;Pod网络由K8S的网络插件配置实…

影响MySql 服务性能最重要的两个参数。

不同的需求&#xff0c;不同服务器硬件配置&#xff0c;要想MySql 服务处于最优状态是需要调试一些参数的&#xff0c;可调的参数非常多&#xff0c;在看完官方的mysql的文档&#xff0c;结合以前的配置情况在这里选择影响性能最大的参数作介绍&#xff1a; 先查一下参数情况&…

Transformer位置编码(Position Embedding)理解

本文主要介绍4种位置编码&#xff0c;分别是NLP发源的transformer、ViT、Sw-Transformer、MAE的Position Embedding 一、NLP transformer 使用的是1d的绝对位置编码&#xff0c;使用sincos将每个token编码为一个向量【硬编码】 Attention Is All You Need 在语言中&#xff0…

搜索(Shuffle‘m Up ,Oil Deposits )

Shufflem Up 思路&#xff1a;首先我们需要知道两个停止条件第一就是找到了&#xff0c;那么怎么算没有找到呢&#xff1f;当一个字符串重复出现的时候就代表着已经不可能出现答案了。 犯下的错误&#xff1a;第一就是对string的使用不够了解。第二就是对map数组的使用也不是很…

循环冗余检验CRC

目录 一、数据链路层 二、数据链路层的三个基本问题 1. 封装成帧 2. 透明传输 3. 差错检验 4. CRC计算​编辑 三、参考书目和视频 一、数据链路层 从物理层传来的比特(实际上就是物理层表示数据的特殊名称)&#xff0c;会在数据链路层封装成帧(实际上就是数据链路层表示…

视频素材库排行榜前六名,推荐大家收藏

大家好&#xff01;今天我要给大家带来的是视频素材库排行榜前十名&#xff0c;让你的视频创作更加别出心裁&#xff01; 蛙学网在视频素材库排行榜中&#xff0c;蛙学网绝对是值得使用的。这里有大量的高质量视频素材&#xff0c;涵盖了各种风格和主题&#xff0c;特别是对于展…

蓝桥杯单片机快速开发笔记——串口通信

一、原理分析 二、思维导图 三、示例框架 #include <STC15F2K60S2.H> #include "HC573.h"void UartInit(void) //9600bps12.000MHz {SCON 0x50; //8位数据,可变波特率AUXR | 0x01; //串口1选择定时器2为波特率发生器AUXR & 0xFB; //定时器时钟12T模式…

ASP.NET-简单(增、删、改、查)

目录 背景: Person.cs代码: WebForm1.aspx代码: personOperate.cs代码: 最终效果: 背景: 界面效果: 主页面的控件布局&#xff1a; 4个label: -Label控件用于在页面上显示文本或标签&#xff0c;通常用于标识输入框&#xff0c;显示标题或提供说明性文字 2个Textbox: -Tex…

泳道图手把手快速上手(附带软件)

&#x1f341; 作者&#xff1a;知识浅谈&#xff0c;CSDN签约讲师&#xff0c;CSDN博客专家&#xff0c;华为云云享专家&#xff0c;阿里云专家博主 &#x1f4cc; 擅长领域&#xff1a;全栈工程师&#xff0c;大模型&#xff0c;爬虫、ACM算法 &#x1f492; 公众号&#xff…

有了std::thread,为什么还需要引入std::jthread?

C进阶专栏&#xff1a;http://t.csdnimg.cn/HGkeZ 目录 1.前言 2.std::is_invocable_v 3.std::jthread 3.1.构造函数 3.2.std::jthread无需join/detach使用实例 3.3.std::jthread处理外部请求中断实 3.4.处理中断请求示例代码 4.特性 5.总结 1.前言 C11以来提供了C原…