当前位置: 首页 > news >正文

SAAS架构设计2-流程图-注册流程图

用户和租户的关系(多对多)注册流程说明

注册流程

个人账号注册(全局身份)

用户首先注册个人全局账号,填写基础信息(如邮箱、手机号、密码等)。

系统要求邮箱或手机号全局唯一,作为用户唯一标识。

注册完成后,用户拥有独立账号,但此时未关联任何租户。

加入或创建租户(租户关联)

加入现有租户:

用户通过租户邀请链接、租户ID或管理员审核的方式加入租户。

例如:酒店管理员发送邀请链接给员工,员工登录后确认加入。

创建新租户:

  1. 若用户是租户管理员(如新酒店或经销商),需在注册后补充租户信息(如酒店名称、营业执照等),系统自动创建租户(tenant),并绑定该用户为管理员设置字段(init_admin_id)。
  2. 创建租户与用户关系插入记录(tenant_user)

登录流程

  1. 登录平台账号
  2. 获得平台账号下面的租户信息(tenant),
  3. 点击进入平台管理中心。
  4. 判断当前账号是否为租户的默认管理员

是管理员:

根据租户ID,直接获得租户菜单权限,执行流程:tenant->tenant_type->module->menu

不是管理员:

根据租户的角色获得权限:user_role->role->menu

示例场景

租户A注册流程

租户A提交注册信息(名称、管理员账号)。

系统创建租户A记录,分配预设权限(如user:read, order:create)到tenant_permission。

自动创建角色“租户A管理员”,关联所有分配的权限。

创建用户“admin@a.com”,绑定管理员角色。

租户A创建员工

租户管理员登录,创建新用户“user1@a.com”。

创建新角色“客服”,从tenant_permission中选择权限(如order:read)。

将“user1@a.com”绑定到“客服”角色,该用户仅拥有order:read权限。

安全与约束

权限隔离:通过tenant_id确保租户数据完全隔离。

权限校验:

创建角色时,仅允许选择tenant_permission中的权限。

修改角色权限时,需校验权限是否属于租户。

唯一性约束:

租户名称全局唯一。

用户名在租户内唯一。

角色名称在租户内唯一。

优化建议

缓存机制:缓存租户的可用权限和角色权限,减少数据库查询。

审计日志:记录权限分配和角色变更操作,便于追溯。

批量操作:支持批量分配权限给角色,提升管理效率

用户和租户的关系(一对一)注册流程说明

租户注册流程:

1. 租户填写注册信息(如租户名称、管理员用户信息)。

2. 系统创建租户记录(tenant)。

3. 系统为租户分配预设权限(插入到tenant_permission)(如分配基础权限包tenant_type_permission)。

4. 系统为租户创建默认角色添加记录(role):

- 管理员角色:拥有所有分配给该租户的权限(role_permission)。

- 普通用户角色:可能有一些基本权限,由平台预设。

5. 创建初始管理员用户(user),关联到租户,并分配管理员角色。

6. 管理员用户可以登录,创建员工账号和角色,分配权限(仅限于tenant_permission中的权限)。

员工注册流程(由租户管理员操作):

1. 租户管理员创建新用户(员工),指定用户名、密码等信息。

2. 选择该用户要分配的角色(必须是该租户已有的角色,或者新建角色)。

3. 新建角色时,租户管理员从该租户的可用权限(tenant_permission)中选择权限。

4. 用户创建后,自动关联到所选角色,获得相应权限。

租户开通模块流程关键流程说明

选择模块:租户管理员在平台提供的模块列表中选择需要开通的模块(如订单管理)。

权限同步:插入tenant_module记录。根据module_permission表,将模块下所有权限插入tenant_permission。

权限生效:租户管理员可为角色分配新开通模块的权限。

关闭模块流程

移除模块:删除tenant_module中对应记录。

清理权限:从tenant_permission中移除该模块关联的所有权限。

角色更新:自动移除角色中已失效的权限(需触发校验)。

http://www.xdnf.cn/news/678961.html

相关文章:

  • uni-app 中开发问题汇总
  • 【网络编程】十七、多路转接之 epoll
  • JAVA SE 文件IO
  • Python函数
  • python+tkinter实现GUI界面调用即梦AI文生图片API接口
  • PPO算法里clipfrac变量的作用
  • 《计算机组成原理》第 7 章 - 指令系统
  • 恶意npm与VS Code包窃取数据及加密货币资产
  • 科研级计算服务器 稳定支撑创新研究
  • 系统设计——项目设计经验总结3
  • int c =5; 代码解释
  • 《计算机组成原理》第 5 章 - 输入输出系统
  • 冒泡排序:像煮汤一样让数字「冒泡」
  • centos7安装MySQL(保姆级教学)
  • Linux信号量(32)
  • 鸿蒙OSUniApp 开发的滑动图片墙组件#三方框架 #Uniapp
  • 方正字库助力华为,赋能鸿蒙电脑打造全场景字体解决方案
  • 如何验证 AXI5 原子操作
  • leetcode刷题日记——完全二叉树的节点个数
  • Java怎么实现父子线程的值传递?InheritableThreadLocal类和transmittable-thread-local类?
  • Unity3D仿星露谷物语开发53之库存管理页面
  • Introduction to SQL
  • 【键盘说明书备份】ENERGYFORT
  • 编程日志5.27
  • MySQL :MySQL基本概念
  • 高性能计算 | 硅光芯片代工厂揭秘——技术特点与未来演进
  • SpringBoot集成jwt,实现token验证
  • 鸿蒙OSUniApp 实现自定义的侧边栏菜单组件#三方框架 #Uniapp
  • SQLord: 基于反向数据生成和任务拆解的 Text-to-SQL 企业落地方案
  • CMake 在尝试下载 Boost 时失败:SHA256 校验和与预期值不匹配