ABP.ModuleZero.Feature——特性管理
原文地址:http://aspnetboilerplate.com/Pages/Documents/Feature-Management (在翻译原文的基础上增补更多细节说明)
简介
在大多数SAAS系统中。都提供【版本】这个概念。不同的版本提供不同的功能特性。通过这种方式,一个SAAS系统可以提供不同的价格与功能组合给不同的租户。
例如【标准版】含有A/B/C三个功能,售价1000元;【旗舰版】包含A/B/C/D四个功能,售价2000元。
ABP内置了特性(功能)模块以简化此类功能开发。您可以定义各种特性(功能),检测某个指定特性(功能)是否对某个指定租户开放,或者根据后台设置的特性(功能)开放对应的页面或是生成对应的导航。
在一个SAAS系统中,使用不同功能版本的租户应该看到不同的导航菜单。例如在一个OA系统中,旗舰版的用户有人事管理、财务管理、行政管理、知识管理四个导航菜单。但标准版则没有知识管理这个导航菜单。即使用户通过在地址栏直接输入知识管理对应的url地址,系统也应该给与明确的错误提示:您的版本为开通此功能,如有需要,请联系...,而不应该不做任何验证直接使用该功能。在ABP的架构设计中,特性和版本是直接关联的,您可以通过检测当前用户所属的租户对应的版本是否开通了当前操作对应的功能以确定是否对用户开放当前操作。
补充:在ABP中,特性可以直接关联到具体的租户,也可以关联到具体的版本。举例:系统中一共有5个功能,标准版有1,2,3功能,旗舰版有1,2,3,4,5功能。现实情况中,有可能会出现客户因为价格原因,购买标准版,但是又对旗舰版的第五项功能迫切需要。此时可单独针对此租户开放1,2,3,5四个功能(具体实现代码后续在我们的OA中做详细演示)。
特性值仓库接口
特性功能通过使用IFeatureValueStore 接口来实现获取特性的值。您可以自己实现该接口,该接口的完整实现在Module Zero项目中。如果您没有在系统中手动实现该接口,系统默认会使用NullFeatureValueStore这个实现,在该实现中,所有获取特性的方法都返回Null值。
此处翻译起来很别扭,可能是我理解有误,没想明白作者为何要如此操作。
特性类型
系统中存在两种基本特性类型。
布尔特性类型
值为“true”或者“false”,此类型克用于设置针对某个版本或是某个租户开放或者关闭某个特性(功能)。
值特性类型
该类型可以存储任意类型的值。在系统中,存储或获取该值时,得到的是该值的文本形式。故,在实际使用中,需要进行类型转化。
举个例子:假如系统是一个任务管理系统,并且限制每个月可创建的任务数。想象一下,假如系统包含两个版本,标准版限制每月最多允许创建1000个任务,旗舰版限制每月最多允许创建5000个任务。此时,我们应该使用特性去存储1000与5000这两个值,而不应该简单存储true/false。
在实际使用中,如果一定只有两个版本且日后不会更改,用布尔值区分特性也是可以的,但是,假如系统有三个、四个、甚至五个版本时,布尔值就不够用了(布尔值最多允许两个值)。
注意:系统中存储的1000与5000是字符串格式的“1000“与“5000“,而不是具体的数字。
ABP.ModuleZero.Feature——特性管理的更多相关文章
- ABP module-zero +AdminLTE+Bootstrap Table+jQuery权限管理系统第十三节--RBAC模式及ABP权限管理(附送福利)
ABP+AdminLTE+Bootstrap Table权限管理系统一期 Github:https://github.com/Jimmey-Jiang/ABP-ASP.NET-Boilerplate- ...
- ABP module-zero +AdminLTE+Bootstrap Table+jQuery权限管理系统第十二节--小结,Bootstrap Table之角色管理
返回总目录:ABP+AdminLTE+Bootstrap Table权限管理系统一期 很多人说ABP不适合高并发大型,有一定的道理,但是我觉得还是可以的,就看架构师的能力了,哈哈,我之前公司就是ABP ...
- ABP ModuleZero后台框架materialize禁止模拟select和checkbox
使用abp modulezero自带那个后台框架发现一个操蛋的问题,所有的select和checkbox都被改成div模拟的,虽然比原生美观,但有时候真的很难用. 比如说要用select做一个联动菜单 ...
- AspnetBoilerplate (ABP) Organization Units 组织结构管理
ABP是一个成熟的.NET框架,功能完善.目前由于项目需要正在自学中. ABP对于组织节点管理这一基本上每个项目都要反复重复开发的内容,进行了自己的实现. 主要包括这些常用功能: 多租户 树结构管理的 ...
- X-Admin&ABP框架开发-设置管理
在网站开发中,设置是不可缺少的一环,如用户设置.系统设置.甚至是租户设置等.ABP对于设置的管理已经做了很好的处理,我们可以借助巨人的力量来完成我们的冒险. ABP官网地址:https://aspne ...
- ABP理论学习之设置管理
返回总目录 本篇目录 介绍 定义设置 获取设置值 更改设置 关于缓存 介绍 每个应用程序都需要存储一些设置信息,然后在应用程序中的某个地方使用这些设置.ABP提供了健壮的基础设施来存储或检索服务端和客 ...
- ABP理论学习之功能管理
返回总目录 本篇目录 介绍 功能类型 定义功能 检查功能 功能管理者 版本说明 介绍 大多数的Saas(多租户)应用都有不同 功能的 版本(包).因此,他们可以给租户(客户)提供不同的 价格和功能选项 ...
- Module-Zero之租户管理
返回<Module Zero学习目录> 开启多租户 租户实体 租户管理者 默认租户 开启多租户 ABP和Module-Zero可以运行多租户或单租户模式.多租户默认是禁用的.我们可以在mo ...
- ABP Zero 多租户管理
ABPZero - 多租户管理 启用多租户 ASP.NET Boilerplate和module-zero可以运行多租户或单租户模式.多租户默认为禁用.我们可以在我们的模块PreInitialize方 ...
随机推荐
- 【[NOI2015]品酒大会】
可能是最傻的做法了 暴力单调栈+\(st\)表 首先看到这道题就基本知道这是个\(SA\)了,先无脑敲上\(SA\)和求\(height\)的板子 之后尝试搞一下第一问 发现第一问就是求出满足\(lc ...
- AE-----合成
AE-----合成 大纲:
- Electron简介和安装使用
一.Electron简介Electron的应用,使得了JS不仅仅可以BS端项目,还可以做CS端项目. 另外今天之所以研究下Electron,还是因为公司的需要,业务场景是,通过Electron.js开 ...
- pandas数据结构:Series/DataFrame;python函数:range/arange
1. Series Series 是一个类数组的数据结构,同时带有标签(lable)或者说索引(index). 1.1 下边生成一个最简单的Series对象,因为没有给Series指定索引,所以此时会 ...
- R函数-时间序列ETS参数说明
alpha\beta\gamma分别代表水平.趋势.季节分量的平滑参数α.β.γ.这三个参数我们希望接近于0,以便于更平滑,即越小越平滑.在乘法模型的情况下,参数需要非常低,否则模型会对噪声太敏感. ...
- [LuoguP1462]通往奥格瑞玛的道路($SPFA+$二分)
#\(\mathcal{\color{red}{Description}}\) \(Link\) 有一个图,求其在\(1-N\)的最短路小于一个给定值下,点权最大值的最小值. #\(\mathcal{ ...
- 小H和密码
链接:https://www.nowcoder.com/acm/contest/72/B来源:牛客网 题目描述 小H在击败怪兽后,被一个密码锁挡住了去路 密码锁由N个转盘组成,编号为1 ...
- 基于vue-cli的快速开发框架
基于vue-cli的快速规范开发框架,已封装常用组件,可直接进行基本项目开发 1,遵循eslint规则,提升代码质量 2,集成mock模拟服务端数据,提升开发效率 3,集成vuex,可直接使用开发 4 ...
- Mac配置虚拟主机
一.启动Apache 终端输入:sudo apachectl start Apache的安装目录在:/etc/apache2/,etc默认是隐藏的.有三种方式查看: 1.桌面位于Finder时:shi ...
- 【转】Autofac高级用法之动态代理
原文:http://www.cnblogs.com/stulzq/p/8547839.html 前言 Autofac的DynamicProxy来自老牌的Castle项目.DynamicProxy(以下 ...