Skip to content

Commit 8bb3983

Browse files
committed
[edit] related to security types registrations set to scoped to allow scoped security rules without much container overrides
1 parent 2e5d592 commit 8bb3983

8 files changed

+145
-24
lines changed

src/Simplify.Web/Bootstrapper/Setup/BaseBootstrapper.cs

+8-1
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ public void Register(IConfiguration? configuration = null, IEnumerable<Type>? ty
6464
RegisterControllerExecutorResolverExecutors();
6565
RegisterControllersExecutor();
6666
RegisterControllerResolutionPipeline();
67+
RegisterControllerResolutionPipelineRouteMatchingStage();
68+
RegisterControllerResolutionPipelineSecurityCheckStage();
6769
RegisterControllerResolutionPipelineStages();
6870
RegisterControllerResponseExecutor();
6971
RegisterCrsHandlers();
@@ -74,7 +76,10 @@ public void Register(IConfiguration? configuration = null, IEnumerable<Type>? ty
7476
RegisterDynamicEnvironment();
7577
RegisterEnvironment();
7678
RegisterExecutionWorkOrderBuildDirector();
77-
RegisterExecutionWorkOrderBuildDirectorStages();
79+
RegisterExecutionWorkOrderBuildDirectorGlobalControllersBuilder();
80+
RegisterExecutionWorkOrderBuildDirectorNotFoundBuilder();
81+
RegisterExecutionWorkOrderBuildDirectorRoutedControllersBuilder();
82+
RegisterExecutionWorkOrderBuildStages();
7883
RegisterFileReader();
7984
RegisterLanguageManagerProvider();
8085
RegisterListsGenerator();
@@ -90,6 +95,8 @@ public void Register(IConfiguration? configuration = null, IEnumerable<Type>? ty
9095
RegisterRouteMatcherResolverMatchers();
9196
RegisterSecurityChecker();
9297
RegisterSecurityRules();
98+
RegisterSecurityRulesUnauthorizedRule();
99+
RegisterSecurityRulesRoleAuthorizationRule();
93100
RegisterSimplifyWebSettings(Settings);
94101

95102
if (Settings.StaticFilesEnabled)

src/Simplify.Web/Bootstrapper/Setup/BaseBootstrapperControllersExecutionWorkOrder.cs

+39-10
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
using Simplify.Web.Controllers.Execution.WorkOrder;
55
using Simplify.Web.Controllers.Execution.WorkOrder.BuildStages;
66
using Simplify.Web.Controllers.Execution.WorkOrder.Director;
7-
using Simplify.Web.Controllers.Resolution;
8-
using Simplify.Web.Controllers.Resolution.Handling;
97

108
namespace Simplify.Web.Bootstrapper.Setup;
119

@@ -22,24 +20,55 @@ public virtual void RegisterExecutionWorkOrderBuildDirector()
2220
if (TypesToExclude.Contains(typeof(IExecutionWorkOrderBuildDirector)))
2321
return;
2422

25-
BootstrapperFactory.ContainerProvider.Register<IExecutionWorkOrderBuildDirector, ExecutionWorkOrderBuildDirector>(LifetimeType.Singleton);
23+
BootstrapperFactory.ContainerProvider.Register<IExecutionWorkOrderBuildDirector, ExecutionWorkOrderBuildDirector>();
24+
}
25+
26+
/// <summary>
27+
/// Registers the execution work order build director routed controllers builder.
28+
/// </summary>
29+
public virtual void RegisterExecutionWorkOrderBuildDirectorRoutedControllersBuilder()
30+
{
31+
if (TypesToExclude.Contains(typeof(RoutedControllersBuilder)))
32+
return;
33+
34+
BootstrapperFactory.ContainerProvider.Register<RoutedControllersBuilder>();
35+
}
36+
37+
/// <summary>
38+
/// Registers the execution work order build director not found builder.
39+
/// </summary>
40+
public virtual void RegisterExecutionWorkOrderBuildDirectorNotFoundBuilder()
41+
{
42+
if (TypesToExclude.Contains(typeof(NotFoundBuilder)))
43+
return;
44+
45+
BootstrapperFactory.ContainerProvider.Register<NotFoundBuilder>(LifetimeType.Singleton);
46+
}
47+
48+
/// <summary>
49+
/// Registers the execution work order build director global controllers
50+
/// </summary>
51+
public virtual void RegisterExecutionWorkOrderBuildDirectorGlobalControllersBuilder()
52+
{
53+
if (TypesToExclude.Contains(typeof(GlobalControllersBuilder)))
54+
return;
55+
56+
BootstrapperFactory.ContainerProvider.Register<GlobalControllersBuilder>(LifetimeType.Singleton);
2657
}
2758

2859
/// <summary>
2960
/// Registers the execution work order build director stages.
3061
/// </summary>
31-
public virtual void RegisterExecutionWorkOrderBuildDirectorStages()
62+
public virtual void RegisterExecutionWorkOrderBuildStages()
3263
{
3364
if (TypesToExclude.Contains(typeof(IReadOnlyList<IExecutionWorkOrderBuildStage>)))
3465
return;
3566

3667
BootstrapperFactory.ContainerProvider.Register<IReadOnlyList<IExecutionWorkOrderBuildStage>>(r =>
3768
[
38-
new RoutedControllersBuilder(
39-
r.Resolve<IControllerResolutionPipeline>(),
40-
r.Resolve<ICrsHandlingPipeline>()),
41-
new NotFoundBuilder(),
42-
new GlobalControllersBuilder()
43-
], LifetimeType.Singleton);
69+
r.Resolve<RoutedControllersBuilder>(),
70+
r.Resolve<NotFoundBuilder>(),
71+
r.Resolve<GlobalControllersBuilder>()
72+
]);
4473
}
4574
}

