.NET云原生架构师训练营(权限系统代码实现EntityAccess)
由于ActionAccess是一个类库,提供了一些分散的功能,因此需要添加一个扩展方法来组装这些功能,并在主机启动时执行动作扫描。
使用Microsoft.Extensions.DependencyInjection; 命名空间DotNetNB.Security.Core.Extensions{ 公共静态类ServiceCollectionExtensions { 公共静态IServiceCollection AddSecurity(此IServiceCollection 服务) { services.AddHostedServiceResourceProviderHostedService(); }退货服务; } }}ResourceProviderHostedService继承自IHostedService,有一个StartAsync和一个StopAsync方法
using Microsoft.Extensions.Hosting;namespace DotNetNB.Security.Core{ public class ResourceProviderHostedService : IHostedService { public async Task StartAsync(CancellationToken CancellationToken) { } public async Task StopAsync(CancellationToken CancellationToken) { } }}创建一个新的示例api 项目DotNetNB。 WebApplication,在这个api项目中使用我们的dll应该足够简单,就像使用asp .net core api一样
添加DotNetNB.Security.Core的项目引用后,可以直接在Program.cs中调用扩展方法
使用DotNetNB.Security.Core.Extensions;builder.Services.AddSecurity();当开始扫描时,Security.Core不知道外部主机中有哪些操作提供者,因此需要注册它并构建一个构建器。
同时还需要一个配置选项来告诉我们它来自哪个包,是ActionAccess还是EntityAccess。
请参阅MvcOptions
builder.Services.AddControllers(options={});它是Action的委托
公共静态IMvcBuilder AddControllers(此IServiceCollection 服务,ActionMvcOptions?配置){ IMvcCoreBuilder builder=services !=null ? MvcServiceCollectionExtensions.AddControllersCore(服务) : 抛出新的ArgumentNullException(nameof (服务)); if (configure!=null) builder.AddMvcOptions(configure); return (IMvcBuilder) new MvcBuilder(builder.Services, builder.PartManager);} 所以我们在AddSecurity中添加一个输入参数
公共静态IServiceCollection AddSecurity(此IServiceCollection服务,ActionSecurityOption?配置)SecurityOption
使用Microsoft.Extensions.DependencyInjection;命名空间DotNetNB.Security.Core.Extensions{ 公共类SecurityOption { 公共IServiceCollection Services { get;放; } }} 在调用AddSecurity扩展方法时通过SecurityOption进行配置,这样所有的外部api只需要做这个配置,就可以引用两个包的所有功能。
builder.Services.AddSecurity(options={ options.AddActionAccess(); options.AddEntityAccessDBContext();});参考MvcCoreServiceCollectionExtensions的AddMvcCoreServices方法
内部静态void AddMvcCoreServices(IServiceCollection services){ ////选项//services.TryAddEnumerable( ServiceDescriptor.TransientIConfigureOptionsMvcOptions, MvcCoreMvcOptionsSetup());} 在ActionAccess中添加扩展方法AddActionAccessControl并添加IResourceProvider,这样就可以在ResourceProviderHostedService中读取
使用DotNetNB.Security.Core;使用DotNetNB.Security.Core.Extensions;使用Microsoft.Extensions.DependencyInjection;使用Microsoft.Extensions.DependencyInjection.Extensions;命名空间DotNetNB.Security.ActionAccess{ 公共静态类SecurityOptionExtensions { 公共静态SecurityOption AddActionAccessControl(this SecurityOption option) { option.Services.TryAddEnumerable(ServiceDescriptor.TransientIResourceProvider, ActionResourceProvider());退货选项; } }}在ResourceProviderHostedService的构造函数中读取IServiceProvider
使用Microsoft.Extensions.Hosting;命名空间DotNetNB.Security.Core{ public class ResourceProviderHostedService : IHostedService { private readonly IServiceProvider[] _serviceProviders;公共ResourceProviderHostedService(IServiceProvider[] serviceProviders) { _serviceProviders=serviceProviders; } public async Task StartAsync(CancellationToken CancellationToken) { } public async Task StopAsync(CancellationToken CancellationToken) { } }} 另外在EntityAccess 中添加一个扩展方法AddEntityAccessControl
使用DotNetNB.Security.Core;使用DotNetNB.Security.Core.Extensions;使用Microsoft.Extensions.DependencyInjection;使用Microsoft.Extensions.DependencyInjection.Extensions;命名空间DotNetNB.Security.EntityAccess{ 公共静态类SecurityOptionExtensions { 公共静态SecurityOption AddEntityAccessControl(this SecurityOption 选项) { option.Services.TryAddEnumerable(ServiceDescriptor.TransientIResourceProvider, EntityResourceProvider());退货选项; } }}EntityResourceProvider继承IResourceProvider
使用DotNetNB.Security.Core;使用DotNetNB.Security.Core.Models;命名空间DotNetNB.Security.EntityAccess{ public class EntityResourceProvider : IResourceProvider { public async TaskIEnumerableResource ExecuteAsync() { return new ListResource(); } } }}在DotNetNB 中完成后。添加对WebApplication的项目引用来配置它
用户评论
淡抹烟熏妆丶
这个.NET云原生架构师训练营听起来很专业啊,特别是EntityAccess的权限系统代码实现,我对这个很感兴趣,想了解更多细节。
有20位网友表示赞同!
栀蓝
刚刚看到这个标题,对EntityAccess权限系统实现有点懵,不过训练营应该会讲得比较清楚,希望我能跟得上。
有14位网友表示赞同!
纯情小火鸡
终于找到一个专注于.NET云原生架构师的地方了,权限系统的代码实现是重点,期待能学到实用的东西。
有12位网友表示赞同!
在哪跌倒こ就在哪躺下
看了训练营的内容介绍,感觉EntityAccess权限系统的实现方法很有创意,想看看具体怎么操作的。
有15位网友表示赞同!
╯念抹浅笑
我对.NET不太熟悉,但是对云原生架构挺感兴趣的,这个训练营应该能让我入门。
有10位网友表示赞同!
♂你那刺眼的温柔
EntityAccess权限系统的代码实现听起来挺复杂的,但是作为一个架构师,我觉得这是必须掌握的技能。
有10位网友表示赞同!
关于道别
这个训练营的标题太吸引人了,尤其是EntityAccess这部分,我一定要报名学习。
有16位网友表示赞同!
ヅ她的身影若隐若现
我对.NET云原生架构不是很懂,但是看到权限系统代码实现,觉得这个训练营应该挺适合我的。
有18位网友表示赞同!
熏染
之前看过一些关于EntityAccess权限系统的文章,但是自己动手实践还是头一回,这个训练营正好满足我的需求。
有19位网友表示赞同!
青袂婉约
作为一个开发者,我觉得权限系统是实现安全性的关键,这个训练营应该能让我在这个领域有所突破。
有17位网友表示赞同!
夏至离别
标题中的.NET云原生架构师训练营听起来很高级,我对EntityAccess权限系统也感兴趣,想去看看。
有20位网友表示赞同!
巷口酒肆
权限系统的代码实现是每个架构师必备技能,这个训练营看起来很实用,希望能加入。
有13位网友表示赞同!
念安я
我对.NET不太熟悉,但是看到EntityAccess权限系统的实现,觉得这个训练营对我的职业发展有帮助。
有9位网友表示赞同!
君临臣
标题里提到的权限系统代码实现,我觉得应该是训练营的亮点,期待能学到更多的技术。
有16位网友表示赞同!
龙吟凤
作为一个初学者,我对.NET云原生架构很感兴趣,这个训练营应该能帮我打开新的大门。
有20位网友表示赞同!
拉扯
看到EntityAccess权限系统的代码实现,我觉得这个训练营适合不同阶段的学习者,很期待。
有12位网友表示赞同!
醉枫染墨
我对.NET不太了解,但是看到这个训练营的内容,觉得学习权限系统代码实现是个不错的起点。
有12位网友表示赞同!
鹿先森,教魔方
这个训练营的标题很有吸引力,我对EntityAccess权限系统的实现方法很感兴趣,想了解更多。
有18位网友表示赞同!
浮光浅夏ζ
之前对.NET云原生架构一窍不通,但是看到这个训练营的内容,我觉得自己有潜力成为一名架构师。
有17位网友表示赞同!