作者对SaaS系统的底层架构的设计进行了拆解并梳理了需求逻辑,供大家一同参考和学习。 SaaS系统在建设过程中,因面向的用户群体业务灵活性变化,许多同仁在做系统时,基于公司/市场等多方面压力,往往在建设初期忽略最为重要的底层架构设计,将更多的视角精力投入至业务场景的支撑。 但是每当系统支撑需求到达一定阶段的时候,才会将产品视角回顾至底层架构及公有业务模块,这时基本面临底层重构的窘境。(接下里正应对那句:人在家中坐,锅从天上来。经典语录有多少同仁正在经历/经历过?) 在过往的SaaS系统架构设计中,个人看好基于OA协同办公的工具型SaaS系统的架构模式。在参考了市面多项产品后,我花了2个月的时间去进行底层架构的设计。(多数的产品同仁观念里,这样是不存在事情。开发和老板会打死你!但是你要去用不要脸的精神去说服他们。)在经历2个系统的开发过程及运行后,认证了这种设计方法的通用性。希望这种设计方法能够获得诸位同仁的认可,并且能在你们建设系统的过程中起到一定的案例参考作用。 整个底层功能结构的建设,个人入手时并没有将用户权限,人员管理,组织结构放到第一视角。而是意识到SAAS-软件即服务的租户观念。整个系统的建设前提是满足租户使用的需求,解决租户业务场景上的痛点。那么第一视角是考虑租户来了系统需要做什么?)租户怎么来产品运营考虑的事儿。 为此将底层拆分了如下图的功能类型,并且大致说下需求逻辑。 一、注册环节 SaaS系统面向用户注册与传统注册策略区别在于,字段多用性,字段变化多发性。 例如:现在一款面向企业操作工具的租户注册。需要用户输入用户名称、手机号码、图形验证码、短信验证码、密码及二次确认密码等数据。那么这些字段信息,在传统系统中的运用,多在于查询注册用户USER-ID相关数据,数据维度多以外键映射多张的数据表,不存在因其他数据表变化而影响该部分数据留存。 而基于租户模式的SaaS系统中,上述数据作用不仅仅是用于传统数据查询,获取。更多在于字段书多张业务数据表之间分离结耦, 二、低概率异常场景 因租户注册的手机号,可能会挂失/注销,而影响整个操作系统的运用、(这种低概率业务事件,若系统底层设计时若未考虑进入,基于SaaS安全性承诺、我们是无法查询租户登录密码的)那么为了避免该类实现发生,从产品维度,是否可以将租户注册的手机号当做账号处理,将账号植入密保手机概念。 租户手机号码不可登录系统的时候,我们一则可以协助租户更换密保手机。二则可以培养租户对于系统灵活安全的平台意识。 三、租户注册功能需求明细说明 PC端账号注册,视为注册租户-【即根机构】-且视为注册企业租户的人员为admin角色。当且仅admin角色下仅有1人。 移动端注册时,不做根机构注册,视为C端流量用户流入企业系统。可被根机构邀请加入租户,或者主动申请加入租户。 注册时,字段说明及注重逻辑事项明细如下: 1. 账号 必填项、11位手机号码、号段验证。错误提示语【请输入11位未注册的手机号、】 (1)若点击【确认注册】校验账号已注册、给与提示语【请输入11位未注册的手机号】提示语定时界面3s、自动隐藏【注:短信验证码费用由***网进行承担】 (2)企业注册的手机号做2类逻辑: 视作手机号为账号; 视作手机号为联系方式-以防注册企业租户的人员手机丢失,手机号注销等不可控因素。 (3)且注册的账号允许以:账号+密码的形式进行登录。且注册的手机号允许视为联系电话在(个人信息详情页-联系电话)被更换,更换的时候需要提示为:该手机号为账号密保手机,请确认是本人操作,并且输入手机验证码。 2. 企业名 必填项、输入企业名后,校验该企业名是否已注册,对应错误提示语:该企业已注册,请换个企业名称再注册,提示语定时3s后自动隐藏。 注:企业名称输入后,该字段自动存储至【企业信息-企业名称中】、且系统左上角的名称显示注册时输入的名称。 此字段逻辑为: (1)注册时,企业ID下的企业信息详情表、该字段数据字段为insert动作,在企业信息中,编辑此字段名称后,做updata。 除非注册企业租户的admin角色,申请注销企业账号,此时做逻辑删除。【以防企业人员误操作。故在注册时控制只有admin角色下成员有此权限,且admin只有1人,以此控制风险】 (2)企业注册时,不做OCR营业执照认证,注册进入之后,根据租户的付费详情,所开通的功能模块,强制邀请企业营业执照认证,且认证时调用企信宝/天眼查做认证审核【企业认证审核的接口费用,由金柚网免费承担】 3. 验证码 有效期60s,重复获取间隔60s,输入错误验证码,在输入框提示:请输入正确验证,或请重新获取验证码。 短信下发验证码模板内容例如:金柚网欢迎你的加入,您的验证码为56554【6位】有效期为60s,请注意保密。 4. 密码 6-20位任意纯属数字/纯英文/数字英文组合【错误提示语:请输入6-20位密码】 密码确认:两次密码输入需一致。若不一致提示语【请保持2个密码一致】 5. 勾选【我同意服务条款】、未勾提示语 请勾选服务条款。点击服务条款,则进入【服务条款详情滚动页】-注册条款详情页,先由PM提供自造文件,后续由法务提供注册服务条款明细协议。 6. 点击确认注册后,前端给与loding加载界面,此阶段为向后台传数据过程 加载过程中如遇【断网、接口异常、服务器崩溃、、】不可控因素导致注册失败。给与404报错界面。–loding加载界面及404报错界面,请UI自行设计/前端自行提供。 7. 服务协议条款展示 注册企业租户账号后,进入添加团队/申请加入团队业务功能模块。 前提:视为租户申请加入其他根机构/创建根机构【出于业务角度考虑、当前租户账号加入的根机构+自主创建的根机构,不得超过6个,即检测一个账号是否属于6个根机构范围】 如图:创建或加入根机构界面 通过点击:创建团队、进入创建团队详情操作页面、如下图 其中联系电话:为注册时所 使用的手机号码,前端自行拉取,回填至输入框即可。 团队名称为注册时,所填写的企业名称即可。前端自行拉取。回填至输入框即可 四、场景考虑 若租户不想使用注册时需要使用的手机号/租户不方便使用该号码。 用户可点击【*联系电话】输入框进行输入新的手机号、用户可点击团队名称输入新的团队名称。点击创建团队时。需要校验如下内容。 1. 新输入的手机号、是否已属于6个团队? 若不属于:可被使用,并且将注册时所使用的手机号,存储在个人信息-联系方式的字段,uodata成为新的手机号码。触发节点为创建团队最后一步操作,即加载loding成功时做触发。 若属于:输入框内,给与提示语【该手机号已加入6个团队,请更换手机号】定时3s、自动隐藏,并且清空新输入的手机号,输入框内为待输入状态 且需校验输入的是否为11位手机号,如非手机号:提示语【请输入11位正确手机号码,定时1.5s、自动隐藏】 2. 输入的团队名称是否已使用? 若使用:输入框内给与提示语。【该团队名称已被使用,请换个团队名称试试、】定时3s、自动隐藏,并且清空新输入的手机号,输入框内为待输入状态 若未使用:原注册时输入的企业名称,存储在企业信息的-企业名称做updata操作,触发节点为创建团队最后一步操作,即加载loding成功时做触发。 3. 联系方式及团队名称查询触发为输入完毕,且换输入框时触发 如图:点击创建团队,loding的加载界面及过程。 点击【创建团队】后进入创建加载页面,加载过程中可能会遇到各种因素导致创建失败(例:此时服务器崩溃,等未知因素)若创建失败,则跳转至创建失败提示页面、创建失败给与404报错界面。 404界面固定报错提示语:柚子君走丢了,请重新尝试创建。此时数据中,个人信息-联系电话 及企业信息-企业名称字段做updata的操作。且记录之前注册时的电话及名称。 创建后先给与当前页面提示语[创建成功]定时1.5s,自动隐藏。隐藏后进入初始化团队账号页面,现在暂时不做浮层指引教学。前端预留,此时数据库记录该账号对应的企业ID。手机号对应的团队名称 注册企业租户账号后,申请加入团队业务功能模块。 如图:点击申请加入团队,进入该页面。 输入框内输入用户需要加入的根机构名称。 场景:输入的团队名称已加入场景下,给与错误提示语 输入的团队名称系统内无名称,给与错误提示语。且搜索无果的场景下 提示语内容为【没有与您搜索项类似的团队,您可以换个名称试试】 点击搜索,进入加载搜索loding,加载max5s,超时给与404报错界面, 所搜结果呈现界面,如图: ①结果呈现,以表单形式给与,表单最多显示5行,排序无规则,以5个结果/页进行翻页处理。 表单字段:团队名称+团队联系人【即租户个人中心-昵称字段】 根机构搜索范围:数据库全局。搜索内容组合【包含字符串】 ②点击其中的某个团队,申请加入,交互跳转页面。 备注输入框长度限制:50文字、备注输入,点击确定按钮,会向被加入的根机构admin发起一条消息:消息内容:【hr名称】您好,【雇员姓名】于【申请加入时间】申请加入团队,请处理。 五、找回密码功能需求说明 账号:11位手机号校验【提示语:请输入11位手机号,定时器3s,自动隐藏,】 若手机号未注册【该手机号未注册-定时器3s,自动隐藏】 验证码:有效期60s,重复获取间隔60s,输入错误验证码,在输入框提示:请输入正确验证,或请重新获取验证码。 短信下发验证码模板内容例如:金柚网提示您,您找回密码的验证码为565641【六位】验证码模板配置时,设置有效期为5分钟,防止用户无聊,随意申请验证码,这样会增加我们企业验证码的费用。 密码:6-20位任意纯属数字/纯英文/数字英文组合【错误提示语:请输入6-20位密码】 密码确认:两次密码输入需一致。若不一致提示语【请保持2个密码一致】 六、登录需求说明文档 账号输入:11位手机号,输入错误提示语【请输入11位已注册的手机号】 密码输入错误提示语:输入正确密码 记住密码时效为:7天,7天内登录无需再次输入密码 登录前需注意如下场景不可登录系统: 账号未经注册—提示语:您暂未注册账号,请注册后再登录。【提示语定时1.5s、自动隐藏】 账号被后台管理员拉黑–提示语:您暂时无法登录系统账户,请联系客服人员。客服电话为400-0000-000。【此号码系统正式投入租户开放时,换成真实人工客服电话/机器人电话、提示语为固定在登录页面。不做定时隐藏。】 账号已注册、但其账号不是admin账号。并且该账号未启用状态。【您的账号暂未启用,请联系企业管理员修改账号状态。–不显示企业租户管理员联系方式。出于隐私维度考虑】 租户/员工账号被禁用。【您的账号当前处于禁用状态、请联系管理员。固定在提示页面,】 租户/员工所属角色被禁用。【您当前所属的角色已被管理员禁用,请联系管理员】 租户/员工所在部门被禁用。【可登陆、进入系统后仅显示菜单tab,右侧提示语:您当前所在部门属于停用状态,请联系系统管理员】 需要跳转至选择团队页面后,才能进入系统。 第三方扫码登录,可往后合理排至3/4期。做第三方登录时、请架构师提前自行查询对应各方平台的开放API。 第一次在平台上发布文章,没写好的地方欢迎诸位客官点评,文章对您有价值的话,点个赞呗(也可以用打赏来羞辱我)。下期文章《电子签章通应性功能建设》