src/Simplify.Web/Bootstrapper/Setup/BaseBootstrapperControllersResolution.cs

+26-8
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@
33
using Simplify.DI;
44
using Simplify.Web.Controllers.Resolution;
55
using Simplify.Web.Controllers.Resolution.Stages;
6-
using Simplify.Web.Controllers.RouteMatching.Resolver;
7-
using Simplify.Web.Controllers.Security;
86

97
namespace Simplify.Web.Bootstrapper.Setup;
108

@@ -21,7 +19,29 @@ public virtual void RegisterControllerResolutionPipeline()
2119
if (TypesToExclude.Contains(typeof(IControllerResolutionPipeline)))
2220
return;
2321

24-
BootstrapperFactory.ContainerProvider.Register<IControllerResolutionPipeline, ControllerResolutionPipeline>(LifetimeType.Singleton);
22+
BootstrapperFactory.ContainerProvider.Register<IControllerResolutionPipeline, ControllerResolutionPipeline>();
23+
}
24+
25+
/// <summary>
26+
/// Registers the controller resolution pipeline route matching stage.
27+
/// </summary>
28+
public virtual void RegisterControllerResolutionPipelineRouteMatchingStage()
29+
{
30+
if (TypesToExclude.Contains(typeof(RouteMatchingStage)))
31+
return;
32+
33+
BootstrapperFactory.ContainerProvider.Register<RouteMatchingStage>();
34+
}
35+
36+
/// <summary>
37+
/// Registers the controller resolution pipeline security check stage.
38+
/// </summary>
39+
public virtual void RegisterControllerResolutionPipelineSecurityCheckStage()
40+
{
41+
if (TypesToExclude.Contains(typeof(SecurityCheckStage)))
42+
return;
43+
44+
BootstrapperFactory.ContainerProvider.Register<SecurityCheckStage>();
2545
}
2646

2747
/// <summary>
@@ -34,10 +54,8 @@ public virtual void RegisterControllerResolutionPipelineStages()
3454

