多租户系统中,针对于不同租户开放不同功能,或是按照不同功能进行收费管理,需要从宿主本身去管理租户的版本信息,如同酒店人员对不同房间收取不同费用,依据房间内部设施,房间大小等设置不同收费标准。Abp系统中默认是多租户的,并且在Zero模块中实现了版本管理功能。
演示地址:,更改Account/HostLogin进入宿主管理
一、设计前提
基于Abp进行了相关限制,我将多租户变成了单租户,不允许添加新的租户,由于日常接触中,发现除了云平台这种SaaS需要多租户,对于企业客户来讲,自备物理服务器或自购云服务器是常有的事情,因此对于该部分客户而言,多租户也就没有太多意义,但是从软件公司本身考虑,一套软件能够销售多家客户,能够通过简单配置,开放关闭某些功能,以此来适应客户功能需求,是最佳选项了。因此对于这两种情况考虑后,对于本系统而言,采用的是单租户+宿主形式的,企业客户使用单租户,宿主形式留给软件公司方便配置单租户实际需要的功能。
在Zero中,已经默认实现了版本管理,但是对于非收费版本的页面管理,应用服务等没有具体代码实现。
二、版本管理
1、应用层增加版本应用服务,对于版本需要进行的用户操作归纳为三个。
可查看现有版本列表;
可对现有版本信息及版本拥有的功能项进行编辑更改;
可增加或是删除版本;
/// <summary> /// 版本管理应用服务接口 /// </summary> public interface IEditionAppService : IApplicationService { /// <summary> /// 获取全部版本列表 /// </summary> /// <returns></returns> Task<ListResultDto<EditionListDto>> GetEditionsList(); /// <summary> /// 获取版本用于编辑 /// </summary> /// <param></param> /// <returns></returns> Task<GetEditionForEditOutput> GetEditionForEdit(NullableIdDto input); /// <summary> /// 创建或更新版本 /// </summary> /// <param></param> /// <returns></returns> Task CreateOrUpdateEdition(CreateOrUpdateEditionInput input); /// <summary> /// 删除版本 /// </summary> /// <param></param> /// <returns></returns> Task DeleteEdition(EntityDto input); /// <summary> /// 租户更换版本 /// </summary> /// <param></param> /// <returns></returns> Task MoveTenantsToAnotherEdition(MoveTenantsToAnotherEditionDto input); }