ABP VNext学习日记20
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相关推荐
- ABP VNext学习日记17
1.public static Assembly GetExecutingAssembly() 解析:得到包含的代码正在执行的程序集. 2.public interface IHostedServic ...
- ABP VNext学习日记15
1.Polly服务容错模式 解析: [1]错误处理fault handling:重试.熔断.回退 [2]弹性应变resilience:超时.舱壁.缓存 2.Polly错误处理步骤 解析: [1]定义条 ...
- ABP VNext学习日记3
1.ABP中的DTO 解析:在ABP的设计中,有两种不同类型的DTO,分别是用于新增.修改.删除的Input DTO,和用于查询的Output DTO. 2.Unit of Work 解析:工作单元与 ...
- ABP VNext学习日记21
1.public class PagedResultDto<T> : ListResultDto<T>, IPagedResult<T> 解析: public lo ...
- ABP VNext学习日记30
1.IDS4中的/connect/token接口 解析:固定写法,不是开发自定义的,只需要直接去使用就行了,注意调用方式时的输入参数. 2.RequestPasswordTokenAsync 解析: ...
- ABP VNext学习日记18
1.IAuthorizationService 解析:IAuthorizationService具有两个AuthorizeAsync方法重载:一个接受资源和策略名称,另一个接受资源并提供要评估的要求的 ...
- ABP VNext学习日记22
1.PreConfigureServices和PostConfigureServices 解析:AbpModule类还定义了PreConfigureServices和PostConfigureServ ...
- ABP VNext学习日记1
1.安装和更新ABP CLI 解析: dotnet tool install -g Volo.Abp.Cli dotnet tool update -g Volo.Abp.Cli 2.模块拆分原则 解 ...
- ABP VNext学习日记14
1.Abp.AbpBootstrapper 解析:这是一个主类,它负责开始全部的ABP系统. 2.Abp.Dependency.IocManager 解析:这个类用于直接执行依赖注入任务. 3.voi ...
最新文章
- Centos7多内核情况下修改默认启动内核方法
- aspose-cells 表合并
- Tomcat学习总结
- Spring 开启Annotation context:annotation-config 和 context:component-scan诠释及区别
- 计算机网络管理员demo,计算机网络试题demo
- 突然发现被点名(理想恋人游戏)
- C++实现对象序列化和反序列化(读写二进制文件)操作
- 2020胡润百富榜:马云蝉联首富,马化腾财富增长最多
- 亚马逊EC2根硬盘空间扩容
- 为了有利于保护安全性,IE已限制此网页运行可以访问计算机的脚本或 ActiveX 控件。请单击这里获取选项......
- 【C语言】02-第一个C程序
- WebRTC的基本概念
- 使用ViewPager和PhotoView实现图片浏览
- 内存核心频率、工作频率,等效频率、预读取技术详解
- Verilog编写VGA控制器
- Winrar 4.0破解
- Java虚拟机 - JVM是什么?
- ios11更新提示信任_iPhone手机iOS11怎么设置信任软件
- 本地管理表空间(LMT)与自动段空间管理(ASSM)概念(未看)
- JS 报错getElementsByClassName.appendChild报错“Uncaught TypeError: s.appendChild is not a function”