3555
BootstrapperFactory.ContainerProvider.Register<IReadOnlyList<IControllerResolutionStage>>(r =>
3656
[
37-
new RouteMatchingStage(
38-
r.Resolve<IRouteMatcherResolver>()),
39-
new SecurityCheckStage(
40-
r.Resolve<ISecurityChecker>())
41-
], LifetimeType.Singleton);
57+
r.Resolve<RouteMatchingStage>(),
58+
r.Resolve<SecurityCheckStage>()
59+
]);
4260
}
4361
}

src/Simplify.Web/Bootstrapper/Setup/BaseBootstrapperControllersSecurity.cs

+26-4
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,29 @@ public virtual void RegisterSecurityChecker()
1919
if (TypesToExclude.Contains(typeof(ISecurityChecker)))
2020
return;
2121

22-
BootstrapperFactory.ContainerProvider.Register<ISecurityChecker, SecurityChecker>(LifetimeType.Singleton);
22+
BootstrapperFactory.ContainerProvider.Register<ISecurityChecker, SecurityChecker>();
23+
}
24+
25+
/// <summary>
26+
/// Registers the security rules unauthorized rule.
27+
/// </summary>
28+
public virtual void RegisterSecurityRulesUnauthorizedRule()
29+
{
30+
if (TypesToExclude.Contains(typeof(UnauthorizedRule)))
31+
return;
32+
33+
BootstrapperFactory.ContainerProvider.Register<UnauthorizedRule>();
34+
}
35+
36+
/// <summary>
37+
/// Registers the security rules authorization rule.
38+
/// </summary>
39+
public virtual void RegisterSecurityRulesRoleAuthorizationRule()
40+
{
41+
if (TypesToExclude.Contains(typeof(RoleAuthorizationRule)))
42+
return;
43+
44+
BootstrapperFactory.ContainerProvider.Register<RoleAuthorizationRule>();
2345
}
2446

2547
/// <summary>
@@ -32,8 +54,8 @@ public virtual void RegisterSecurityRules()
3254

3355
BootstrapperFactory.ContainerProvider.Register<IReadOnlyList<ISecurityRule>>(r =>
3456
[
35-
new UnauthorizedRule(),
36-
new RoleAuthorizationRule()
37-
], LifetimeType.Singleton);
57+
r.Resolve<UnauthorizedRule>(),
58+
r.Resolve<RoleAuthorizationRule>()
59+
]);
3860
}
3961
}

src/Simplify.Web/Bootstrapper/SimplifyWebRegistrationsOverride/RegistrationsOverrideControllersExecutionWorkOrder.cs

+19
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using Simplify.DI;
44
using Simplify.Web.Controllers.Execution.WorkOrder;
5+
using Simplify.Web.Controllers.Execution.WorkOrder.BuildStages;
56
using Simplify.Web.Controllers.Execution.WorkOrder.Director;
67

78
namespace Simplify.Web.Bootstrapper.SimplifyWebRegistrationsOverride;
@@ -17,6 +18,24 @@ public partial class RegistrationsOverride
1718
/// <param name="action">The custom registration action.</param>
1819
public RegistrationsOverride OverrideExecutionWorkOrderBuildDirector(Action<IDIRegistrator> action) => AddAction<IExecutionWorkOrderBuildDirector>(action);
1920

21+
/// <summary>
22+
/// Overrides the `RoutedControllersBuilder` registration.
23+
/// </summary>
24+
/// <param name="action">The custom registration action.</param>
25+
public RegistrationsOverride OverrideExecutionWorkOrderBuildDirectorRoutedControllersBuilder(Action<IDIRegistrator> action) => AddAction<RoutedControllersBuilder>(action);
26+
27+
/// <summary>
28+
/// Overrides the `NotFoundBuilder` registration.
29+
/// </summary>
30+
/// <param name="action">The custom registration action.</param>
31+
public RegistrationsOverride OverrideExecutionWorkOrderBuildDirectorNotFoundBuilder(Action<IDIRegistrator> action) => AddAction<NotFoundBuilder>(action);
32+
33+
/// <summary>
34+
/// Overrides the `GlobalControllersBuilder` registration.
35+
/// </summary>
36+
/// <param name="action">The custom registration action.</param>
37+
public RegistrationsOverride OverrideExecutionWorkOrderBuildDirectorGlobalControllersBuilder(Action<IDIRegistrator> action) => AddAction<GlobalControllersBuilder>(action);
38+
2039
/// <summary>
2140
/// Overrides the `IReadOnlyList&lt;IExecutionWorkOrderBuildStage&gt;` registration.
2241
/// </summary>

