ABP Feature使用

本文介绍如何在SAAS系统中利用ABP框架实现基于版本的功能控制。通过定义特性(功能)并将其与不同版本关联,系统能根据不同租户的订阅版本显示相应的功能导航,并阻止未订阅功能的访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在大多数SAAS系统中。都提供【版本】这个概念。不同的版本提供不同的功能特性。通过这种方式,一个SAAS系统可以提供不同的价格与功能组合给不同的租户。

例如【标准版】含有A/B/C三个功能,售价1000元;【旗舰版】包含A/B/C/D四个功能,售价2000元。

ABP内置了特性(功能)模块以简化此类功能开发。您可以定义各种特性(功能),检测某个指定特性(功能)是否对某个指定租户开放,或者根据后台设置的特性(功能)开放对应的页面或是生成对应的导航。

在一个SAAS系统中,使用不同功能版本的租户应该看到不同的导航菜单。例如在一个OA系统中,旗舰版的用户有人事管理、财务管理、行政管理、知识管理四个导航菜单。但标准版则没有知识管理这个导航菜单。即使用户通过在地址栏直接输入知识管理对应的url地址,系统也应该给与明确的错误提示:您的版本为开通此功能,如有需要,请联系...,而不应该不做任何验证直接使用该功能。在ABP的架构设计中,特性和版本是直接关联的,您可以通过检测当前用户所属的租户对应的版本是否开通了当前操作对应的功能以确定是否对用户开放当前操作。

话不多说直接上代码:

第一步AppFeatureProvider建立Feature

//控制Feature  defaultValue 菜单默认值
            chatFeature.CreateChildFeature(
              AppFeatures.EnterpriseFeature,
              defaultValue: "false",
              displayName: L("EnterpriseFeature"),
              inputType: new CheckboxInputType()
              );
            chatFeature.CreateChildFeature(
             AppFeatures.EnterpriseBFeature,
             defaultValue: "false",
             displayName: L("EnterpriseBFeature"),
             inputType: new CheckboxInputType()
             );  

第二步权限导航:

AppAuthorizationProvider


            //第一个Feature
            var Enterprise = pages.CreateChildPermission(AppPermissions.Pages_Enterprise, L("Enterprise"),
               multiTenancySides: MultiTenancySides.Tenant,
                featureDependency: new SimpleFeatureDependency(true, AppFeatures.EnterpriseFeature));
            Enterprise.CreateChildPermission(AppPermissions.Pages_EnterpriseA, L("EnterpriseA"),
                 multiTenancySides: MultiTenancySides.Tenant,
                featureDependency: new SimpleFeatureDependency(true, AppFeatures.EnterpriseFeature));
            //第二个Feature
            var EnterpriseB = pages.CreateChildPermission(AppPermissions.Pages_EnterpriseB, L("EnterpriseB"), multiTenancySides: MultiTenancySides.Tenant,
                featureDependency: new SimpleFeatureDependency(true, AppFeatures.EnterpriseBFeature));
            EnterpriseB.CreateChildPermission(AppPermissions.Pages_EnterpriseC, L("EnterpriseC"), multiTenancySides: MultiTenancySides.Tenant,
                featureDependency: new SimpleFeatureDependency(true, AppFeatures.EnterpriseBFeature));

第三步:导航 (注意 这里分为MAP和SPA 在这里被坑过)

MpaNavigationProvider 多页、AppNavigationProvider单页

   //第一个Feature
                .AddItem(new MenuItemDefinition(
                    PageNames.App.Host.Enterprise,
                    L("EnterpriseModel"),
                    icon: "icon-grid",
                    requiredPermissionName: AppPermissions.Pages_Enterprise,
                    requiresAuthentication: true,
                    featureDependency: new SimpleFeatureDependency(true, AppFeatures.EnterpriseFeature)
                    ).AddItem(new MenuItemDefinition(
                    PageNames.App.Host.EnterpriseA,
                    L("EnterpriseA"),
                    icon: "icon-grid",
                    url: "",
                    requiresAuthentication: true,
                    requiredPermissionName: AppPermissions.Pages_EnterpriseA,
                    featureDependency: new SimpleFeatureDependency(true, AppFeatures.EnterpriseFeature)
                    ))
                )
                //第二个Feature
                .AddItem(new MenuItemDefinition(
                    PageNames.App.Host.EnterpriseB,
                    L("EnterpriseAModel"),
                    icon: "icon-grid",
                    requiresAuthentication: true,
                    requiredPermissionName: AppPermissions.Pages_EnterpriseB,
                    featureDependency: new SimpleFeatureDependency(true, AppFeatures.EnterpriseBFeature)
                    ).AddItem(new MenuItemDefinition(
                    PageNames.App.Host.EnterpriseC,
                    L("EnterpriseC"),
                    icon: "icon-grid",
                    url: "",
                    requiresAuthentication: true,
                    requiredPermissionName: AppPermissions.Pages_EnterpriseC,
                    featureDependency: new SimpleFeatureDependency(true, AppFeatures.EnterpriseBFeature)
                    ))
                )

到这里后台代码已经完成、 在页面上的操作就不写下来了,相信大家都会。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值