ShenNiusModularity项目源码学习(20:ShenNius.Admin.Mvc项目分析-5)
ShenNiusModularity项目的系统管理模块主要用于配置系统的用户、角色、权限、基础数据等信息,上篇文章中学习的日志列表页面相对独立,而后面几个页面之间存在依赖关系,如角色页面依赖菜单页面定义菜单列表以便配置角色的权限,用户页面依赖角色页面定义角色以便配置用户角色,而用户页面则依赖租户页面定义租户以便配置用户所属租户,因此近几篇文章的大致学习顺序为租户管理页面、菜单列表页面、角色列表页面、用户列表页面,本文学习并记录租户管理页面的实现方式。
之前没有接触过多租户模式,学习本项目过程中查了一下多租户的概念,一般是指允许多个用户(租户)共享同一系统实例,同时保持数据与配置的隔离性,主要实现方式包括:独立数据库模式、共享数据库-独立Schema模式、共享数据库-共享Schema模式,ShenNiusModularity项目应该属于最后一种方式,其数据库中几乎每张表中都要记录所属TenantId,通过程序确保不同租户之间的数据隔离,而租户管理页面专门用于定义及维护系统中可用的租户信息。
租户管理页面的布局比较简单,上方为工具栏,支持新增和删除操作,下方为分页显示数据表格区域,支持单行编辑和删除操作。
租户管理页面的文件为Index.cshtml,位于ShenNius.Mvc.Admin项目的Areas\Sys\Views\Tenant文件夹内,同文件夹内还有Modify.cshtml文件,用于新建或编辑单条租户数据。租户管理的后台控制器类为同项目内的TenantController,使用的WebApi位于ShenNius.Admin.API的Controllers\Sys\TenantController类内,提供添加/编辑租户、删除/软删除租户、获取/分页获取所有租户、切换租户等接口服务。
页面加载后,先是调用layui的table.render函数分页加载数据(项目中common.js文件封装了项目常用的js操作函数),同时以开关样式显示“是否当前租户”列。
分别定义时间处理函数处理工具栏按钮点击事件及数据行中的按钮点击事件,新建和编辑按钮调用的都是Modify.cshtml页面,而删除按钮的话,点击工具栏中的删除按钮,处理逻辑是将选中的记录软删除,后续还能在回收站中恢复,而点击数据行中的删除按钮,则是直接删除数据库中的数据,无法恢复。
Modify.cshtml页面如下图所示,按页面支持点击下一步和上一步按钮切换页面内容,但从页面代码来看,其实就是将上一步、下一步的内容分为两个div,点击上一步或者下一步按钮时隐藏或显示某一div,同时隐藏或显示“上一步“或者“下一步”按钮。
页面布局及切换代码如下所示,
Modify.cshtml页面支持上传图片,主要调用ShenNius.Admin.API项目下的UploadController控制器类上传文件并返回文件路径。
租户信息新建或者维护完成后,点击“确认保存”按钮保存信息,根据当前页面中是否与租户id判断到底是新建还是编辑,然后调用相应的WebApi保存数据,并返回租户管理主页面,同时刷新主页面中表格区域的数据。
参考文献:
[1]https://gitee.com/shenniu_code_group/shen-nius.-modularity
[2]https://baike.baidu.com/item/%E5%A4%9A%E7%A7%9F%E6%88%B7%E6%8A%80%E6%9C%AF/10061761