src/Simplify.Web/Bootstrapper/SimplifyWebRegistrationsOverride/RegistrationsOverrideControllersResolution.cs

+13
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using Simplify.DI;
44
using Simplify.Web.Controllers.Resolution;
5+
using Simplify.Web.Controllers.Resolution.Stages;
56

67
namespace Simplify.Web.Bootstrapper.SimplifyWebRegistrationsOverride;
78

@@ -16,6 +17,18 @@ public partial class RegistrationsOverride
1617
/// <param name="action">The custom registration action.</param>
1718
public RegistrationsOverride OverrideControllerResolutionPipeline(Action<IDIRegistrator> action) => AddAction<IControllerResolutionPipeline>(action);
1819

20+
/// <summary>
21+
/// Overrides the `RouteMatchingStage` registration.
22+
/// </summary>
23+
/// <param name="action">The custom registration action.</param>
24+
public RegistrationsOverride OverrideControllerResolutionPipelineRouteMatchingStage(Action<IDIRegistrator> action) => AddAction<RouteMatchingStage>(action);
25+
26+
/// <summary>
27+
/// Overrides the `SecurityCheckStage` registration.
28+
/// </summary>
29+
/// <param name="action">The custom registration action.</param>
30+
public RegistrationsOverride OverrideControllerResolutionPipelineSecurityCheckStage(Action<IDIRegistrator> action) => AddAction<SecurityCheckStage>(action);
31+
1932
/// <summary>
2033
/// Overrides the `IReadOnlyList&lt;IControllerResolutionStage&gt;` registration.
2134
/// </summary>

src/Simplify.Web/Bootstrapper/SimplifyWebRegistrationsOverride/RegistrationsOverrideControllersSecurity.cs

+13
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Collections.Generic;
33
using Simplify.DI;
44
using Simplify.Web.Controllers.Security;
5+
using Simplify.Web.Controllers.Security.Rules;
56

67
namespace Simplify.Web.Bootstrapper.SimplifyWebRegistrationsOverride;
78

@@ -16,6 +17,18 @@ public partial class RegistrationsOverride
1617
/// <param name="action">The custom registration action.</param>
1718
public RegistrationsOverride OverrideSecurityChecker(Action<IDIRegistrator> action) => AddAction<ISecurityChecker>(action);
1819

20+
/// <summary>
21+
/// Overrides the `UnauthorizedRule` registration.
22+
/// </summary>
23+
/// <param name="action">The custom registration action.</param>
24+
public RegistrationsOverride OverrideUnauthorizedRule(Action<IDIRegistrator> action) => AddAction<UnauthorizedRule>(action);
25+
26+
/// <summary>
27+
/// Overrides the `RoleAuthorizationRule` registration.
28+
/// </summary>
29+
/// <param name="action">The custom registration action.</param>
30+
public RegistrationsOverride OverrideRoleAuthorizationRule(Action<IDIRegistrator> action) => AddAction<RoleAuthorizationRule>(action);
31+
1932
/// <summary>
2033
/// Overrides the `IReadOnlyList&lt;ISecurityRule&gt;` registration.
2134
/// </summary>

src/Simplify.Web/Simplify.Web.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
1010
<GenerateDocumentationFile>true</GenerateDocumentationFile>
1111

12-
<Version>5.0-pre01</Version>
12+
<Version>5.0-pre02</Version>
1313

1414
<Authors>Simplify community</Authors>
1515
<Product>Simplify</Product>

0 commit comments

Comments
 (0)