加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 运营中心 > 网站设计 > 教程 > 正文

ABP框架 功能管理

发布时间:2016-10-29 06:48:34 所属栏目:教程 来源:站长网
导读:副标题#e# 文档目录 本节内容: 简介 关于 IFeatureValueStore 功能类型 Boolean 功能 Value 功能 定义功能 基本功能属性 其它功能属性 功能层次 检查功能 使用RequiresFeature特性 RequiresFeature特性注意事项 使用 IFeatureChecker IsEnabled GetValue
副标题[/!--empirenews.page--]

文档目录

 

本节内容:

  • 简介
    • 关于 IFeatureValueStore
  • 功能类型
    • Boolean 功能
    • Value 功能
  • 定义功能
    • 基本功能属性
    • 其它功能属性
    • 功能层次
  • 检查功能
    • 使用RequiresFeature特性
      • RequiresFeature特性注意事项
    • 使用 IFeatureChecker
      • IsEnabled
      • GetValue
    • 客户端
      • isEnabled
      • getValue
  • 功能管理器
  • 对版本的一个提示

 

简介

大部分SaaS(多租户)应用有不同功能的版本(包),因此你可以提供不同价格和功能选项给租户(客户)。

ABP提供了一个功能系统,使它易于使用,我们可以定义功能,检查一个功能对于一个租户是否可用,并把功能系统整合到其它ABP概念里(如授权和导航)。

关于 IFeatureValueStore

功能系统使用IFeatureValueStore来获取功能的值。尽管你可以用自己的方式实现它,但在module-zero项目里已经完全实现。如果它没有被实现,NullFeatureValueStore用来为所有功能返回null(这种情况下使用默认功能值)。

 

功能类型

有两个基本的功能类型。

 

Boolean 功能

可以是“true”或“false”,一个这种类型的功能可以是启用或禁用(为一个版本或一个租户)。

 

Value 功能

可以是任意值,它保存和获取一个字符串,数字也保存成字符串。

例如,我们的应用可能是一个任务管理应用,一个月只创建有限的几个任务,假设我们有两个不同的版本/包,有一个允许创建1000个任务每个月,但另一个允许我们创建5000个任务每个月,所以这个功能应当存成值类型,不是简单的true/false。

 

定义功能

在检查功能前,先要定义它,一个模块可通过继承FeatureProvider类来定义自己的功能,此处,有一个非常简单的功能供应器定义了3个功能:

public class AppFeatureProvider : FeatureProvider
{
    public override void SetFeatures(IFeatureDefinitionContext context)
    {
        var sampleBooleanFeature = context.Create("SampleBooleanFeature", defaultValue: "false");
        sampleBooleanFeature.CreateChildFeature("SampleNumericFeature", defaultValue: "10");
        context.Create("SampleSelectionFeature", defaultValue: "B");
    }
}

在创建一个功能供应器之后,我们应当在我们模块的PreInitialize方法里注册它,如下所示:

Configuration.Features.Providers.Add<AppFeatureProvider>();

 

基本功能属性

一个功能定义要求至少两个属性:

Name:一个唯一名称(字符串),这个功能的标志。

DefaultValue:一个默认值,当我们需要这个功能的值而又不能从当前租户取得时,我们需要一个默认值。

此处,我们定义了一个Boolean功能,名为“SampleBooleanFeature”,默认值为“false”(不可用),同时我们定义了两个值功能(SampleNumericFeature被定义成SampleBooleanFeature的子功能)。

小建议:创建一个字符串常量作为一个功能名,不管在哪里使用都可避免输入错误。

 

其它功能属性

虽然唯一名称和默认值属性是必须的,但也有一可选的属性,提供细节控制。

  • Scope:一个FeatureScopes枚举值,它可以是Edition(如果这个功能只能设置版本级别),Tenant(如果这个功能只能设置租户级别)或All(如果这个功能可设置版本和租户,租户设置会覆盖版本设置)。默认值是All。
  • DisplayName:一个本地化的字符串,为用户显示这个功能的名称。
  • Description:一个本地化的字符串,为客户显示这个功能的细节描述。
  • InputType:这个功能的一个UI输入类型,这个可被定义,当创建一个自动功能屏幕时可以使用它。
  • Attribute:一个键值对的用户字典,关联这个功能。

让我们看一下上面那个功能更多的细节定义:

public class AppFeatureProvider : FeatureProvider
{
    public override void SetFeatures(IFeatureDefinitionContext context)
    {
        var sampleBooleanFeature = context.Create(
            AppFeatures.SampleBooleanFeature,
            defaultValue: "false",
            displayName: L("Sample boolean feature"),
            inputType: new CheckboxInputType()
            );

        sampleBooleanFeature.CreateChildFeature(
            AppFeatures.SampleNumericFeature,
            defaultValue: "10",
            displayName: L("Sample numeric feature"),
            inputType: new SingleLineStringInputType(new NumericValueValidator(1, 1000000))
            );

        context.Create(
            AppFeatures.SampleSelectionFeature,
            defaultValue: "B",
            displayName: L("Sample selection feature"),
            inputType: new ComboboxInputType(
                new StaticLocalizableComboboxItemSource(
                    new LocalizableComboboxItem("A", L("Selection A")),
                    new LocalizableComboboxItem("B", L("Selection B")),
                    new LocalizableComboboxItem("C", L("Selection C"))
                    )
                )
            );
    }

    private static ILocalizableString L(string name)
    {
        return new LocalizableString(name, AbpZeroTemplateConsts.LocalizationSourceName);
    }
}

 

 注意:输入类型定义不被ABP所用,当创建功能的输入时,它可被应用使用,ABP只是提供基础框架,使它更易于使用。

 

功能层次

如上面所示的示例功能供应器,一个功能可以有子功能。一个父功能通常定义为Boolean功能,只有在父功能可用时,才能获取子功能。ABP不强制但建议这么做,应用应当小心处理它。

 

检查功能

我们定义一个功能来检查它的在应用里的值,从而为每个租户允许或阻止一些应用功能。有几种不同的检查方式。

 

使用RequiresFeature特性

我们可以为一个方法或类使用RequiredFeature,如下所示:

[RequiresFeature("ExportToExcel")]
public async Task<FileDto> GetReportToExcel(...)
{
    ...
}

 

只有当前租户(从IAbpSession里获取)的“ExportToExcel”功能可用时,才能执行这个方法,如果不可用,就自动抛出一个AbpAuthorizationException。

当然,RequiresFeature特性应该用在Boolean类型的功能上,否则,你会收到异常。

 

RequiresFeature特性注意事项

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读