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方 ...
随机推荐
- linux_bc命令
bc 命令: bc 命令是用于命令行计算器. 它类似基本的计算器. 使用这个计算器可以做基本的数学运算. 语法: 语法是 bc [命令开关]命令开关: -c 仅通过编译. ...
- 1060. [ZJOI2007]时态同步【树形DP】
Description 小Q在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数 字1,2,3….进行标号.电路板的各个节点由若干不相交的导线相连接,且对于电路 ...
- Python学习之路 (三)爬虫(二)
通用爬虫和聚焦爬虫 根据使用场景,网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种. 通用爬虫 通用网络爬虫 是 捜索引擎抓取系统(Baidu.Google.Yahoo等)的重要组成部分.主要目的是将互联 ...
- PAT乙级1012
1012 数字分类 (20 分) 给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字: A1 = 能被 5 整除的数字中所有偶数的和: A2 = 将被 5 除后余 1 的 ...
- 1548: Design road (思维题 做法:三分找极值)
1548: Design road Submit Page Summary Time Limit: 2 Sec Memory Limit: 256 Mb Submitted ...
- centos安装telnet
安装环境:CentOS 6.4 上篇已经讲述了memcached的安装,现在要测试Memcached功能的时候,需要使用到telnet服务.于是就有了本篇. 一.安装telnet 1.检测t ...
- pipeline 发布war包
pipline 写法分为 脚本式和声明式,下面采用脚本式编程: node { stage('checkout') { echo '开始检出代码' checkout([$class: 'GitSCM', ...
- BAT面试总结——iOS开发高级工程师
序言 之前也面试别人,现在轮到自己找工作,怎么说呢,现在轮到自己出去面试,怎么说呢,其实还是挺紧张的,原以为自己不会因此紧张或者焦虑,实际上,还是有的,在没找到合适的工作的时候,甚至晚上有点睡不着觉, ...
- C4C有关Browse and Collect的简单用法
Browse and Collect 最近在研究C4C中的Browse and Collect控件,有点类似于Siebel中的MVG.实现的效果就是在弹窗中简单的从一个BO对象往目标对象中添加数据. ...
- git merge的使用
在实际开发中经常会用到git merge操作.但很多情况下我们并不想合并后直接提交,这里介绍git merge的两个常用参数: --no-commit --no-commit 参数使得合并后,为了防止 ...