初识ABP vNext(8):ABP特征管理
Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章。
前言
上一篇提到了ABP功能管理(特征管理),它来自ABP的FeatureManagement模块,ABP官方文档貌似还没有这个模块的相关说明,但是个人感觉这个模块非常实用,下面就简单介绍一个特征管理的基本应用。
开始
在租户管理中,有一个“管理功能”按钮,默认是没有数据的,界面上也没有地方维护。

特征管理简单来说就是在同一套系统中为不同的租户提供一些差异化的功能。比如免费用户,提供的是基础功能,VIP用户则会多一些高级功能。
定义特征
在Application.Contracts项目中添加Features文件夹。
src\Xhznl.HelloAbp.Application.Contracts\Features\HelloAbpFeatures.cs:
public class HelloAbpFeatures
{
public const string GroupName = "HelloAbp";
public const string SocialLogins = GroupName + ".SocialLogins";
public const string UserCount = GroupName + ".UserCount";
}
src\Xhznl.HelloAbp.Application.Contracts\Features\HelloAbpFeatureDefinitionProvider.cs:
public class HelloAbpFeatureDefinitionProvider : FeatureDefinitionProvider
{
public override void Define(IFeatureDefinitionContext context)
{
var group = context.AddGroup(HelloAbpFeatures.GroupName);
group.AddFeature(HelloAbpFeatures.SocialLogins, "true", L("Feature:SocialLogins")
, valueType: new ToggleStringValueType());
group.AddFeature(HelloAbpFeatures.UserCount, "10", L("Feature:UserCount")
, valueType: new FreeTextStringValueType(new NumericValueValidator(1, 1000)));
}
private static LocalizableString L(string name)
{
return LocalizableString.Create<HelloAbpResource>(name);
}
}
以上代码添加了2个特征:SocialLogins,UserCount。
SocialLogins(社交登录),valueType为ToggleStringValueType,意味着它是个勾选框,默认值为"true"。
UserCount(用户数量),valueType为FreeTextStringValueType,意味着它是个输入框,默认值为"10"。

现在可以为不同租户设置不同的特征值。
应用特征
特征值定义好了,接下来就是如何应用了,首先看一下用户数量如何控制。
用户数量
目前用户是通过/identity/users接口来添加的,那么我们重写这个接口对应的服务方法就好了。关于重写服务可以参考:重写服务

对应的ABP源码在:abp\modules\identity\src\Volo.Abp.Identity.Application\Volo\Abp\Identity\IdentityUserAppService.cs中。
在我们的Application项目中添加一个服务类继承IdentityUserAppService,重写CreateAsync方法,使用FeatureChecker获取到特征值,然后做个用户数量校验即可。
src\Xhznl.HelloAbp.Application\Identity\HelloIdentityUserAppService.cs:
[RemoteService(IsEnabled = false)]
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(IIdentityUserAppService), typeof(IdentityUserAppService))]
public class HelloIdentityUserAppService : IdentityUserAppService, IHelloIdentityUserAppService
{
private readonly IStringLocalizer<HelloAbpResource> _localizer;
public HelloIdentityUserAppService(IdentityUserManager userManager,
IIdentityUserRepository userRepository,
IIdentityRoleRepository roleRepository,
IStringLocalizer<HelloAbpResource> localizer) : base(userManager, userRepository, roleRepository)
{
_localizer = localizer;
}
public override async Task<IdentityUserDto> CreateAsync(IdentityUserCreateDto input)
{
var userCount = (await FeatureChecker.GetOrNullAsync(HelloAbpFeatures.UserCount)).To<int>();
var currentUserCount = await UserRepository.GetCountAsync();
if (currentUserCount >= userCount)
{
throw new UserFriendlyException(_localizer["Feature:UserCount.Maximum", userCount]);
}
return await base.CreateAsync(input);
}
}
下面可以将某租户的用户数量设置一下,测试是否有效果:


这样,就实现了对不同租户用户数量的限制。
社交登录
特征值也可以在前端使用,在/abp/application-configuration中就可以获取到。

拿到特征值,前端也可以做一些差异化功能,比如这里的是否支持社交登录。


关于Feature就简单介绍到这里,本项目源码放在:https://github.com/xiajingren/HelloAbp
另外非常感谢热心小伙@jonny-xhl给添加的设置模块(来自EasyAbp的Abp.SettingUi)。


