1.AbpApiControllerActivator
解析:实现了IHttpControllerActivator接口,根据controller的类型生成指定的controller。

2.AbpDynamicApiControllerInterceptor<T>
解析:方法拦截器,拦截Action请求,调用服务层中的方法。

3.mqsvc.exe
解析:mqsvc.exe是微软Windows操作系统自带的程序,用于消息队列服务。

4.Volo.Abp.AspNetCore.MultiTenancy
解析:
[1]Install-Package Volo.Abp.AspNetCore.MultiTenancy
[2]已经实现了从当前Web请求中确定当前租户

5.从Web请求中确定当前租户
解析:Volo.Abp.AspNetCore.MultiTenancy添加了下面这些租户解析器,从当前Web请求[按优先级排序]中确定当前租户:
[1]CurrentUserTenantResolveContributor:如果当前用户已登录,从当前用户的声明中获取租户Id。出于安全考虑,应该始终将其做为第一个Contributor。
[2]QueryStringTenantResolveContributor:尝试从query string参数中获取当前租户,默认参数名为"__tenant"。
[3]FormTenantResolveContributor:尝试从form参数中获取当前租户,默认参数名为"__tenant"。
[4]RouteTenantResolveContributor:尝试从当前路由中获取[URL路径],默认是变量名是"__tenant"。所以如果路由中定义了这个变量,就可以从路由中确定当前租户。
[5]HeaderTenantResolveContributor:尝试从HTTP header中获取当前租户,默认的header名称是"__tenant"。
[6]CookieTenantResolveContributor:尝试从当前cookie中获取当前租户,默认的Cookie名称是"__tenant"。

6.AbpAspNetCoreMultiTenancyOptions
解析:可以使用AbpAspNetCoreMultiTenancyOptions修改默认的参数名"__tenant":

services.Configure<AbpAspNetCoreMultiTenancyOptions>(options =>
{options.TenantKey = "MyTenantKey";
});

7.域名租户解析器
解析:实际项目中,大多数情况下想通过子域名[比如mytenant1.mydomain.com]或全域名[比如mytenant.com}中确定当前租户。如果是这样,可以配置AbpTenantResolveOptions添加一个域名租户解析器。

8.public interface IObjectMapper
解析:定义一个简单接口来自动映射对象。

9.ABP定义权限
解析:在Define方法中,首先需要添加权限组或获取现有组,然后向该组添加权限。

using Volo.Abp.Authorization.Permissions;
namespace Acme.BookStore.Permissions
{public class BookStorePermissionDefinitionProvider : PermissionDefinitionProvider{public override void Define(IPermissionDefinitionContext context){var myGroup = context.AddGroup("BookStore");myGroup.AddPermission("BookStore_Author_Create");}}
}

10.ABP本地化权限名称
解析:BookStore_Author_Create不是一个好的权限名称。但AddPermission和AddGroup方法可以采用LocalizableString作为第二个参数:

var myGroup = context.AddGroup("BookStore",LocalizableString.Create<BookStoreResource>("BookStore")
);
myGroup.AddPermission("BookStore_Author_Create",LocalizableString.Create<BookStoreResource>("Permission:BookStore_Author_Create")
);

然后可以在本地化文件中为BookStore和Permission定义文本:

"BookStore": "Book Store",
"Permission:BookStore_Author_Create": "Creating a new author"

11.ABP多租户
解析:可以在定义新权限时定义多租户选项:
[1]Host:权限仅适用于宿主
[2]Tenant:权限仅适用于租户
[3]Both[默认]:权限仅适用于宿主和租户
要设置多租户方选项,请传递给AddPermission方法第三个参数:

myGroup.AddPermission("BookStore_Author_Create",LocalizableString.Create<BookStoreResource>("Permission:BookStore_Author_Create"),multiTenancySide: MultiTenancySides.Tenant //set multi-tenancy side!
);

12.ABP子权限
解析:权限可能具有子权限:

var authorManagement = myGroup.AddPermission("Author_Management");
authorManagement.AddChild("Author_Management_Create_Books");
authorManagement.AddChild("Author_Management_Edit_Books");
authorManagement.AddChild("Author_Management_Delete_Books");

13.ABP更改从属模块的权限定义
解析:从PermissionDefinitionProvider派生的类也可以获取现有的权限定义并更改其定义:

context.GetPermissionOrNull(IdentityPermissions.Roles.Delete).IsEnabled = false;

在权限定义提供程序中编写此代码时,它将找到身份模块的"角色删除"权限并禁用了该权限,因此没有人可以在应用程序上删除角色。
说明:最好检查GetPermissionOrNull方法返回的值,因为如果未定义给定的权限,则该值可能返回null。

14.IAuthorizationService
解析:ASP.NET Core提供了可用于检查授权的IAuthorizationService。注入后可以在代码中使用它来有条件地控制授权。

