diff --git a/.gitignore b/.gitignore index 31c7257..b299ff1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .tasks/ .agile/ +**/bin/ +**/obj/ diff --git a/BuildingBlock.Policy.slnx b/BuildingBlock.Policy.slnx new file mode 100644 index 0000000..0e00073 --- /dev/null +++ b/BuildingBlock.Policy.slnx @@ -0,0 +1,5 @@ + + + + + diff --git a/Directory.Build.props b/Directory.Build.props new file mode 100644 index 0000000..bfa3664 --- /dev/null +++ b/Directory.Build.props @@ -0,0 +1,10 @@ + + + AgileWebs + AgileWebs + git + http://192.168.68.156:3000/AgileWebs/building-block-policy + http://192.168.68.156:3000/AgileWebs/building-block-policy + false + + diff --git a/src/BuildingBlock.Policy.Contracts/Abstractions/IPolicyCapabilityContract.cs b/src/BuildingBlock.Policy.Contracts/Abstractions/IPolicyCapabilityContract.cs new file mode 100644 index 0000000..71aea78 --- /dev/null +++ b/src/BuildingBlock.Policy.Contracts/Abstractions/IPolicyCapabilityContract.cs @@ -0,0 +1,11 @@ +using BuildingBlock.Policy.Contracts.Requests; +using BuildingBlock.Policy.Contracts.Responses; + +namespace BuildingBlock.Policy.Contracts.Abstractions; + +public interface IPolicyCapabilityContract +{ + Task EvaluatePolicyAsync( + EvaluatePolicyRequest request, + CancellationToken cancellationToken); +} diff --git a/src/BuildingBlock.Policy.Contracts/BuildingBlock.Policy.Contracts.csproj b/src/BuildingBlock.Policy.Contracts/BuildingBlock.Policy.Contracts.csproj new file mode 100644 index 0000000..b760144 --- /dev/null +++ b/src/BuildingBlock.Policy.Contracts/BuildingBlock.Policy.Contracts.csproj @@ -0,0 +1,9 @@ + + + + net10.0 + enable + enable + + + diff --git a/src/BuildingBlock.Policy.Contracts/Contracts/PolicyFactContract.cs b/src/BuildingBlock.Policy.Contracts/Contracts/PolicyFactContract.cs new file mode 100644 index 0000000..665b4f5 --- /dev/null +++ b/src/BuildingBlock.Policy.Contracts/Contracts/PolicyFactContract.cs @@ -0,0 +1,3 @@ +namespace BuildingBlock.Policy.Contracts.Contracts; + +public sealed record PolicyFactContract(string Key, string Value); diff --git a/src/BuildingBlock.Policy.Contracts/Contracts/PolicyOutcome.cs b/src/BuildingBlock.Policy.Contracts/Contracts/PolicyOutcome.cs new file mode 100644 index 0000000..36804a5 --- /dev/null +++ b/src/BuildingBlock.Policy.Contracts/Contracts/PolicyOutcome.cs @@ -0,0 +1,8 @@ +namespace BuildingBlock.Policy.Contracts.Contracts; + +public enum PolicyOutcome +{ + Allowed = 0, + Denied = 1, + RequiresApproval = 2 +} diff --git a/src/BuildingBlock.Policy.Contracts/Requests/EvaluatePolicyRequest.cs b/src/BuildingBlock.Policy.Contracts/Requests/EvaluatePolicyRequest.cs new file mode 100644 index 0000000..dc9578b --- /dev/null +++ b/src/BuildingBlock.Policy.Contracts/Requests/EvaluatePolicyRequest.cs @@ -0,0 +1,8 @@ +using BuildingBlock.Policy.Contracts.Contracts; + +namespace BuildingBlock.Policy.Contracts.Requests; + +public sealed record EvaluatePolicyRequest( + string PolicyName, + IReadOnlyCollection Facts, + DateTime EvaluationAtUtc); diff --git a/src/BuildingBlock.Policy.Contracts/Responses/EvaluatePolicyResponse.cs b/src/BuildingBlock.Policy.Contracts/Responses/EvaluatePolicyResponse.cs new file mode 100644 index 0000000..62d7fd9 --- /dev/null +++ b/src/BuildingBlock.Policy.Contracts/Responses/EvaluatePolicyResponse.cs @@ -0,0 +1,8 @@ +using BuildingBlock.Policy.Contracts.Contracts; + +namespace BuildingBlock.Policy.Contracts.Responses; + +public sealed record EvaluatePolicyResponse( + PolicyOutcome Outcome, + string Explanation, + IReadOnlyCollection AppliedRules);