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方 ...
随机推荐
- 初识Qt基于http协议网页浏览
1.新建一个Qt Gui应用,项目名称为http,基类选择为QMainWindow,类名设置为MainWindow. 2.在http.pro文件中的QT += core gui后添加\ networ ...
- java读入和输出
一: 在python里直接使用input函数就可以,在java里,需要使用Scanner类,用System.in进行初始化,获取用户输入可以用nextLine获取字符串,nextInt获取整形数据. ...
- USB耳机声卡-音频输入/输出控制器:DP108替代兼容CM108
DP108是一款完全替代CM108的高度集成的单芯片USB音频解决方案芯片.方便的USB即插即用的兼容性,用户可以快速创建易用性,高质量和便携式USB音频产品基于高度集成的单芯片解决方案.所有重要的模 ...
- json2.js的作用与使用示例
工作中,如果公司要求你兼容ie6.7,那么你可以辞职了,开个玩笑: 关于json,本文不作介绍,介绍一下json字符串和对象的相互转换: 在各大主浏览器及ie8+,我们可以使用内置方法JSON.str ...
- FFMpeg笔记(三) 音频处理基本概念及音频重采样
Android放音的采样率固定为44.1KHz,录音的采样率固定为8KHz,因此底层的音频设备驱动需要设置好这两个固定的采样率.如果上层传过来的采样率不符的话,需要进行resample重采样处理. 几 ...
- 50道Java线程面试题(转载)
1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成 ...
- Angular7教程-01-Angular开发环境配置
本教程基于angular7(2018-11-04) 1. 安装node.js 下载地址: http://nodejs.cn/download/ 下载对应自己操作系统的版本安装即可. 2.安装 angu ...
- MariaDB中文乱码之解决思路
首先出现乱码的原因就是编码不一致问题引起的,那么就从以下2个方面入手: 1.应用层:前提条件数据库服务端存储的中文数据是对的,但是页面上显示乱码,这里只需要检查你的项目的编码格式,设置成一致就行. 2 ...
- webpack / vue项目 config/index.js配置(用于配置webpack服务器代理)
'use strict' // Template version: 1.1.3 // see http://vuejs-templates.github.io/webpack for document ...
- 2017-2018-1 20155330 《信息安全系统设计基础》加分项目--实现mypwd
2017-2018-1 20155330 <信息安全系统设计基础>加分项目--实现mypwd pwd命令 命令功能:查看"当前工作目录"的完整路径. 通过man命令查看 ...