public async Task CreateAsync(CreateAuthorDto input)
{var result = await AuthorizationService.AuthorizeAsync("Author_Management_Create_Books");if (result.Succeeded == false){//throw exceptionthrow new AbpAuthorizationException("...");}//continue to the normal flow...
}

ABP提供了扩展方法来简化它:

public async Task CreateAsync(CreateAuthorDto input)
{await AuthorizationService.CheckAsync("Author_Management_Create_Books");//continue to the normal flow...
}

如果未为给定权限授予当前用户/客户端,那么CheckAsync扩展方法将抛出AbpAuthorizationException异常。还有IsGrantedAsync扩展方法返回true或false。

15.ABP权限管理
解析:权限管理通常由管理员用户使用权限管理模式完成。如果需要通过代码管理权限,那么需要注入和使用IPermissionManager:

public class MyService : ITransientDependency
{private readonly IPermissionManager _permissionManager;public MyService(IPermissionManager permissionManager){_permissionManager = permissionManager;}public async Task GrantPermissionForUserAsync(Guid userId, string permissionName){await _permissionManager.SetForUserAsync(userId, permissionName, true);}public async Task ProhibitPermissionForUserAsync(Guid userId, string permissionName){await _permissionManager.SetForUserAsync(userId, permissionName, false);}
}

SetForUserAsync设置用户权限的值[true/false]。还有更多扩展方法,比如SetForRoleAsync和SetForClientAsync。

16.ABP权限值提供程序
解析:权限检查系统是可扩展的。从PermissionValueProvider[或实现IPermissionValueProvider]派生的任何类都可以参与权限检查。有三个预定义的值提供程序:

[1]UserPermissionValueProvider检查是否为当前用户授予了给定的权限。它从当前声明[claims]中获取用户id。用户声明[claims]名称是使用AbpClaimTypes.UserIdstatic属性定义的。
[2]RolePermissionValueProvider检查是否为给定权限授予当前用户的任何角色。它从当前声明[claims]中获取角色名称。角色声明[claims]名称是使用AbpClaimTypes.Rolestatic属性定义的。
[3]ClientPermissionValueProvider检查是否为当前客户端授予了给定的权限。这在当前没有用户的机器对机器的交互中特别有用。它从当前声明[claims]中获取客户id。客户声明[claims]名称是使用AbpClaimTypes.ClientIdstatic属性定义的。

17.ABP扩展权限检查系统
解析:可以通过定义权限值提供程序来扩展权限检查系统:

public class SystemAdminPermissionValueProvider : PermissionValueProvider
{public SystemAdminPermissionValueProvider(IPermissionStore permissionStore): base(permissionStore){}public override string Name => "SystemAdmin";public override async Task<PermissionGrantResult> CheckAsync(PermissionValueCheckContext context){if (context.Principal?.FindFirst("User_Type")?.Value == "SystemAdmin"){return PermissionGrantResult.Granted;}return PermissionGrantResult.Undefined;}
}

此提供程序允许具有SystemAdmin值的User_Type声明[claims]的用户获得所有权限。通常IPermissionStore在权限值提供程序中使用当前声明[claims]。权限值提供程序应从CheckAsync方法返回以下值之一:

[1]PermissionGrantResult.Granted返回以授予用户权限。如果任何提供程序返回Granted,那么结果为Granted,如果没有其它提供程序则返回Prohibited。
[2]PermissionGrantResult.Prohibited返回以禁止用户获得权限。如果任何提供程序返回Prohibited,结果将始终为Prohibited。其它提供程序返回什么都无所谓。
[3]如果此值提供程序无法决定权限值,那么返回PermissionGrantResult.Undefined。返回此值以让其它提供者检查权限。

定义提供程序后,应将其添加到AbpPermissionOptions:

Configure(options =>
{options.ValueProviders.Add();
});

18.ABP权限存储
解析:IPermissionStore是唯一需要从持久性源读取权限值的接口。权限管理模块将实现它并预安装在应用程序启动模板中。

19.AlwaysAllowAuthorizationService
解析:AlwaysAllowAuthorizationService是用于绕过授权服务的类。它通常用于可能要禁用授权系统的集成测试中。使用IServiceCollection.AddAlwaysAllowAuthorization()扩展方法来注册AlwaysAllowAuthorizationService到依赖注入系统:

public override void ConfigureServices(ServiceConfigurationContext context)
{context.Services.AddAlwaysAllowAuthorization();
}

20.public abstract class ApplicationService
解析:
[1]IApplicationService
[2]IAvoidDuplicateCrossCuttingConcerns
[3]IValidationEnabled
[4]IUnitOfWorkEnabled
[5]IAuditingEnabled
[6]ITransientDependency

21.npm淘宝镜像设置
解析:

npm config set registry https://registry.npm.taobao.org
npm config get registry

22.抽象类ApplicationService中的ObjectMapper方法
解析:

protected IObjectMapper ObjectMapper => LazyServiceProvider.LazyGetService<IObjectMapper>(provider =>ObjectMapperContext == null? provider.GetRequiredService<IObjectMapper>(): (IObjectMapper) provider.GetRequiredService(typeof(IObjectMapper<>).MakeGenericType(ObjectMapperContext)));

23.抽象类ApplicationService中的方法
解析:

[1]UnitOfWorkManager
[2]AsyncExecuter
[3]ObjectMapper
[4]GuidGenerator
[5]LoggerFactory
[6]CurrentTenant
[7]CurrentUser
[8]SettingProvider
[9]Clock
[10]AuthorizationService
[11]FeatureChecker
[12]StringLocalizerFactory
[13]Logger
[14]CheckPolicyAsync
[15]CreateLocalizer

24.public abstract TDestination Map<TSource,TDestination>(TSource source, TDestination destination)
解析:执行一个映射从源对象到已经存在的目标对象。

25.public abstract TDestination Map<TSource,TDestination>(TSource source)
解析:转换一个对象到另一个对象,创建一个新的TDestination对象。

参考文献:
[1]ABP动态生成WebAPI:https://www.cnblogs.com/SecondSun/p/9275184.html
[2]Tenant Management Module:https://docs.abp.io/zh-Hans/abp/latest/Modules/Tenant-Management
[3]微服务解决方案示例:https://docs.abp.io/zh-Hans/abp/latest/Samples/Microservice-Demo
[4]ABP vNext授权:https://www.freesion.com/article/73421329191/
[5]Abp vNext框架多租户:http://www.vnfan.com/helinbin/d/1fb95d918a0dc68c.html
[6]Tenant-Management:https://docs.abp.io/zh-Hans/abp/latest/Modules/Tenant-Management

ABP VNext学习日记20相关推荐

  1. ABP VNext学习日记17

    1.public static Assembly GetExecutingAssembly() 解析:得到包含的代码正在执行的程序集. 2.public interface IHostedServic ...

  2. ABP VNext学习日记15

    1.Polly服务容错模式 解析: [1]错误处理fault handling:重试.熔断.回退 [2]弹性应变resilience:超时.舱壁.缓存 2.Polly错误处理步骤 解析: [1]定义条 ...

  3. ABP VNext学习日记3

    1.ABP中的DTO 解析:在ABP的设计中,有两种不同类型的DTO,分别是用于新增.修改.删除的Input DTO,和用于查询的Output DTO. 2.Unit of Work 解析:工作单元与 ...

  4. ABP VNext学习日记21

    1.public class PagedResultDto<T> : ListResultDto<T>, IPagedResult<T> 解析: public lo ...

  5. ABP VNext学习日记30

    1.IDS4中的/connect/token接口 解析:固定写法,不是开发自定义的,只需要直接去使用就行了,注意调用方式时的输入参数. 2.RequestPasswordTokenAsync 解析: ...

  6. ABP VNext学习日记18

    1.IAuthorizationService 解析:IAuthorizationService具有两个AuthorizeAsync方法重载:一个接受资源和策略名称,另一个接受资源并提供要评估的要求的 ...

  7. ABP VNext学习日记22

    1.PreConfigureServices和PostConfigureServices 解析:AbpModule类还定义了PreConfigureServices和PostConfigureServ ...

  8. ABP VNext学习日记1

    1.安装和更新ABP CLI 解析: dotnet tool install -g Volo.Abp.Cli dotnet tool update -g Volo.Abp.Cli 2.模块拆分原则 解 ...

  9. ABP VNext学习日记14

    1.Abp.AbpBootstrapper 解析:这是一个主类,它负责开始全部的ABP系统. 2.Abp.Dependency.IocManager 解析:这个类用于直接执行依赖注入任务. 3.voi ...

最新文章

  1. Centos7多内核情况下修改默认启动内核方法
  2. aspose-cells 表合并
  3. Tomcat学习总结
  4. Spring 开启Annotation context:annotation-config 和 context:component-scan诠释及区别
  5. 计算机网络管理员demo,计算机网络试题demo
  6. 突然发现被点名(理想恋人游戏)
  7. C++实现对象序列化和反序列化(读写二进制文件)操作
  8. 2020胡润百富榜:马云蝉联首富,马化腾财富增长最多
  9. 亚马逊EC2根硬盘空间扩容
  10. 为了有利于保护安全性,IE已限制此网页运行可以访问计算机的脚本或 ActiveX 控件。请单击这里获取选项......
  11. 【C语言】02-第一个C程序
  12. WebRTC的基本概念
  13. 使用ViewPager和PhotoView实现图片浏览
  14. 内存核心频率、工作频率,等效频率、预读取技术详解
  15. Verilog编写VGA控制器
  16. Winrar 4.0破解
  17. Java虚拟机 - JVM是什么?
  18. ios11更新提示信任_iPhone手机iOS11怎么设置信任软件
  19. 本地管理表空间(LMT)与自动段空间管理(ASSM)概念(未看)
  20. JS 报错getElementsByClassName.appendChild报错“Uncaught TypeError: s.appendChild is not a function”

热门文章

  1. 制作DOS的U盘启动
  2. Esxi 6.7基于已有数据存储配置虚拟机(Windows类)间共享存储(非RDM)
  3. PL/SQL Developer设置日期格式
  4. SaaS、PaaS、IaaS的区别
  5. S4 MIGO屏幕增强
  6. 总结一周:变量,数据类型,循环,函数
  7. CHIL-SQL-NULL 值
  8. 高阶统计量用于信号分析
  9. InfoPath学习
  10. 3D视觉缺陷检测:理论与实战!