最后
本文只是对Feature的最基本介绍,关于Feature,还有很多实用的API方法,基于Feature可以满足很多定制化需求,想深入了解的话可以看下Abp.FeatureManagement源码。
感谢@jonny-xhl的pr。
初识ABP vNext(8):ABP特征管理的更多相关文章
- ABP官方文档翻译 4.5 特征管理
特征管理 介绍 关于IFeatureValueStore 特征类型 Boolean特征 Value特征 定义特征 基本特征属性 其他特征属性 特征层级 检查特征 使用RequiresFeature特性 ...
- [Abp vNext 源码分析] - 11. 用户的自定义参数与配置
一.简要说明 文章信息: 基于的 ABP vNext 版本:1.0.0 创作日期:2019 年 10 月 23 日晚 更新日期:暂无 ABP vNext 针对用户可编辑的配置,提供了单独的 Volo. ...
- [Abp vNext微服务实践] - vue-element-admin登录二
简介: Vue Element Admin是基于vue.element ui开发的后台管理ui,abp vNext是abp新一代微服务框架.本篇将会介绍如何改造Vue Element Admin权限验 ...
- [Abp vNext微服务实践] - 前后端分类
一.前景 abp vNext是ABP 开源 Web应用程序框架,是abp的新一代开源web框架.框架完美的集成.net core.identity server4等开源框架,适用于构建web应用程序和 ...
- ABP VNext框架基础知识介绍(1)--框架基础类继承关系
在我较早的时候,就开始研究和介绍ABP框架,ABP框架相对一些其他的框架,它整合了很多.net core的新技术和相关应用场景,虽然最早开始ABP框架是基于.net framework,后来也全部转向 ...
- ABP VNext框架基础知识介绍(2)--微服务的网关
ABP VNext框架如果不考虑在微服务上的应用,也就是开发单体应用解决方案,虽然也是模块化开发,但其集成使用的难度会降低一个层级,不过ABP VNext和ABP框架一样,基础内容都会设计很多内容,如 ...
- [Abp vNext 源码分析] - 文章目录
一.简要介绍 ABP vNext 是 ABP 框架作者所发起的新项目,截止目前 (2019 年 2 月 18 日) 已经拥有 1400 多个 Star,最新版本号为 v 0.16.0 ,但还属于预览版 ...
- [Abp vNext 源码分析] - 1. 框架启动流程分析
一.简要说明 本篇文章主要剖析与讲解 Abp vNext 在 Web API 项目下的启动流程,让大家了解整个 Abp vNext 框架是如何运作的.总的来说 ,Abp vNext 比起 ABP 框架 ...
- Abp vNext 切换MySql数据库
Abp vNext是Abp的下一代版本,目前还在经一步完善,代码已经全部重写了,好的东西保留了下来,去除了很多笨重的东西,从官宣来看,Abp vNext主要是为了以后微服务架构而诞生的. 从源码来看, ...
- ABP vNext
一.简要介绍# ABP vNext 是 ABP 框架作者所发起的新项目,截止目前 (2019 年 8 月 20 日) 已经拥有 1400 多个 Star,最新版本号为 v 0.19.0,可以尝试用于生 ...
随机推荐
- 记一次TOMCAT一段时间自动关闭
最近同事开发的一个项目部署上线后用过几天就TOMCAT自动关闭,并且该项目没有开通对外访问.通过阿里云监控台查看,从升级后系统内存占用上升趋势,CPU等信息没有太大变化. 打印服务器日志后发现全是线程 ...
- 文字识别还能这样用?通过Python做文字识别到破解图片验证码
前期准备 1. 安装包,直接在终端上输入pip指令即可: # 发送浏览器请求 pip3 install requests # 文字识别 pip3 install pytesseract # 图片处理 ...
- Kaggle-pandas(2)
Intndexing-selecting-assigning 教程 介绍选择要处理的pandas DataFrame或Series的特定值是几乎将要运行的任何数据操作中的一个隐含步骤,因此在Pytho ...
- 在Swoole上加速Laravel应用
Swoole是用于PHP的生产级异步编程框架.它是用纯C语言编写的PHP扩展,它使PHP开发人员可以在PHP中编写高性能,可伸缩的并发TCP,UDP,Unix套接字,HTTP,WebSocket服务, ...
- “随手记”开发记录day12
就我们团队昨天的讨论,今天进行更改. 今天我们先简单的更改了之前的粉色背景图,因为用户反应总览界面的“总览”二字,是深粉色背景不太美观.进过多次更改之后使颜色变得更舒适.
- MySQL--->高级对象
本章目标: 掌握MySQL视图 掌握MySQL存储过程 掌握MySQL触发器 1.视图: 视图就是一条select语句执行后返回的结果集. 使用场景:权限控制的时候不希望用户访问表中某些敏感信息的列 ...
- C语言学习笔记之一个程序弄清&&、||、i++、++i
由此程序可以看出, ++a是先执行自加,再把值赋值给c,所以c就是a+1=10+1=11 b++是先做赋值运算,也就是先d=b,再b自加,所以d=b(原先)=5 a和b都执行自加,所以a=11,b= ...
- Hibernate配置文件和映射文件详解
Hibernate是一个彻底的ORM(Object Relational Mapping,对象关系映射)开源框架. 我们先看一下官方文档所给出的,Hibernate 体系结构的高层视图: 其中PO=P ...
- 2020-07-10:sql如何调优?
福哥答案2020-07-10:此答案来自群成员: SQL提高查询效率的几点建议 1.如果要用子查询,那就用EXISTS替代IN.用NOT EXISTS替代NOT IN.因为EXISTS引入的子查询只是 ...
- 针对VM从挂机-启动后,docker相关服务的无法使用问题!
使用软件 :VMware WorkStation 使用系统:linux centOS 7 windows远程调用软件:xshell 挂机-启动状态后 先使用 service network re ...