初识ABP vNext(8):ABP特征管理
點擊上方藍字"小黑在哪里"關注我吧
定義特征
應用特征
用戶數量
社交登錄
前言
上一篇提到了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接口來添加的,那么我們重寫這個接口對應的服務方法就好了。關于重寫服務可以參考:重寫服務[1]
對應的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[2]給添加的設置模塊(來自EasyAbp的Abp.SettingUi[3])。
最后
本文只是對Feature的最基本介紹,關于Feature,還有很多實用的API方法,基于Feature可以滿足很多定制化需求,想深入了解的話可以看下Abp.FeatureManagement源碼。
感謝@jonny-xhl的pr。
參考資料
[1]
重寫服務: https://docs.abp.io/zh-Hans/abp/latest/Customizing-Application-Modules-Overriding-Services
[2]jonny-xhl: https://github.com/jonny-xhl
[3]Abp.SettingUi: https://github.com/EasyAbp/Abp.SettingUi
如果本文對您有用,
不妨點個“在看”或者轉發朋友圈支持一下
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的初识ABP vNext(8):ABP特征管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【BCVP】实现基于 Redis 的消息
- 下一篇: .NET Core 中导入导出Excel