diff --git a/Application/Directory.Build.props b/Application/Directory.Build.props deleted file mode 100644 index 2f2d2d0b1..000000000 --- a/Application/Directory.Build.props +++ /dev/null @@ -1,11 +0,0 @@ - - - - Ed-Fi ODS Admin App - Ed-Fi Alliance, LLC and contributors - Ed-Fi Alliance, LLC and contributors - Copyright © 2016 Ed-Fi Alliance - 0.1.0.1 - - - diff --git a/Application/Directory.Packages.props b/Application/Directory.Packages.props new file mode 100644 index 000000000..c673c845e --- /dev/null +++ b/Application/Directory.Packages.props @@ -0,0 +1,42 @@ + + + + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/AddClaimSetCommandV6ServiceTests.cs b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/AddClaimSetCommandServiceTests.cs similarity index 90% rename from Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/AddClaimSetCommandV6ServiceTests.cs rename to Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/AddClaimSetCommandServiceTests.cs index e7438f219..06b51d1e2 100644 --- a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/AddClaimSetCommandV6ServiceTests.cs +++ b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/AddClaimSetCommandServiceTests.cs @@ -14,7 +14,7 @@ namespace EdFi.Ods.AdminApi.DBTests.ClaimSetEditorTests; [TestFixture] -public class AddClaimSetCommandV6ServiceTests : SecurityDataTestBase +public class AddClaimSetCommandServiceTests : SecurityDataTestBase { [Test] public void ShouldAddClaimSet() @@ -31,7 +31,7 @@ public void ShouldAddClaimSet() ClaimSet addedClaimSet = null; using (var securityContext = TestContext) { - var command = new AddClaimSetCommandV6Service(securityContext); + var command = new AddClaimSetCommandService(securityContext); addedClaimSetId = command.Execute(newClaimSet); addedClaimSet = securityContext.ClaimSets.Single(x => x.ClaimSetId == addedClaimSetId); } diff --git a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/AddClaimSetCommandV53ServiceTests.cs b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/AddClaimSetCommandV53ServiceTests.cs deleted file mode 100644 index ab17834dc..000000000 --- a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/AddClaimSetCommandV53ServiceTests.cs +++ /dev/null @@ -1,41 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; - -using System; -using System.Linq; -using NUnit.Framework; -using EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; -using Shouldly; -using ClaimSet = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.ClaimSet; -using Application = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.Application; - -namespace EdFi.Ods.AdminApi.DBTests.ClaimSetEditorTests; - -[TestFixture] -public class AddClaimSetCommandV53ServiceTests : SecurityData53TestBase -{ - [Test] - public void ShouldAddClaimSet() - { - var testApplication = new Application - { - ApplicationName = $"Test Application {DateTime.Now:O}" - }; - Save(testApplication); - - var newClaimSet = new AddClaimSetModel { ClaimSetName = "TestClaimSet" }; - - var addedClaimSetId = 0; - ClaimSet addedClaimSet = null; - using (var context = base.TestContext) - { - var command = new AddClaimSetCommandV53Service(context); - addedClaimSetId = command.Execute(newClaimSet); - addedClaimSet = context.ClaimSets.Single(x => x.ClaimSetId == addedClaimSetId); - } - addedClaimSet.ClaimSetName.ShouldBe(newClaimSet.ClaimSetName); - } -} diff --git a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/DeleteClaimSetCommandV53ServiceTests.cs b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/DeleteClaimSetCommandServiceTests.cs similarity index 85% rename from Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/DeleteClaimSetCommandV53ServiceTests.cs rename to Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/DeleteClaimSetCommandServiceTests.cs index b418a9bd6..e342b676c 100644 --- a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/DeleteClaimSetCommandV53ServiceTests.cs +++ b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/DeleteClaimSetCommandServiceTests.cs @@ -2,7 +2,6 @@ // Licensed to the Ed-Fi Alliance under one or more agreements. // The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. // See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; using System; using System.Linq; @@ -11,13 +10,13 @@ using EdFi.Ods.AdminApi.Infrastructure.ErrorHandling; using Moq; using Shouldly; -using ClaimSet = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.ClaimSet; -using Application = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.Application; +using ClaimSet = EdFi.Security.DataAccess.Models.ClaimSet; +using Application = EdFi.Security.DataAccess.Models.Application; namespace EdFi.Ods.AdminApi.DBTests.ClaimSetEditorTests; [TestFixture] -public class DeleteClaimSetCommandV53ServiceTests : SecurityData53TestBase +public class DeleteClaimSetCommandServiceTests : SecurityDataTestBase { [Test] @@ -32,24 +31,24 @@ public void ShouldDeleteClaimSet() var testClaimSetToDelete = new ClaimSet { ClaimSetName = "TestClaimSet_Delete", Application = testApplication }; Save(testClaimSetToDelete); - SetupParentResourceClaimsWithChildren(testClaimSetToDelete, testApplication); + SetupParentResourceClaimsWithChildren(testClaimSetToDelete, testApplication, UniqueNameList("ParentRc", 3), UniqueNameList("ChildRc", 1)); var testClaimSetToPreserve = new ClaimSet { ClaimSetName = "TestClaimSet_Preserve", Application = testApplication }; Save(testClaimSetToPreserve); - var resourceClaimsForPreservedClaimSet = SetupParentResourceClaimsWithChildren(testClaimSetToPreserve, testApplication); + var resourceClaimsForPreservedClaimSet = SetupParentResourceClaimsWithChildren(testClaimSetToPreserve, testApplication, UniqueNameList("ParentRc", 3), + UniqueNameList("ChildRc", 1)); var deleteModel = new Mock(); deleteModel.Setup(x => x.Name).Returns(testClaimSetToDelete.ClaimSetName); deleteModel.Setup(x => x.Id).Returns(testClaimSetToDelete.ClaimSetId); using var securityContext = TestContext; - var command = new DeleteClaimSetCommandV53Service(securityContext); + var command = new DeleteClaimSetCommandService(securityContext); command.Execute(deleteModel.Object); - var deletedClaimSet = securityContext.ClaimSets.SingleOrDefault(x => x.ClaimSetId == testClaimSetToDelete.ClaimSetId); deletedClaimSet.ShouldBeNull(); - var deletedClaimSetResourceActions = securityContext.ClaimSetResourceClaims.Count(x => x.ClaimSet.ClaimSetId == testClaimSetToDelete.ClaimSetId); + var deletedClaimSetResourceActions = securityContext.ClaimSetResourceClaimActions.Count(x => x.ClaimSet.ClaimSetId == testClaimSetToDelete.ClaimSetId); deletedClaimSetResourceActions.ShouldBe(0); var preservedClaimSet = securityContext.ClaimSets.Single(x => x.ClaimSetId == testClaimSetToPreserve.ClaimSetId); @@ -85,7 +84,7 @@ public void ShouldThrowExceptionOnEditSystemReservedClaimSet() }; Save(testApplication); - var systemReservedClaimSet = new ClaimSet { ClaimSetName = "SIS Vendor", Application = testApplication }; + var systemReservedClaimSet = new ClaimSet { ClaimSetName = "SIS Vendor", Application = testApplication, IsEdfiPreset = true }; Save(systemReservedClaimSet); var deleteModel = new Mock(); @@ -94,7 +93,7 @@ public void ShouldThrowExceptionOnEditSystemReservedClaimSet() using var securityContext = TestContext; var exception = Assert.Throws(() => { - var command = new DeleteClaimSetCommandV53Service(securityContext); + var command = new DeleteClaimSetCommandService(securityContext); command.Execute(deleteModel.Object); }); exception.ShouldNotBeNull(); diff --git a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/DeleteClaimSetCommandV6ServiceTests.cs b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/DeleteClaimSetCommandV6ServiceTests.cs deleted file mode 100644 index 8df77a01c..000000000 --- a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/DeleteClaimSetCommandV6ServiceTests.cs +++ /dev/null @@ -1,187 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. - -using System; -using System.Linq; -using NUnit.Framework; -using EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; -using EdFi.Ods.AdminApi.Infrastructure.ErrorHandling; -using Moq; -using Shouldly; -using ClaimSet = EdFi.Security.DataAccess.Models.ClaimSet; -using Application = EdFi.Security.DataAccess.Models.Application; - -namespace EdFi.Ods.AdminApi.DBTests.ClaimSetEditorTests; - -[TestFixture] -public class DeleteClaimSetCommandV6ServiceTests : SecurityDataTestBase -{ - - [Test] - public void ShouldDeleteClaimSet() - { - var testApplication = new Application - { - ApplicationName = $"Test Application {DateTime.Now:O}" - }; - Save(testApplication); - - var testClaimSetToDelete = new ClaimSet - { ClaimSetName = "TestClaimSet_Delete", Application = testApplication }; - Save(testClaimSetToDelete); - SetupParentResourceClaimsWithChildren(testClaimSetToDelete, testApplication, UniqueNameList("ParentRc", 3), UniqueNameList("ChildRc", 1)); - - var testClaimSetToPreserve = new ClaimSet - { ClaimSetName = "TestClaimSet_Preserve", Application = testApplication }; - Save(testClaimSetToPreserve); - var resourceClaimsForPreservedClaimSet = SetupParentResourceClaimsWithChildren(testClaimSetToPreserve, testApplication, UniqueNameList("ParentRc", 3), - UniqueNameList("ChildRc", 1)); - - var deleteModel = new Mock(); - deleteModel.Setup(x => x.Name).Returns(testClaimSetToDelete.ClaimSetName); - deleteModel.Setup(x => x.Id).Returns(testClaimSetToDelete.ClaimSetId); - - using var securityContext = TestContext; - var command = new DeleteClaimSetCommandV6Service(securityContext); - command.Execute(deleteModel.Object); - var deletedClaimSet = securityContext.ClaimSets.SingleOrDefault(x => x.ClaimSetId == testClaimSetToDelete.ClaimSetId); - deletedClaimSet.ShouldBeNull(); - var deletedClaimSetResourceActions = securityContext.ClaimSetResourceClaimActions.Count(x => x.ClaimSet.ClaimSetId == testClaimSetToDelete.ClaimSetId); - deletedClaimSetResourceActions.ShouldBe(0); - - var preservedClaimSet = securityContext.ClaimSets.Single(x => x.ClaimSetId == testClaimSetToPreserve.ClaimSetId); - preservedClaimSet.ClaimSetName.ShouldBe(testClaimSetToPreserve.ClaimSetName); - - var results = ResourceClaimsForClaimSet(testClaimSetToPreserve.ClaimSetId); - - var testParentResourceClaimsForId = - resourceClaimsForPreservedClaimSet.Where(x => x.ClaimSet.ClaimSetId == testClaimSetToPreserve.ClaimSetId && x.ResourceClaim.ParentResourceClaim == null).Select(x => x.ResourceClaim).ToArray(); - - results.Count.ShouldBe(testParentResourceClaimsForId.Length); - results.Select(x => x.Name).ShouldBe(testParentResourceClaimsForId.Select(x => x.ResourceName), true); - results.Select(x => x.Id).ShouldBe(testParentResourceClaimsForId.Select(x => x.ResourceClaimId), true); - results.All(x => x.Create).ShouldBe(true); - - foreach (var testParentResourceClaim in testParentResourceClaimsForId) - { - var testChildren = securityContext.ResourceClaims.Where(x => - x.ParentResourceClaimId == testParentResourceClaim.ResourceClaimId).ToList(); - var parentResult = results.First(x => x.Id == testParentResourceClaim.ResourceClaimId); - parentResult.Children.Select(x => x.Name).ShouldBe(testChildren.Select(x => x.ResourceName), true); - parentResult.Children.Select(x => x.Id).ShouldBe(testChildren.Select(x => x.ResourceClaimId), true); - parentResult.Children.All(x => x.Create).ShouldBe(true); - } - } - - [Test] - public void ShouldThrowExceptionOnEditSystemReservedClaimSet() - { - var testApplication = new Application - { - ApplicationName = $"Test Application {DateTime.Now:O}" - }; - Save(testApplication); - - var systemReservedClaimSet = new ClaimSet { ClaimSetName = "SIS Vendor", Application = testApplication, IsEdfiPreset = true }; - Save(systemReservedClaimSet); - - var deleteModel = new Mock(); - deleteModel.Setup(x => x.Name).Returns(systemReservedClaimSet.ClaimSetName); - deleteModel.Setup(x => x.Id).Returns(systemReservedClaimSet.ClaimSetId); - using var securityContext = TestContext; - var exception = Assert.Throws(() => - { - var command = new DeleteClaimSetCommandV6Service(securityContext); - command.Execute(deleteModel.Object); - }); - exception.ShouldNotBeNull(); - exception.Message.ShouldBe($"Claim set({systemReservedClaimSet.ClaimSetName}) is system reserved.Can not be deleted."); - } - - // TODO: move these to UnitTests, using appropriate validator from the API project - //[Test] - //public void ShouldNotDeleteClaimSetIfNotEditable() - //{ - // var testApplication = new Application - // { - // ApplicationName = "TestApplication1" - // }; - // Save(testApplication); - - // var testClaimSet = new ClaimSet {ClaimSetName = $"TestClaimSet{DateTime.Now:O}", Application = testApplication}; - // Save(testClaimSet); - - // var claimSetToDelete = new DeleteClaimSetModel() - // { - // Name = testClaimSet.ClaimSetName, - // Id = testClaimSet.ClaimSetId, - // IsEditable = false - // }; - - // using var securityContext = TestContext; - // var getClaimSetByIdQuery = ClaimSetByIdQuery(securityContext); - // var validator = new DeleteClaimSetModelValidator(getClaimSetByIdQuery); - // var validationResults = validator.Validate(claimSetToDelete); - // validationResults.IsValid.ShouldBe(false); - // validationResults.Errors.Single().ErrorMessage.ShouldBe("Only user created claim sets can be deleted"); - //} - - //[Test] - //public void ShouldNotDeleteClaimSetIfNotAnExistingId() - //{ - // var testApplication = new Application - // { - // ApplicationName = "TestApplication2" - // }; - // Save(testApplication); - - // var testClaimSet = new ClaimSet { ClaimSetName = $"TestClaimSet{DateTime.Now:O}", Application = testApplication }; - // Save(testClaimSet); - - // var claimSetToDelete = new DeleteClaimSetModel() - // { - // Name = testClaimSet.ClaimSetName, - // Id = 99, - // IsEditable = true - // }; - // using var securityContext = TestContext; - // var getClaimSetByIdQuery = ClaimSetByIdQuery(securityContext); - // var validator = new DeleteClaimSetModelValidator(getClaimSetByIdQuery); - // var validationResults = validator.Validate(claimSetToDelete); - // validationResults.IsValid.ShouldBe(false); - // validationResults.Errors.Single().ErrorMessage.ShouldBe("No such claim set exists in the database"); - //} - - //[Test] - //public void ShouldNotDeleteClaimSetHasAnAssociatedApplication() - //{ - // var testApplication = new Application - // { - // ApplicationName = "TestApplication3" - // }; - // Save(testApplication); - - // var testClaimSet = new ClaimSet { ClaimSetName = $"TestClaimSet{DateTime.Now:O}", Application = testApplication }; - // Save(testClaimSet); - - // var claimSetToDelete = new DeleteClaimSetModel() - // { - // Name = testClaimSet.ClaimSetName, - // Id = testClaimSet.ClaimSetId, - // IsEditable = true, - // VendorApplicationCount = 1 - // }; - - // using var securityContext = TestContext; - // var getClaimSetByIdQuery = ClaimSetByIdQuery(securityContext); - // var validator = new DeleteClaimSetModelValidator(getClaimSetByIdQuery); - // var validationResults = validator.Validate(claimSetToDelete); - // validationResults.IsValid.ShouldBe(false); - // validationResults.Errors.Single().ErrorMessage.ShouldBe($"Cannot delete this claim set. This claim set has {claimSetToDelete.VendorApplicationCount} associated application(s)."); - //} - - //private GetClaimSetByIdQuery ClaimSetByIdQuery(ISecurityContext securityContext) => new GetClaimSetByIdQuery(new StubOdsSecurityModelVersionResolver.V6(), - // null, new GetClaimSetByIdQueryV6Service(securityContext)); -} diff --git a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/EditClaimSetCommandV53ServiceTests.cs b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/EditClaimSetCommandServiceTests.cs similarity index 86% rename from Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/EditClaimSetCommandV53ServiceTests.cs rename to Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/EditClaimSetCommandServiceTests.cs index 8965229e5..dc6132216 100644 --- a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/EditClaimSetCommandV53ServiceTests.cs +++ b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/EditClaimSetCommandServiceTests.cs @@ -2,25 +2,24 @@ // Licensed to the Ed-Fi Alliance under one or more agreements. // The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. // See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; using System; using System.Linq; using NUnit.Framework; using EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; using Shouldly; -using Compatability::EdFi.SecurityCompatiblity53.DataAccess.Contexts; +using EdFi.Security.DataAccess.Contexts; using EdFi.Ods.AdminApi.Infrastructure.ErrorHandling; using VendorApplication = EdFi.Admin.DataAccess.Models.Application; -using ClaimSet = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.ClaimSet; -using Application = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.Application; +using ClaimSet = EdFi.Security.DataAccess.Models.ClaimSet; +using Application = EdFi.Security.DataAccess.Models.Application; using EdFi.Ods.AdminApi.Features.ClaimSets; using EdFi.Ods.AdminApi.Infrastructure; namespace EdFi.Ods.AdminApi.DBTests.ClaimSetEditorTests; [TestFixture] -public class EditClaimSetCommandV53ServiceTests : SecurityData53TestBase +public class EditClaimSetCommandServiceTests : SecurityDataTestBase { [Test] public void ShouldEditClaimSet() @@ -39,7 +38,7 @@ public void ShouldEditClaimSet() using var securityContext = TestContext; UsersTransaction((usersContext) => { - var command = new EditClaimSetCommandV53Service(securityContext, usersContext); + var command = new EditClaimSetCommandService(securityContext, usersContext); command.Execute(editModel); }); @@ -56,7 +55,7 @@ public void ShouldThrowExceptionOnEditSystemReservedClaimSet() }; Save(testApplication); - var systemReservedClaimSet = new ClaimSet { ClaimSetName = "Ed-Fi Sandbox", Application = testApplication }; + var systemReservedClaimSet = new ClaimSet { ClaimSetName = "Ed-Fi Sandbox", Application = testApplication, IsEdfiPreset = true }; Save(systemReservedClaimSet); var editModel = new EditClaimSetModel { ClaimSetName = "TestClaimSetEdited", ClaimSetId = systemReservedClaimSet.ClaimSetId }; @@ -64,7 +63,7 @@ public void ShouldThrowExceptionOnEditSystemReservedClaimSet() using var securityContext = TestContext; var exception = Assert.Throws(() => UsersTransaction(usersContext => { - var command = new EditClaimSetCommandV53Service(securityContext, usersContext); + var command = new EditClaimSetCommandService(TestContext, usersContext); command.Execute(editModel); })); exception.ShouldNotBeNull(); @@ -93,7 +92,7 @@ public void ShouldEditClaimSetWithVendorApplications() using var securityContext = TestContext; UsersTransaction(usersContext => { - var command = new EditClaimSetCommandV53Service(securityContext, usersContext); + var command = new EditClaimSetCommandService(securityContext, usersContext); command.Execute(editModel); }); @@ -101,7 +100,6 @@ public void ShouldEditClaimSetWithVendorApplications() editedClaimSet.ClaimSetName.ShouldBe(editModel.ClaimSetName); AssertApplicationsForClaimSet(claimSetToBeEdited.ClaimSetId, editModel.ClaimSetName, securityContext); - var unEditedClaimSet = securityContext.ClaimSets.Single(x => x.ClaimSetId == claimSetNotToBeEdited.ClaimSetId); unEditedClaimSet.ClaimSetName.ShouldBe(claimSetNotToBeEdited.ClaimSetName); AssertApplicationsForClaimSet(claimSetNotToBeEdited.ClaimSetId, claimSetNotToBeEdited.ClaimSetName, securityContext); @@ -129,7 +127,7 @@ private void AssertApplicationsForClaimSet(int claimSetId, string claimSetNameTo UsersTransaction( usersContext => { - var results = new GetApplicationsByClaimSetId53Query(securityContext, usersContext).Execute(claimSetId); + var results = new GetApplicationsByClaimSetIdQuery(securityContext, usersContext).Execute(claimSetId); var testApplications = usersContext.Applications.Where(x => x.ClaimSetName == claimSetNameToAssert).ToList(); results.Count().ShouldBe(testApplications.Count); results.Select(x => x.Name).ShouldBe(testApplications.Select(x => x.ApplicationName), true); diff --git a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/EditClaimSetCommandV6ServiceTests.cs b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/EditClaimSetCommandV6ServiceTests.cs deleted file mode 100644 index 67e5c5e43..000000000 --- a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/EditClaimSetCommandV6ServiceTests.cs +++ /dev/null @@ -1,211 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. - -using System; -using System.Linq; -using NUnit.Framework; -using EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; -using Shouldly; -using EdFi.Security.DataAccess.Contexts; -using EdFi.Ods.AdminApi.Infrastructure.ErrorHandling; -using VendorApplication = EdFi.Admin.DataAccess.Models.Application; -using ClaimSet = EdFi.Security.DataAccess.Models.ClaimSet; -using Application = EdFi.Security.DataAccess.Models.Application; -using EdFi.Ods.AdminApi.Features.ClaimSets; -using EdFi.Ods.AdminApi.Infrastructure; - -namespace EdFi.Ods.AdminApi.DBTests.ClaimSetEditorTests; - -[TestFixture] -public class EditClaimSetCommandV6ServiceTests : SecurityDataTestBase -{ - [Test] - public void ShouldEditClaimSet() - { - var testApplication = new Application - { - ApplicationName = $"Test Application {DateTime.Now:O}" - }; - Save(testApplication); - - var alreadyExistingClaimSet = new ClaimSet { ClaimSetName = "TestClaimSet", Application = testApplication }; - Save(alreadyExistingClaimSet); - - var editModel = new EditClaimSetModel { ClaimSetName = "TestClaimSetEdited", ClaimSetId = alreadyExistingClaimSet.ClaimSetId }; - - using var securityContext = TestContext; - UsersTransaction((usersContext) => - { - var command = new EditClaimSetCommandV6Service(securityContext, usersContext); - command.Execute(editModel); - }); - - var editedClaimSet = securityContext.ClaimSets.Single(x => x.ClaimSetId == alreadyExistingClaimSet.ClaimSetId); - editedClaimSet.ClaimSetName.ShouldBe(editModel.ClaimSetName); - } - - [Test] - public void ShouldThrowExceptionOnEditSystemReservedClaimSet() - { - var testApplication = new Application - { - ApplicationName = $"Test Application {DateTime.Now:O}" - }; - Save(testApplication); - - var systemReservedClaimSet = new ClaimSet { ClaimSetName = "Ed-Fi Sandbox", Application = testApplication, IsEdfiPreset = true }; - Save(systemReservedClaimSet); - - var editModel = new EditClaimSetModel { ClaimSetName = "TestClaimSetEdited", ClaimSetId = systemReservedClaimSet.ClaimSetId }; - - using var securityContext = TestContext; - var exception = Assert.Throws(() => UsersTransaction(usersContext => - { - var command = new EditClaimSetCommandV6Service(TestContext, usersContext); - command.Execute(editModel); - })); - exception.ShouldNotBeNull(); - exception.Message.ShouldBe($"Claim set ({systemReservedClaimSet.ClaimSetName}) is system reserved.May not be modified."); - } - - [Test] - public void ShouldEditClaimSetWithVendorApplications() - { - var testApplication = new Application - { - ApplicationName = $"Test Application {DateTime.Now:O}" - }; - Save(testApplication); - - var claimSetToBeEdited = new ClaimSet { ClaimSetName = $"TestClaimSet{Guid.NewGuid():N}", Application = testApplication }; - Save(claimSetToBeEdited); - SetupVendorApplicationsForClaimSet(claimSetToBeEdited); - - var claimSetNotToBeEdited = new ClaimSet { ClaimSetName = $"TestClaimSet{Guid.NewGuid():N}", Application = testApplication }; - Save(claimSetNotToBeEdited); - SetupVendorApplicationsForClaimSet(claimSetNotToBeEdited); - - var editModel = new EditClaimSetModel { ClaimSetName = "TestClaimSetEdited", ClaimSetId = claimSetToBeEdited.ClaimSetId }; - - using var securityContext = TestContext; - UsersTransaction(usersContext => - { - var command = new EditClaimSetCommandV6Service(securityContext, usersContext); - command.Execute(editModel); - }); - - var editedClaimSet = securityContext.ClaimSets.Single(x => x.ClaimSetId == claimSetToBeEdited.ClaimSetId); - editedClaimSet.ClaimSetName.ShouldBe(editModel.ClaimSetName); - AssertApplicationsForClaimSet(claimSetToBeEdited.ClaimSetId, editModel.ClaimSetName, securityContext); - - var unEditedClaimSet = securityContext.ClaimSets.Single(x => x.ClaimSetId == claimSetNotToBeEdited.ClaimSetId); - unEditedClaimSet.ClaimSetName.ShouldBe(claimSetNotToBeEdited.ClaimSetName); - AssertApplicationsForClaimSet(claimSetNotToBeEdited.ClaimSetId, claimSetNotToBeEdited.ClaimSetName, securityContext); - } - - private void SetupVendorApplicationsForClaimSet(ClaimSet testClaimSet, int applicationCount = 5) - { - UsersTransaction(usersContext => - { - foreach (var _ in Enumerable.Range(1, applicationCount)) - { - usersContext.Applications.Add(new VendorApplication - { - ApplicationName = $"TestAppVendorName{Guid.NewGuid():N}", - ClaimSetName = testClaimSet.ClaimSetName, - OperationalContextUri = OperationalContext.DefaultOperationalContextUri - }); - } - usersContext.SaveChanges(); - }); - } - - private void AssertApplicationsForClaimSet(int claimSetId, string claimSetNameToAssert, ISecurityContext securityContext) - { - UsersTransaction( - usersContext => - { - var results = new GetApplicationsByClaimSetIdQuery(securityContext, usersContext).Execute(claimSetId); - var testApplications = usersContext.Applications.Where(x => x.ClaimSetName == claimSetNameToAssert).ToList(); - results.Count().ShouldBe(testApplications.Count); - results.Select(x => x.Name).ShouldBe(testApplications.Select(x => x.ApplicationName), true); - }); - } - - // TODO: move these to UnitTests, using appropriate validator from the API project - //[Test] - //public void ShouldNotEditClaimSetIfNameNotUnique() - //{ - // var testApplication = new Application - // { - // ApplicationName = $"Test Application {DateTime.Now:O}" - // }; - // Save(testApplication); - - // var alreadyExistingClaimSet = new ClaimSet { ClaimSetName = "TestClaimSet1", Application = testApplication }; - // Save(alreadyExistingClaimSet); - - // var testClaimSet = new ClaimSet { ClaimSetName = "TestClaimSet2", Application = testApplication }; - // Save(testClaimSet); - - // var editModel = new EditClaimSetModel { ClaimSetName = "TestClaimSet1", ClaimSetId = testClaimSet.ClaimSetId }; - - // using var securityContext = TestContext; - // var validator = new EditClaimSetModelValidator(AllClaimSetsQuery(securityContext), - // ClaimSetByIdQuery(securityContext)); - // var validationResults = validator.Validate(editModel); - // validationResults.IsValid.ShouldBe(false); - // validationResults.Errors.Single().ErrorMessage.ShouldBe("A claim set with this name already exists in the database. Please enter a unique name."); - //} - - //[Test] - //public void ShouldNotEditClaimSetIfNameEmpty() - //{ - // var testApplication = new Application - // { - // ApplicationName = $"Test Application {DateTime.Now:O}" - // }; - // Save(testApplication); - - // var testClaimSet = new ClaimSet { ClaimSetName = "TestClaimSet1", Application = testApplication }; - // Save(testClaimSet); - - // var editModel = new EditClaimSetModel { ClaimSetName = "", ClaimSetId = testClaimSet.ClaimSetId }; - - // using var securityContext = TestContext; - // var validator = new EditClaimSetModelValidator(AllClaimSetsQuery(securityContext), - // ClaimSetByIdQuery(securityContext)); - // var validationResults = validator.Validate(editModel); - // validationResults.IsValid.ShouldBe(false); - // validationResults.Errors.Single().ErrorMessage.ShouldBe("'Claim Set Name' must not be empty."); - //} - - //[Test] - //public void ShouldNotEditClaimSetIfNameLengthGreaterThan255Characters() - //{ - // var testApplication = new Application - // { - // ApplicationName = $"Test Application {DateTime.Now:O}" - // }; - // Save(testApplication); - - // var testClaimSet = new ClaimSet { ClaimSetName = "TestClaimSet1", Application = testApplication }; - // Save(testClaimSet); - - // var editModel = new EditClaimSetModel { ClaimSetName = "ThisIsAClaimSetWithNameLengthGreaterThan255CharactersThisIsAClaimSetWithNameLengthGreaterThan255CharactersThisIsAClaimSetWithNameLengthGreaterThan255CharactersThisIsAClaimSetWithNameLengthGreaterThan255CharactersThisIsAClaimSetWithNameLengthGreaterThan255CharactersThisIsAClaimSetWithNameLengthGreaterThan255Characters", ClaimSetId = testClaimSet.ClaimSetId }; - - // using var securityContext = TestContext; - // var validator = new EditClaimSetModelValidator(AllClaimSetsQuery(securityContext), - // ClaimSetByIdQuery(securityContext)); - // var validationResults = validator.Validate(editModel); - // validationResults.IsValid.ShouldBe(false); - // validationResults.Errors.Single().ErrorMessage.ShouldBe("The claim set name must be less than 255 characters."); - //} - - //private GetClaimSetByIdQuery ClaimSetByIdQuery(ISecurityContext securityContext) => new GetClaimSetByIdQuery(new StubOdsSecurityModelVersionResolver.V6(), - // null, new GetClaimSetByIdQueryV6Service(securityContext)); - - //private IGetAllClaimSetsQuery AllClaimSetsQuery(ISecurityContext securityContext) => new GetAllClaimSetsQuery(securityContext); -} diff --git a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/EditResourceOnClaimSetCommandV6ServiceTests.cs b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/EditResourceOnClaimSetCommandServiceTests.cs similarity index 96% rename from Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/EditResourceOnClaimSetCommandV6ServiceTests.cs rename to Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/EditResourceOnClaimSetCommandServiceTests.cs index 45364bf09..1837366d0 100644 --- a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/EditResourceOnClaimSetCommandV6ServiceTests.cs +++ b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/EditResourceOnClaimSetCommandServiceTests.cs @@ -16,7 +16,7 @@ namespace EdFi.Ods.AdminApi.DBTests.ClaimSetEditorTests; [TestFixture] -public class EditResourceOnClaimSetCommandV6ServiceTests : SecurityDataTestBase +public class EditResourceOnClaimSetCommandServiceTests : SecurityDataTestBase { [Test] public void ShouldEditParentResourcesOnClaimSet() @@ -43,7 +43,7 @@ public void ShouldEditParentResourcesOnClaimSet() Create = false, Read = false, Update = true, - Delete = true, + Delete = true, ReadChanges = true }; @@ -52,7 +52,7 @@ public void ShouldEditParentResourcesOnClaimSet() editResourceOnClaimSetModel.Setup(x => x.ResourceClaim).Returns(editedResource); using var securityContext = TestContext; - var command = new EditResourceOnClaimSetCommandV6Service(securityContext); + var command = new EditResourceOnClaimSetCommandService(securityContext); command.Execute(editResourceOnClaimSetModel.Object); var resourceClaimsForClaimSet = ResourceClaimsForClaimSet(testClaimSet.ClaimSetId); @@ -105,7 +105,7 @@ public void ShouldEditChildResourcesOnClaimSet() Create = false, Read = false, Update = true, - Delete = true, + Delete = true, ReadChanges = true }; @@ -113,7 +113,7 @@ public void ShouldEditChildResourcesOnClaimSet() editResourceOnClaimSetModel.Setup(x => x.ClaimSetId).Returns(testClaimSet.ClaimSetId); editResourceOnClaimSetModel.Setup(x => x.ResourceClaim).Returns(editedResource); - var command = new EditResourceOnClaimSetCommandV6Service(securityContext); + var command = new EditResourceOnClaimSetCommandService(securityContext); command.Execute(editResourceOnClaimSetModel.Object); var resourceClaimsForClaimSet = ResourceClaimsForClaimSet(testClaimSet.ClaimSetId); @@ -167,7 +167,7 @@ public void ShouldAddParentResourceToClaimSet() Create = true, Read = false, Update = true, - Delete = false, + Delete = false, ReadChanges = false }; var existingResources = ResourceClaimsForClaimSet(testClaimSet.ClaimSetId); @@ -179,7 +179,7 @@ public void ShouldAddParentResourceToClaimSet() }; using var securityContext = TestContext; - var command = new EditResourceOnClaimSetCommandV6Service(securityContext); + var command = new EditResourceOnClaimSetCommandService(securityContext); command.Execute(editResourceOnClaimSetModel); var resourceClaimsForClaimSet = ResourceClaimsForClaimSet(testClaimSet.ClaimSetId); @@ -221,7 +221,7 @@ public void ShouldAddChildResourcesToClaimSet() Create = true, Read = false, Update = true, - Delete = false, + Delete = false, ReadChanges = false }; var existingResources = ResourceClaimsForClaimSet(testClaimSet.ClaimSetId); @@ -232,7 +232,7 @@ public void ShouldAddChildResourcesToClaimSet() ResourceClaim = resourceToAdd }; - var command = new EditResourceOnClaimSetCommandV6Service(securityContext); + var command = new EditResourceOnClaimSetCommandService(securityContext); command.Execute(editResourceOnClaimSetModel); var resourceClaimsForClaimSet = ResourceClaimsForClaimSet(testClaimSet.ClaimSetId); diff --git a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/EditResourceOnClaimSetCommandV53ServiceTests.cs b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/EditResourceOnClaimSetCommandV53ServiceTests.cs deleted file mode 100644 index 7394caf57..000000000 --- a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/EditResourceOnClaimSetCommandV53ServiceTests.cs +++ /dev/null @@ -1,227 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; - -using System; -using System.Linq; -using NUnit.Framework; -using EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; -using Shouldly; -using Moq; -using Application = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.Application; -using ClaimSet = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.ClaimSet; -using ResourceClaim = EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor.ResourceClaim; - -namespace EdFi.Ods.AdminApi.DBTests.ClaimSetEditorTests; - -[TestFixture] -public class EditResourceOnClaimSetCommandV53ServiceTests : SecurityData53TestBase -{ - [Test] - public void ShouldEditParentResourcesOnClaimSet() - { - var testApplication = new Application - { - ApplicationName = $"Test Application {DateTime.Now:O}" - }; - Save(testApplication); - - var testClaimSet = new ClaimSet { ClaimSetName = "TestClaimSet", Application = testApplication }; - Save(testClaimSet); - - var testResources = SetupParentResourceClaimsWithChildren(testClaimSet, testApplication); - - var testResource1ToEdit = testResources.Select(x => x.ResourceClaim).Single(x => x.ResourceName == "TestParentResourceClaim1"); - var testResource2ToNotEdit = testResources.Select(x => x.ResourceClaim).Single(x => x.ResourceName == "TestParentResourceClaim2"); - - var editedResource = new ResourceClaim - { - Id = testResource1ToEdit.ResourceClaimId, - Name = testResource1ToEdit.ResourceName, - Create = false, - Read = false, - Update = true, - Delete = true - }; - - var editResourceOnClaimSetModel = new Mock(); - editResourceOnClaimSetModel.Setup(x => x.ClaimSetId).Returns(testClaimSet.ClaimSetId); - editResourceOnClaimSetModel.Setup(x => x.ResourceClaim).Returns(editedResource); - - using var securityContext = TestContext; - var command = new EditResourceOnClaimSetCommandV53Service(securityContext); - command.Execute(editResourceOnClaimSetModel.Object); - - var resourceClaimsForClaimSet = ResourceClaimsForClaimSet(testClaimSet.ClaimSetId); - - var resultResourceClaim1 = resourceClaimsForClaimSet.Single(x => x.Id == editedResource.Id); - - resultResourceClaim1.Create.ShouldBe(editedResource.Create); - resultResourceClaim1.Read.ShouldBe(editedResource.Read); - resultResourceClaim1.Update.ShouldBe(editedResource.Update); - resultResourceClaim1.Delete.ShouldBe(editedResource.Delete); - - var resultResourceClaim2 = resourceClaimsForClaimSet.Single(x => x.Id == testResource2ToNotEdit.ResourceClaimId); - - resultResourceClaim2.Create.ShouldBe(true); - resultResourceClaim2.Read.ShouldBe(false); - resultResourceClaim2.Update.ShouldBe(false); - resultResourceClaim2.Delete.ShouldBe(false); - } - - [Test] - public void ShouldEditChildResourcesOnClaimSet() - { - var testApplication = new Application - { - ApplicationName = $"Test Application {DateTime.Now:O}" - }; - Save(testApplication); - - var testClaimSet = new ClaimSet { ClaimSetName = "TestClaimSet", Application = testApplication }; - Save(testClaimSet); - - var testResources = SetupParentResourceClaimsWithChildren(testClaimSet, testApplication); - - var testParentResource = testResources.Single(x => x.ResourceClaim.ResourceName == "TestParentResourceClaim1"); - - using var securityContext = TestContext; - var testChildResource1ToEdit = securityContext.ResourceClaims.Single(x => x.ResourceName == "TestChildResourceClaim1" && x.ParentResourceClaimId == testParentResource.ResourceClaim.ResourceClaimId); - var testChildResource2NotToEdit = securityContext.ResourceClaims.Single(x => x.ResourceName == "TestChildResourceClaim2" && x.ParentResourceClaimId == testParentResource.ResourceClaim.ResourceClaimId); - - var editedResource = new ResourceClaim - { - Id = testChildResource1ToEdit.ResourceClaimId, - Name = testChildResource1ToEdit.ResourceName, - Create = false, - Read = false, - Update = true, - Delete = true - }; - - var editResourceOnClaimSetModel = new Mock(); - editResourceOnClaimSetModel.Setup(x => x.ClaimSetId).Returns(testClaimSet.ClaimSetId); - editResourceOnClaimSetModel.Setup(x => x.ResourceClaim).Returns(editedResource); - - var command = new EditResourceOnClaimSetCommandV53Service(securityContext); - command.Execute(editResourceOnClaimSetModel.Object); - - var resourceClaimsForClaimSet = ResourceClaimsForClaimSet(testClaimSet.ClaimSetId); - - var resultParentResourceClaim = resourceClaimsForClaimSet.Single(x => x.Id == testParentResource.ResourceClaim.ResourceClaimId); - resultParentResourceClaim.Create.ShouldBe(true); - resultParentResourceClaim.Read.ShouldBe(false); - resultParentResourceClaim.Update.ShouldBe(false); - resultParentResourceClaim.Delete.ShouldBe(false); - - var resultChildResourceClaim1 = - resultParentResourceClaim.Children.Single(x => x.Id == editedResource.Id); - - resultChildResourceClaim1.Create.ShouldBe(editedResource.Create); - resultChildResourceClaim1.Read.ShouldBe(editedResource.Read); - resultChildResourceClaim1.Update.ShouldBe(editedResource.Update); - resultChildResourceClaim1.Delete.ShouldBe(editedResource.Delete); - - var resultChildResourceClaim2 = - resultParentResourceClaim.Children.Single(x => x.Id == testChildResource2NotToEdit.ResourceClaimId); - - resultChildResourceClaim2.Create.ShouldBe(true); - resultChildResourceClaim2.Read.ShouldBe(false); - resultChildResourceClaim2.Update.ShouldBe(false); - resultChildResourceClaim2.Delete.ShouldBe(false); - } - - [Test] - public void ShouldAddParentResourceToClaimSet() - { - var testApplication = new Application - { - ApplicationName = $"Test Application {DateTime.Now:O}" - }; - Save(testApplication); - - var testClaimSet = new ClaimSet { ClaimSetName = "TestClaimSet", Application = testApplication }; - Save(testClaimSet); - - var testResources = SetupResourceClaims(testApplication); - var testResourceToAdd = testResources.Single(x => x.ResourceName == "TestParentResourceClaim1"); - var resourceToAdd = new ResourceClaim() - { - Id = testResourceToAdd.ResourceClaimId, - Name = testResourceToAdd.ResourceName, - Create = true, - Read = false, - Update = true, - Delete = false - }; - var existingResources = ResourceClaimsForClaimSet(testClaimSet.ClaimSetId); - - var editResourceOnClaimSetModel = new EditResourceOnClaimSetModel - { - ClaimSetId = testClaimSet.ClaimSetId, - ResourceClaim = resourceToAdd - }; - - using var securityContext = TestContext; - var command = new EditResourceOnClaimSetCommandV53Service(securityContext); - command.Execute(editResourceOnClaimSetModel); - - var resourceClaimsForClaimSet = ResourceClaimsForClaimSet(testClaimSet.ClaimSetId); - - var resultResourceClaim1 = resourceClaimsForClaimSet.Single(x => x.Name == testResourceToAdd.ResourceName); - - resultResourceClaim1.Create.ShouldBe(resourceToAdd.Create); - resultResourceClaim1.Read.ShouldBe(resourceToAdd.Read); - resultResourceClaim1.Update.ShouldBe(resourceToAdd.Update); - resultResourceClaim1.Delete.ShouldBe(resourceToAdd.Delete); - } - - [Test] - public void ShouldAddChildResourcesToClaimSet() - { - var testApplication = new Application - { - ApplicationName = $"Test Application {DateTime.Now:O}" - }; - Save(testApplication); - - var testClaimSet = new ClaimSet { ClaimSetName = "TestClaimSet", Application = testApplication }; - Save(testClaimSet); - - var testResources = SetupResourceClaims(testApplication); - var testParentResource1 = testResources.Single(x => x.ResourceName == "TestParentResourceClaim1"); - - using var securityContext = TestContext; - var testChildResource1ToAdd = securityContext.ResourceClaims.Single(x => x.ResourceName == "TestChildResourceClaim1" && x.ParentResourceClaimId == testParentResource1.ResourceClaimId); - var resourceToAdd = new ResourceClaim() - { - Id = testChildResource1ToAdd.ResourceClaimId, - Name = testChildResource1ToAdd.ResourceName, - Create = true, - Read = false, - Update = true, - Delete = false - }; - var existingResources = ResourceClaimsForClaimSet(testClaimSet.ClaimSetId); - - var editResourceOnClaimSetModel = new EditResourceOnClaimSetModel - { - ClaimSetId = testClaimSet.ClaimSetId, - ResourceClaim = resourceToAdd - }; - var command = new EditResourceOnClaimSetCommandV53Service(securityContext); - command.Execute(editResourceOnClaimSetModel); - - var resourceClaimsForClaimSet = ResourceClaimsForClaimSet(testClaimSet.ClaimSetId); - - var resultChildResourceClaim1 = - resourceClaimsForClaimSet.Single(x => x.Name == testChildResource1ToAdd.ResourceName); - - resultChildResourceClaim1.Create.ShouldBe(resourceToAdd.Create); - resultChildResourceClaim1.Read.ShouldBe(resourceToAdd.Read); - resultChildResourceClaim1.Update.ShouldBe(resourceToAdd.Update); - resultChildResourceClaim1.Delete.ShouldBe(resourceToAdd.Delete); - } -} diff --git a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetAllClaimSetsQueryV6ServiceTests.cs b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetAllClaimSetsQueryServiceTests.cs similarity index 86% rename from Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetAllClaimSetsQueryV6ServiceTests.cs rename to Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetAllClaimSetsQueryServiceTests.cs index 259bab1af..a8211c492 100644 --- a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetAllClaimSetsQueryV6ServiceTests.cs +++ b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetAllClaimSetsQueryServiceTests.cs @@ -15,9 +15,9 @@ namespace EdFi.Ods.AdminApi.DBTests.ClaimSetEditorTests; [TestFixture] -public class GetAllClaimSetsQueryV6ServiceTests : SecurityDataTestBase +public class GetAllClaimSetsQueryServiceTests : SecurityDataTestBase { - public GetAllClaimSetsQueryV6ServiceTests() + public GetAllClaimSetsQueryServiceTests() { SeedSecurityContextOnFixtureSetup = true; } @@ -37,7 +37,7 @@ public void Should_Retrieve_ClaimSetNames() var claimSetNames = Transaction(securityContext => { - var query = new GetAllClaimSetsQueryV6Service(securityContext, Testing.GetAppSettings()); + var query = new GetAllClaimSetsQueryService(securityContext, Testing.GetAppSettings()); return query.Execute().Select(x => x.Name).ToArray(); }); @@ -60,7 +60,7 @@ public void Should_Retrieve_EdfiPreset_ClaimSet() var claimSets = Transaction(securityContext => { - var query = new GetAllClaimSetsQueryV6Service(securityContext, Testing.GetAppSettings()); + var query = new GetAllClaimSetsQueryService(securityContext, Testing.GetAppSettings()); return query.Execute().ToArray(); }); @@ -88,7 +88,7 @@ public void Should_Retrieve_ClaimSetNames_with_offset_and_limit() var commonQueryParams = new CommonQueryParams(0, 2); var claimSetNames = Transaction(securityContext => { - var query = new GetAllClaimSetsQueryV6Service(securityContext, Testing.GetAppSettings()); + var query = new GetAllClaimSetsQueryService(securityContext, Testing.GetAppSettings()); return query.Execute(commonQueryParams).Select(x => x.Name).ToArray(); }); @@ -99,7 +99,7 @@ public void Should_Retrieve_ClaimSetNames_with_offset_and_limit() commonQueryParams.Offset = 2; claimSetNames = Transaction(securityContext => { - var query = new GetAllClaimSetsQueryV6Service(securityContext, Testing.GetAppSettings()); + var query = new GetAllClaimSetsQueryService(securityContext, Testing.GetAppSettings()); return query.Execute(commonQueryParams).Select(x => x.Name).ToArray(); }); @@ -110,7 +110,7 @@ public void Should_Retrieve_ClaimSetNames_with_offset_and_limit() commonQueryParams.Offset = 4; claimSetNames = Transaction(securityContext => { - var query = new GetAllClaimSetsQueryV6Service(securityContext, Testing.GetAppSettings()); + var query = new GetAllClaimSetsQueryService(securityContext, Testing.GetAppSettings()); return query.Execute(commonQueryParams).Select(x => x.Name).ToArray(); }); diff --git a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetAllClaimSetsQueryV53ServiceTests.cs b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetAllClaimSetsQueryV53ServiceTests.cs deleted file mode 100644 index f5e122e13..000000000 --- a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetAllClaimSetsQueryV53ServiceTests.cs +++ /dev/null @@ -1,109 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; - -using System; -using System.Linq; -using EdFi.Ods.AdminApi.Infrastructure.Services.ClaimSetEditor; -using NUnit.Framework; -using Shouldly; - -using ClaimSet = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.ClaimSet; -using Application = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.Application; -using EdFi.Ods.AdminApi.Infrastructure; - -namespace EdFi.Ods.AdminApi.DBTests.ClaimSetEditorTests; - -[TestFixture] -public class GetAllClaimSetsQueryV53ServiceTests : SecurityData53TestBase -{ - public GetAllClaimSetsQueryV53ServiceTests() - { - SeedSecurityContextOnFixtureSetup = true; - } - - [Test] - public void Should_Retrieve_ClaimSetNames() - { - var application = new Application - { - ApplicationName = $"Test Application {DateTime.Now:O}" - }; - Save(application); - - var claimSet1 = GetClaimSet(application); - var claimSet2 = GetClaimSet(application); - Save(claimSet1, claimSet2); - - var claimSetNames = Transaction(securityContext => - { - var query = new GetAllClaimSetsQueryV53Service(securityContext, Testing.GetAppSettings()); - return query.Execute().Select(x => x.Name).ToArray(); - }); - - claimSetNames.ShouldContain(claimSet1.ClaimSetName); - claimSetNames.ShouldContain(claimSet2.ClaimSetName); - } - - [Test] - public void Should_Retrieve_ClaimSetNames_with_offset_and_limit() - { - var application = new Application - { - ApplicationName = $"Test Application {DateTime.Now:O}" - }; - Save(application); - - var claimSet1 = GetClaimSet(application); - var claimSet2 = GetClaimSet(application); - var claimSet3 = GetClaimSet(application); - var claimSet4 = GetClaimSet(application); - var claimSet5 = GetClaimSet(application); - - Save(claimSet1, claimSet2, claimSet3, claimSet4, claimSet5); - - var commonQueryParams = new CommonQueryParams(0, 2); - var claimSetNames = Transaction(securityContext => - { - var query = new GetAllClaimSetsQueryV53Service(securityContext, Testing.GetAppSettings()); - return query.Execute(commonQueryParams).Select(x => x.Name).ToArray(); - }); - - claimSetNames.Length.ShouldBe(2); - claimSetNames.ShouldContain(claimSet1.ClaimSetName); - claimSetNames.ShouldContain(claimSet2.ClaimSetName); - - commonQueryParams.Offset = 2; - claimSetNames = Transaction(securityContext => - { - var query = new GetAllClaimSetsQueryV53Service(securityContext, Testing.GetAppSettings()); - return query.Execute(commonQueryParams).Select(x => x.Name).ToArray(); - }); - - claimSetNames.Length.ShouldBe(2); - claimSetNames.ShouldContain(claimSet3.ClaimSetName); - claimSetNames.ShouldContain(claimSet4.ClaimSetName); - - commonQueryParams.Offset = 4; - claimSetNames = Transaction(securityContext => - { - var query = new GetAllClaimSetsQueryV53Service(securityContext, Testing.GetAppSettings()); - return query.Execute(commonQueryParams).Select(x => x.Name).ToArray(); - }); - - claimSetNames.Length.ShouldBe(1); - claimSetNames.ShouldContain(claimSet5.ClaimSetName); - } - - private static int _claimSetId = 0; - private static ClaimSet GetClaimSet(Application application) - { - return new ClaimSet - { - Application = application, - ClaimSetName = $"Test Claim Set {_claimSetId++} - {DateTime.Now:O}" - }; - } -} diff --git a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetApplicationsByClaimSetId53Query.cs b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetApplicationsByClaimSetId53Query.cs deleted file mode 100644 index 513a569c6..000000000 --- a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetApplicationsByClaimSetId53Query.cs +++ /dev/null @@ -1,65 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; - -using System.Collections.Generic; -using System.Linq; -using EdFi.Admin.DataAccess.Contexts; -using EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; -using Compatability::EdFi.SecurityCompatiblity53.DataAccess.Contexts; - -namespace EdFi.Ods.AdminApi.DBTests.ClaimSetEditorTests; - -/// -/// Compatibility copy of EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor.GetApplicationsByClaimSetIdQuery -/// -/// Since the projected ClaimSet does not include the new columns from v6.1, this query does not -/// require multiple versions. However, in order to preserve consistent test results, we must -/// construct dependent services using a query against the same database. -/// -internal class GetApplicationsByClaimSetId53Query : IGetApplicationsByClaimSetIdQuery -{ - private readonly ISecurityContext _securityContext; - private readonly IUsersContext _usersContext; - - public GetApplicationsByClaimSetId53Query(ISecurityContext securityContext, IUsersContext usersContext) - { - _securityContext = securityContext; - _usersContext = usersContext; - } - - public IEnumerable Execute(int securityContextClaimSetId) - { - var claimSetName = GetClaimSetNameById(securityContextClaimSetId); - - return GetApplicationsByClaimSetName(claimSetName); - } - - private string GetClaimSetNameById(int claimSetId) - { - return _securityContext.ClaimSets - .Select(x => new { x.ClaimSetId, x.ClaimSetName }) - .Single(x => x.ClaimSetId == claimSetId).ClaimSetName; - } - - private IEnumerable GetApplicationsByClaimSetName(string claimSetName) - { - return _usersContext.Applications - .Where(x => x.ClaimSetName == claimSetName) - .OrderBy(x => x.ClaimSetName) - .Select(x => new Application - { - Name = x.ApplicationName, - VendorName = x.Vendor.VendorName - }) - .ToList(); - } - - public int ExecuteCount(int claimSetId) - { - return Execute(claimSetId).Count(); - } -} - diff --git a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetApplicationsByClaimSetIdQueryV6ServiceTests.cs b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetApplicationsByClaimSetIdQueryServiceTests.cs similarity index 98% rename from Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetApplicationsByClaimSetIdQueryV6ServiceTests.cs rename to Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetApplicationsByClaimSetIdQueryServiceTests.cs index 5fc304524..3a7227f5c 100644 --- a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetApplicationsByClaimSetIdQueryV6ServiceTests.cs +++ b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetApplicationsByClaimSetIdQueryServiceTests.cs @@ -17,7 +17,7 @@ namespace EdFi.Ods.AdminApi.DBTests.ClaimSetEditorTests; [TestFixture] -public class GetApplicationsByClaimSetIdQueryV6ServiceTests : SecurityDataTestBase +public class GetApplicationsByClaimSetIdQueryServiceTests : SecurityDataTestBase { [TestCase(1)] [TestCase(3)] diff --git a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetApplicationsByClaimSetIdQueryV53ServiceTests.cs b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetApplicationsByClaimSetIdQueryV53ServiceTests.cs deleted file mode 100644 index 9a4f76254..000000000 --- a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetApplicationsByClaimSetIdQueryV53ServiceTests.cs +++ /dev/null @@ -1,123 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; - -using System; -using System.Collections.Generic; -using System.Linq; -using NUnit.Framework; -using Shouldly; -using Application = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.Application; -using ClaimSet = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.ClaimSet; -using VendorApplication = EdFi.Admin.DataAccess.Models.Application; -using ClaimSetEditor = EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; -using EdFi.Ods.AdminApi.Infrastructure; - -namespace EdFi.Ods.AdminApi.DBTests.ClaimSetEditorTests; - -[TestFixture] -public class GetApplicationsByClaimSetIdQueryV53ServiceTests : SecurityData53TestBase -{ - [TestCase(1)] - [TestCase(3)] - [TestCase(5)] - public void ShouldGetApplicationsByClaimSetId(int applicationCount) - { - var testClaimSets = SetupApplicationWithClaimSets(); - - SetupApplications(testClaimSets, applicationCount); - - using var securityContext = TestContext; - - foreach (var testClaimSet in testClaimSets) - { - List results = null; - - UsersTransaction(usersContext => - { - var query = new GetApplicationsByClaimSetId53Query(securityContext, usersContext); - results = query.Execute(testClaimSet.ClaimSetId).ToList(); - - var testApplications = - usersContext.Applications.Where(x => x.ClaimSetName == testClaimSet.ClaimSetName).Select(x => new Application - { - ApplicationName = x.ApplicationName, - ApplicationId = x.ApplicationId - }).ToArray(); - results.Count.ShouldBe(testApplications.Length); - results.Select(x => x.Name).ShouldBe(testApplications.Select(x => x.ApplicationName), true); - }); - } - } - - - [TestCase(1)] - [TestCase(5)] - public void ShouldGetClaimSetApplicationsCount(int applicationsCount) - { - var testClaimSets = SetupApplicationWithClaimSets(); - - SetupApplications(testClaimSets, applicationsCount); - using var securityContext = TestContext; - foreach (var testClaimSet in testClaimSets) - { - UsersTransaction(usersContext => - { - var query = new GetApplicationsByClaimSetId53Query(securityContext, usersContext); - var appsCountByClaimSet = query.ExecuteCount(testClaimSet.ClaimSetId); - var testApplicationsCount = - usersContext.Applications.Count(x => x.ClaimSetName == testClaimSet.ClaimSetName); - appsCountByClaimSet.ShouldBe(testApplicationsCount); - }); - } - } - - private IReadOnlyCollection SetupApplicationWithClaimSets( - string applicationName = "TestApplicationName", int claimSetCount = 5) - { - var testApplication = new Application - { - ApplicationName = applicationName - }; - - Save(testApplication); - - var testClaimSetNames = Enumerable.Range(1, claimSetCount) - .Select((x, index) => $"TestClaimSetName{index:N}") - .ToArray(); - - var testClaimSets = testClaimSetNames - .Select(x => new ClaimSet - { - ClaimSetName = x, - Application = testApplication - }) - .ToArray(); - - Save(testClaimSets.Cast().ToArray()); - - return testClaimSets; - } - - private void SetupApplications(IEnumerable testClaimSets, int applicationCount = 5) - { - UsersTransaction(usersContext => - { - foreach (var claimSet in testClaimSets) - { - foreach (var _ in Enumerable.Range(1, applicationCount)) - { - usersContext.Applications.Add(new VendorApplication - { - ApplicationName = $"TestAppVendorName{Guid.NewGuid():N}", - ClaimSetName = claimSet.ClaimSetName, - OperationalContextUri = OperationalContext.DefaultOperationalContextUri - }); - } - } - usersContext.SaveChanges(); - }); - } -} diff --git a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetClaimSetByIdQueryV6ServiceTests.cs b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetClaimSetByIdQueryServiceTests.cs similarity index 92% rename from Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetClaimSetByIdQueryV6ServiceTests.cs rename to Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetClaimSetByIdQueryServiceTests.cs index 2ff5bcdf8..de877a3ee 100644 --- a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetClaimSetByIdQueryV6ServiceTests.cs +++ b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetClaimSetByIdQueryServiceTests.cs @@ -17,7 +17,7 @@ namespace EdFi.Ods.AdminApi.DBTests.ClaimSetEditorTests; [TestFixture] -public class GetClaimSetByIdQueryV6ServiceTests : SecurityDataTestBase +public class GetClaimSetByIdQueryServiceTests : SecurityDataTestBase { [Test] public void ShouldGetClaimSetById() @@ -38,7 +38,7 @@ public void ShouldGetClaimSetById() Save(testClaimSet); using var securityContext = TestContext; - var query = new GetClaimSetByIdQueryV6Service(securityContext); + var query = new GetClaimSetByIdQueryService(securityContext); var result = query.Execute(testClaimSet.ClaimSetId); result.Name.ShouldBe(testClaimSet.ClaimSetName); result.Id.ShouldBe(testClaimSet.ClaimSetId); @@ -72,7 +72,7 @@ public void ShouldGetNonEditableClaimSetById() Save(edfiPresetClaimSet); using var securityContext = TestContext; - var query = new GetClaimSetByIdQueryV6Service(securityContext); + var query = new GetClaimSetByIdQueryService(securityContext); var result = query.Execute(systemReservedClaimSet.ClaimSetId); result.Name.ShouldBe(systemReservedClaimSet.ClaimSetName); result.Id.ShouldBe(systemReservedClaimSet.ClaimSetId); @@ -95,7 +95,7 @@ public void ShouldThrowExceptionForNonExistingClaimSetId() var adminApiException = Assert.Throws(() => { - var query = new GetClaimSetByIdQueryV6Service(securityContext); + var query = new GetClaimSetByIdQueryService(securityContext); query.Execute(NonExistingClaimSetId); }); adminApiException.ShouldNotBeNull(); diff --git a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetClaimSetByIdQueryV53ServiceTests.cs b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetClaimSetByIdQueryV53ServiceTests.cs deleted file mode 100644 index 6b48973d4..000000000 --- a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetClaimSetByIdQueryV53ServiceTests.cs +++ /dev/null @@ -1,65 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; - -using System; -using NUnit.Framework; -using Shouldly; -using EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; -using EdFi.Ods.AdminApi.Infrastructure.ErrorHandling; -using System.Net; -using Compatability::EdFi.SecurityCompatiblity53.DataAccess.Contexts; - -using ClaimSet = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.ClaimSet; -using Application = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.Application; - -namespace EdFi.Ods.AdminApi.DBTests.ClaimSetEditorTests; - -[TestFixture] -public class GetClaimSetByIdQueryV53ServiceTests : SecurityData53TestBase -{ - [Test] - public void ShouldGetClaimSetById() - { - var testApplication = new Application - { - ApplicationName = $"Test Application {DateTime.Now:O}" - }; - Save(testApplication); - - var testClaimSet = new ClaimSet { ClaimSetName = "TestClaimSet", Application = testApplication }; - Save(testClaimSet); - - using var securityContext = TestContext; - var query = new GetClaimSetByIdQueryV53Service(securityContext); - var result = query.Execute(testClaimSet.ClaimSetId); - result.Name.ShouldBe(testClaimSet.ClaimSetName); - result.Id.ShouldBe(testClaimSet.ClaimSetId); - } - - [Test] - public void ShouldThrowExceptionForNonExistingClaimSetId() - { - const int NonExistingClaimSetId = 1; - - using var securityContext = TestContext; - EnsureZeroClaimSets(securityContext); - var adminApiException = Assert.Throws(() => - { - var query = new GetClaimSetByIdQueryV53Service(securityContext); - query.Execute(NonExistingClaimSetId); - }); - adminApiException.ShouldNotBeNull(); - adminApiException.StatusCode.ShouldBe(HttpStatusCode.NotFound); - adminApiException.Message.ShouldBe("No such claim set exists in the database."); - - static void EnsureZeroClaimSets(ISecurityContext database) - { - foreach (var entity in database.ClaimSets) - database.ClaimSets.Remove(entity); - database.SaveChanges(); - } - } -} diff --git a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetResourceClaims53Query.cs b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetResourceClaims53Query.cs deleted file mode 100644 index c4d796df5..000000000 --- a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetResourceClaims53Query.cs +++ /dev/null @@ -1,50 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; - -using System.Collections.Generic; -using System.Linq; -using EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; -using Compatability::EdFi.SecurityCompatiblity53.DataAccess.Contexts; -using EdFi.Ods.AdminApi.Infrastructure.Database.Queries; - -namespace EdFi.Ods.AdminApi.DBTests.ClaimSetEditorTests; - -public class GetResourceClaims53Query : IGetResourceClaimsQuery -{ - private readonly ISecurityContext _securityContext; - - public GetResourceClaims53Query(ISecurityContext securityContext) - { - _securityContext = securityContext; - } - - public IEnumerable Execute() - { - var resources = new List(); - var parentResources = _securityContext.ResourceClaims.Where(x => x.ParentResourceClaim == null).ToList(); - var childResources = _securityContext.ResourceClaims.Where(x => x.ParentResourceClaim != null).ToList(); - foreach (var parentResource in parentResources) - { - var children = childResources.Where(x => x.ParentResourceClaimId == parentResource.ResourceClaimId); - resources.Add(new ResourceClaim - { - Children = children.Select(child => new ResourceClaim() - { - Id = child.ResourceClaimId, - Name = child.ResourceName, - ParentId = parentResource.ResourceClaimId, - ParentName = parentResource.ResourceName, - }).ToList(), - Name = parentResource.ResourceName, - Id = parentResource.ResourceClaimId - }); - } - return resources - .Distinct() - .OrderBy(x => x.Name) - .ToList(); - } -} diff --git a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetResourcesByClaimSetIdQueryV6ServiceTests.cs b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetResourcesByClaimSetIdQueryServiceTests.cs similarity index 99% rename from Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetResourcesByClaimSetIdQueryV6ServiceTests.cs rename to Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetResourcesByClaimSetIdQueryServiceTests.cs index c75033636..49a6897e6 100644 --- a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetResourcesByClaimSetIdQueryV6ServiceTests.cs +++ b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetResourcesByClaimSetIdQueryServiceTests.cs @@ -17,7 +17,7 @@ namespace EdFi.Ods.AdminApi.DBTests.ClaimSetEditorTests; [TestFixture] -public class GetResourcesByClaimSetIdQueryV6SerivceTests : SecurityDataTestBase +public class GetResourcesByClaimSetIdQueryServiceTests : SecurityDataTestBase { [Test] public void ShouldGetParentResourcesByClaimSetId() diff --git a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetResourcesByClaimSetIdQueryV53ServiceTests.cs b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetResourcesByClaimSetIdQueryV53ServiceTests.cs deleted file mode 100644 index eaa76f3f1..000000000 --- a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/GetResourcesByClaimSetIdQueryV53ServiceTests.cs +++ /dev/null @@ -1,356 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; - -using System.Collections.Generic; -using System.Linq; -using NUnit.Framework; -using Shouldly; -using Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models; - -using Application = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.Application; -using ClaimSet = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.ClaimSet; -using ResourceClaim = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.ResourceClaim; -using Action = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.Action; -using ActionName = EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor.Action; - -namespace EdFi.Ods.AdminApi.DBTests.ClaimSetEditorTests; - -[TestFixture] -public class GetResourcesByClaimSetIdQueryV53ServiceTests : SecurityData53TestBase -{ - [Test] - public void ShouldGetParentResourcesByClaimSetId() - { - var testApplication = new Application - { - ApplicationName = "TestApplicationName" - }; - - Save(testApplication); - var testClaimSets = SetupApplicationWithClaimSets(testApplication).ToList(); - var testResourceClaims = SetupParentResourceClaims(testClaimSets, testApplication); - foreach (var testClaimSet in testClaimSets) - { - var results = ResourceClaimsForClaimSet(testClaimSet.ClaimSetId); - - var testResourceClaimsForId = - testResourceClaims.Where(x => x.ClaimSet.ClaimSetId == testClaimSet.ClaimSetId).Select(x => x.ResourceClaim).ToArray(); - results.Count.ShouldBe(testResourceClaimsForId.Length); - results.Select(x => x.Name).ShouldBe(testResourceClaimsForId.Select(x => x.ResourceName), true); - results.Select(x => x.Id).ShouldBe(testResourceClaimsForId.Select(x => x.ResourceClaimId), true); - results.All(x => x.Create).ShouldBe(true); - } - } - - [Test] - public void ShouldGetSingleResourceByClaimSetIdAndResourceId() - { - var testApplication = new Application - { - ApplicationName = "TestApplicationName" - }; - - Save(testApplication); - var testClaimSets = SetupApplicationWithClaimSets(testApplication).ToList(); - var testResourceClaims = SetupParentResourceClaims(testClaimSets, testApplication); - - foreach (var testClaimSet in testClaimSets) - { - var testResourceClaim = - testResourceClaims.Single(x => x.ClaimSet.ClaimSetId == testClaimSet.ClaimSetId && x.ResourceClaim.ResourceName == "TestResourceClaim3.00").ResourceClaim; - var result = SingleResourceClaimForClaimSet(testClaimSet.ClaimSetId, testResourceClaim.ResourceClaimId); - - result.Name.ShouldBe(testResourceClaim.ResourceName); - result.Id.ShouldBe(testResourceClaim.ResourceClaimId); - result.Create.ShouldBe(true); - result.Read.ShouldBe(false); - result.Update.ShouldBe(false); - result.Delete.ShouldBe(false); - } - - } - - [Test] - public void ShouldGetParentResourcesWithChildrenByClaimSetId() - { - var testApplication = new Application - { - ApplicationName = "TestApplicationName" - }; - - Save(testApplication); - var testClaimSets = SetupApplicationWithClaimSets(testApplication); - var testResourceClaims = SetupParentResourceClaimsWithChildren(testClaimSets, testApplication); - - using var securityContext = TestContext; - foreach (var testClaimSet in testClaimSets) - { - var results = ResourceClaimsForClaimSet(testClaimSet.ClaimSetId); - - var testParentResourceClaimsForId = - testResourceClaims.Where(x => x.ClaimSet.ClaimSetId == testClaimSet.ClaimSetId && x.ResourceClaim.ParentResourceClaim == null).Select(x => x.ResourceClaim).ToArray(); - - results.Count.ShouldBe(testParentResourceClaimsForId.Length); - results.Select(x => x.Name).ShouldBe(testParentResourceClaimsForId.Select(x => x.ResourceName), true); - results.Select(x => x.Id).ShouldBe(testParentResourceClaimsForId.Select(x => x.ResourceClaimId), true); - results.All(x => x.Create).ShouldBe(true); - - foreach (var testParentResourceClaim in testParentResourceClaimsForId) - { - var testChildren = securityContext.ResourceClaims.Where(x => - x.ParentResourceClaimId == testParentResourceClaim.ResourceClaimId).ToList(); - var parentResult = results.First(x => x.Id == testParentResourceClaim.ResourceClaimId); - parentResult.Children.Select(x => x.Name).ShouldBe(testChildren.Select(x => x.ResourceName), true); - parentResult.Children.Select(x => x.Id).ShouldBe(testChildren.Select(x => x.ResourceClaimId), true); - parentResult.Children.All(x => x.Create).ShouldBe(true); - } - } - } - - [Test] - public void ShouldGetDefaultAuthorizationStrategiesForParentResourcesByClaimSetId() - { - var testApplication = new Application - { - ApplicationName = "TestApplicationName" - }; - Save(testApplication); - - var testClaimSet = new ClaimSet - { - ClaimSetName = "TestClaimSet", - Application = testApplication - }; - Save(testClaimSet); - - var appAuthorizationStrategies = SetupApplicationAuthorizationStrategies(testApplication).ToList(); - var testResourceClaims = SetupParentResourceClaims(new List { testClaimSet }, testApplication); - var testAuthStrategies = SetupResourcesWithDefaultAuthorizationStrategies(appAuthorizationStrategies, testResourceClaims.ToList()); - var results = ResourceClaimsForClaimSet(testClaimSet.ClaimSetId).ToArray(); - results.Select(x => x.DefaultAuthStrategiesForCRUD[0].AuthorizationStrategies[0].AuthStrategyName).ShouldBe(testAuthStrategies.Select(x => x.AuthorizationStrategy.AuthorizationStrategyName), true); - - } - - [Test] - public void ShouldGetDefaultAuthorizationStrategiesForSingleResourcesByClaimSetIdAndResourceId() - { - var testApplication = new Application - { - ApplicationName = "TestApplicationName" - }; - Save(testApplication); - - var testClaimSet = new ClaimSet - { - ClaimSetName = "TestClaimSet", - Application = testApplication - }; - Save(testClaimSet); - - var appAuthorizationStrategies = SetupApplicationAuthorizationStrategies(testApplication).ToList(); - var testResourceClaims = SetupParentResourceClaims(new List { testClaimSet }, testApplication); - var testAuthStrategies = SetupResourcesWithDefaultAuthorizationStrategies(appAuthorizationStrategies, testResourceClaims.ToList()); - - var testResourceClaim = - testResourceClaims.Single(x => x.ClaimSet.ClaimSetId == testClaimSet.ClaimSetId && x.ResourceClaim.ResourceName == "TestResourceClaim3.00").ResourceClaim; - var testAuthStrategy = testAuthStrategies.Single(x => - x.ResourceClaim.ResourceClaimId == testResourceClaim.ResourceClaimId && x.Action.ActionName == ActionName.Create.Value).AuthorizationStrategy; - - var result = SingleResourceClaimForClaimSet(testClaimSet.ClaimSetId, testResourceClaim.ResourceClaimId); - - result.Name.ShouldBe(testResourceClaim.ResourceName); - result.Id.ShouldBe(testResourceClaim.ResourceClaimId); - result.Create.ShouldBe(true); - result.Read.ShouldBe(false); - result.Update.ShouldBe(false); - result.Delete.ShouldBe(false); - result.DefaultAuthStrategiesForCRUD[0].AuthorizationStrategies[0].AuthStrategyName.ShouldBe(testAuthStrategy.DisplayName); - } - - [Test] - public void ShouldGetDefaultAuthorizationStrategiesForParentResourcesWithChildrenByClaimSetId() - { - var testApplication = new Application - { - ApplicationName = "TestApplicationName" - }; - Save(testApplication); - - var testClaimSet = new ClaimSet - { - ClaimSetName = "TestClaimSet", - Application = testApplication - }; - Save(testClaimSet); - - var appAuthorizationStrategies = SetupApplicationAuthorizationStrategies(testApplication).ToList(); - - var testResourceClaims = SetupParentResourceClaimsWithChildren(new List { testClaimSet }, testApplication); - var testAuthStrategies = SetupResourcesWithDefaultAuthorizationStrategies(appAuthorizationStrategies, testResourceClaims.ToList()); - - - var results = ResourceClaimsForClaimSet(testClaimSet.ClaimSetId).ToArray(); - - var testParentResourceClaimsForId = - testResourceClaims - .Where(x => x.ClaimSet.ClaimSetId == testClaimSet.ClaimSetId && - x.ResourceClaim.ParentResourceClaim == null).Select(x => x.ResourceClaim).ToArray(); - - var testAuthStrategiesForParents = - testAuthStrategies.Where(x => x.ResourceClaim.ParentResourceClaim == null); - - results.Select(x => x.DefaultAuthStrategiesForCRUD[0].AuthorizationStrategies[0].AuthStrategyName).ShouldBe(testAuthStrategiesForParents.Select(x => x.AuthorizationStrategy.AuthorizationStrategyName), true); - - foreach (var testParentResourceClaim in testParentResourceClaimsForId) - { - var parentResult = results.First(x => x.Id == testParentResourceClaim.ResourceClaimId); - var testAuthStrategiesForChildren = - testAuthStrategies.Where(x => - x.ResourceClaim.ParentResourceClaimId == testParentResourceClaim.ResourceClaimId); - parentResult.Children.Select(x => x.DefaultAuthStrategiesForCRUD[0].AuthorizationStrategies[0].AuthStrategyName).ShouldBe(testAuthStrategiesForChildren.Select(x => x.AuthorizationStrategy.AuthorizationStrategyName), true); - } - - } - - private IReadOnlyCollection SetupApplicationWithClaimSets(Application testApplication, int claimSetCount = 5) - { - var testClaimSetNames = Enumerable.Range(1, claimSetCount) - .Select((x, index) => $"TestClaimSetName{index:N}") - .ToArray(); - - var testClaimSets = testClaimSetNames - .Select(x => new ClaimSet - { - ClaimSetName = x, - Application = testApplication - }) - .ToArray(); - - Save(testClaimSets.Cast().ToArray()); - - return testClaimSets; - } - - private IReadOnlyCollection SetupParentResourceClaims(IEnumerable testClaimSets, Application testApplication, int resourceClaimCount = 5) - { - var claimSetResourceClaims = new List(); - foreach (var claimSet in testClaimSets) - { - foreach (var index in Enumerable.Range(1, resourceClaimCount)) - { - var resourceClaim = new ResourceClaim - { - ClaimName = $"TestResourceClaim{index:N}", - DisplayName = $"TestResourceClaim{index:N}", - ResourceName = $"TestResourceClaim{index:N}", - Application = testApplication - }; - var action = new Action - { - ActionName = ActionName.Create.Value, - ActionUri = "create" - }; - var claimSetResourceClaim = new ClaimSetResourceClaim - { - ResourceClaim = resourceClaim, Action = action, ClaimSet = claimSet - }; - claimSetResourceClaims.Add(claimSetResourceClaim); - } - } - - Save(claimSetResourceClaims.Cast().ToArray()); - - return claimSetResourceClaims; - } - - private IReadOnlyCollection SetupParentResourceClaimsWithChildren(IEnumerable testClaimSets, Application testApplication, int resourceClaimCount = 5, int childResourceClaimCount = 3) - { - var parentResourceClaims = new List(); - var childResourceClaims = new List(); - foreach (var parentIndex in Enumerable.Range(1, resourceClaimCount)) - { - var resourceClaim = new ResourceClaim - { - ClaimName = $"TestParentResourceClaim{parentIndex:N}", - DisplayName = $"TestParentResourceClaim{parentIndex:N}", - ResourceName = $"TestParentResourceClaim{parentIndex:N}", - Application = testApplication - }; - parentResourceClaims.Add(resourceClaim); - - childResourceClaims.AddRange(Enumerable.Range(1, childResourceClaimCount) - .Select(childIndex => new ResourceClaim - { - ClaimName = $"TestChildResourceClaim{childIndex:N}", - DisplayName = $"TestChildResourceClaim{childIndex:N}", - ResourceName = $"TestChildResourceClaim{childIndex:N}", - Application = testApplication, - ParentResourceClaim = resourceClaim, - ParentResourceClaimId = resourceClaim.ResourceClaimId - })); - } - - Save(parentResourceClaims.Cast().ToArray()); - Save(childResourceClaims.Cast().ToArray()); - - var claimSetResourceClaims = new List(); - var claimSets = testClaimSets.ToList(); - foreach (var claimSet in claimSets) - { - foreach (var index in Enumerable.Range(1, childResourceClaimCount)) - { - var action = new Action - { - ActionName = ActionName.Create.Value, - ActionUri = "create" - }; - var claimSetResourceClaim = new ClaimSetResourceClaim - { - ResourceClaim = childResourceClaims[index - 1], - Action = action, - ClaimSet = claimSet - }; - claimSetResourceClaims.Add(claimSetResourceClaim); - } - } - - Save(claimSetResourceClaims.Cast().ToArray()); - - claimSetResourceClaims = new List(); - foreach (var claimSet in claimSets) - { - foreach (var index in Enumerable.Range(1, resourceClaimCount)) - { - var parentResource = parentResourceClaims[index - 1]; - var action = new Action - { - ActionName = ActionName.Create.Value, - ActionUri = "create" - }; - var claimSetResourceClaim = new ClaimSetResourceClaim - { - ResourceClaim = parentResource, - Action = action, - ClaimSet = claimSet - }; - claimSetResourceClaims.Add(claimSetResourceClaim); - var childResources = childResourceClaims - .Where(x => x.ParentResourceClaimId == parentResource.ResourceClaimId).Select(x => - new ClaimSetResourceClaim - { - ResourceClaim = x, - Action = action, - ClaimSet = claimSet - }).ToArray(); - claimSetResourceClaims.AddRange(childResources); - } - } - - Save(claimSetResourceClaims.Cast().ToArray()); - - return claimSetResourceClaims; - } -} diff --git a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/OverrideDefaultAuthorizationStrategyV6ServiceTests.cs b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/OverrideDefaultAuthorizationStrategyServiceTests.cs similarity index 91% rename from Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/OverrideDefaultAuthorizationStrategyV6ServiceTests.cs rename to Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/OverrideDefaultAuthorizationStrategyServiceTests.cs index 82060aa4f..7faf78060 100644 --- a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/OverrideDefaultAuthorizationStrategyV6ServiceTests.cs +++ b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/OverrideDefaultAuthorizationStrategyServiceTests.cs @@ -14,7 +14,7 @@ namespace EdFi.Ods.AdminApi.DBTests.ClaimSetEditorTests; [TestFixture] -public class OverrideDefaultAuthorizationStrategyV6ServiceTests : SecurityDataTestBase +public class OverrideDefaultAuthorizationStrategyServiceTests : SecurityDataTestBase { [Test] public void ShouldOverrideAuthorizationStrategiesForParentResourcesOnClaimSet() @@ -57,17 +57,16 @@ public void ShouldOverrideAuthorizationStrategiesForParentResourcesOnClaimSet() .Single(x => x.AuthorizationStrategyName == "TestAuthStrategy4").AuthorizationStrategyId }, AuthorizationStrategyForRead = new int[0], AuthorizationStrategyForUpdate = new int[0], - AuthorizationStrategyForDelete = new int[0], + AuthorizationStrategyForDelete = new int[0], AuthorizationStrategyForReadChanges = new int[0], }; List resourceClaimsForClaimSet = null; using var securityContext = TestContext; - var command = new OverrideDefaultAuthorizationStrategyV6Service(securityContext); + var command = new OverrideDefaultAuthorizationStrategyService(securityContext); command.Execute(overrideModel); - var getResourcesByClaimSetIdQuery = new GetResourcesByClaimSetIdQuery(new StubOdsSecurityModelVersionResolver.V6(), - null, new GetResourcesByClaimSetIdQueryV6Service(securityContext, SecurityDataTestBase.Mapper())); + var getResourcesByClaimSetIdQuery = new GetResourcesByClaimSetIdQuery(new GetResourcesByClaimSetIdQueryService(securityContext, SecurityDataTestBase.Mapper())); resourceClaimsForClaimSet = getResourcesByClaimSetIdQuery.AllResources(testClaimSet.ClaimSetId).ToList(); var resultResourceClaim1 = diff --git a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/OverrideDefaultAuthorizationStrategyV53ServiceTests.cs b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/OverrideDefaultAuthorizationStrategyV53ServiceTests.cs deleted file mode 100644 index 4950dd8c5..000000000 --- a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/OverrideDefaultAuthorizationStrategyV53ServiceTests.cs +++ /dev/null @@ -1,148 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; - -using System.Linq; -using NUnit.Framework; -using EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; -using Shouldly; -using AutoMapper; -using Application = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.Application; -using ClaimSet = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.ClaimSet; -using EdFi.Ods.AdminApi.Infrastructure; - -namespace EdFi.Ods.AdminApi.DBTests.ClaimSetEditorTests; - -[TestFixture] -public class OverrideDefaultAuthorizationStrategyV53ServiceTests : SecurityData53TestBase -{ - [SetUp] - public void Init() - { - var config = new MapperConfiguration(cfg => cfg.AddProfile()); - } - - [Test] - public void ShouldOverrideAuthorizationStrategiesForParentResourcesOnClaimSet() - { - // Arrange - var testApplication = new Application - { - ApplicationName = "TestApplicationName" - }; - Save(testApplication); - - var testClaimSet = new ClaimSet - { - ClaimSetName = "TestClaimSet", - Application = testApplication - }; - Save(testClaimSet); - - var appAuthorizationStrategies = SetupApplicationAuthorizationStrategies(testApplication).ToList(); - var testResourceClaims = SetupParentResourceClaimsWithChildren(testClaimSet, testApplication); - SetupResourcesWithDefaultAuthorizationStrategies(appAuthorizationStrategies, testResourceClaims.ToList()); - - var testResource1ToEdit = testResourceClaims.Select(x => x.ResourceClaim).Single(x => x.ResourceName == "TestParentResourceClaim1"); - var testResource2ToNotEdit = testResourceClaims.Select(x => x.ResourceClaim).Single(x => x.ResourceName == "TestParentResourceClaim2"); - - var overrideModel = new OverrideAuthorizationStrategyModel - { - ResourceClaimId = testResource1ToEdit.ResourceClaimId, - ClaimSetId = testClaimSet.ClaimSetId, - AuthorizationStrategyForCreate = new int[1] { appAuthorizationStrategies.Single(x => x.AuthorizationStrategyName == "TestAuthStrategy4").AuthorizationStrategyId }, - AuthorizationStrategyForRead = new int[0], - AuthorizationStrategyForUpdate = new int[0], - AuthorizationStrategyForDelete = new int[0], - }; - - // Act - using var securityContext = TestContext; - var command = new OverrideDefaultAuthorizationStrategyV53Service(securityContext); - command.Execute(overrideModel); - - // Assert - var resourceClaimsForClaimSet = ResourceClaimsForClaimSet(testClaimSet.ClaimSetId).ToList(); - - var resultResourceClaim1 = resourceClaimsForClaimSet.Single(x => x.Id == overrideModel.ResourceClaimId); - - resultResourceClaim1.AuthStrategyOverridesForCRUD[0].AuthorizationStrategies[0].AuthStrategyName.ShouldBe("TestAuthStrategy4"); - resultResourceClaim1.AuthStrategyOverridesForCRUD[1].ShouldBeNull(); - resultResourceClaim1.AuthStrategyOverridesForCRUD[2].ShouldBeNull(); - resultResourceClaim1.AuthStrategyOverridesForCRUD[3].ShouldBeNull(); - - var resultResourceClaim2 = resourceClaimsForClaimSet.Single(x => x.Id == testResource2ToNotEdit.ResourceClaimId); - - resultResourceClaim2.AuthStrategyOverridesForCRUD[0].ShouldBeNull(); - resultResourceClaim2.AuthStrategyOverridesForCRUD[1].ShouldBeNull(); - resultResourceClaim2.AuthStrategyOverridesForCRUD[2].ShouldBeNull(); - resultResourceClaim2.AuthStrategyOverridesForCRUD[3].ShouldBeNull(); - } - - [Test] - public void ShouldOverrideAuthorizationStrategiesForChildResourcesOnClaimSet() - { - // Arrange - var testApplication = new Application - { - ApplicationName = "TestApplicationName" - }; - Save(testApplication); - - var testClaimSet = new ClaimSet - { - ClaimSetName = "TestClaimSet", - Application = testApplication - }; - Save(testClaimSet); - - var appAuthorizationStrategies = SetupApplicationAuthorizationStrategies(testApplication).ToList(); - var testResourceClaims = SetupParentResourceClaimsWithChildren(testClaimSet, testApplication); - - SetupResourcesWithDefaultAuthorizationStrategies(appAuthorizationStrategies, testResourceClaims.ToList()); - - var testParentResource = testResourceClaims.Select(x => x.ResourceClaim).Single(x => x.ResourceName == "TestParentResourceClaim1"); - var testChildResourceToEdit = testResourceClaims.Select(x => x.ResourceClaim).Single(x => - x.ResourceName == "TestChildResourceClaim1" && - x.ParentResourceClaimId == testParentResource.ResourceClaimId); - var testChildResourceNotToEdit = testResourceClaims.Select(x => x.ResourceClaim).Single(x => - x.ResourceName == "TestChildResourceClaim2" && - x.ParentResourceClaimId == testParentResource.ResourceClaimId); - - var overrideModel = new OverrideAuthorizationStrategyModel - { - ResourceClaimId = testChildResourceToEdit.ResourceClaimId, - ClaimSetId = testClaimSet.ClaimSetId, - AuthorizationStrategyForCreate = new int[1] { appAuthorizationStrategies.Single(x => x.AuthorizationStrategyName == "TestAuthStrategy4").AuthorizationStrategyId }, - AuthorizationStrategyForRead = new int[0], - AuthorizationStrategyForUpdate = new int[0], - AuthorizationStrategyForDelete = new int[0] - }; - - // Act - using var securityContext = TestContext; - var command = new OverrideDefaultAuthorizationStrategyV53Service(securityContext); - command.Execute(overrideModel); - - // Assert - var resourceClaimsForClaimSet = ResourceClaimsForClaimSet(testClaimSet.ClaimSetId).ToList(); - - var resultParentResource = resourceClaimsForClaimSet.Single(x => x.Id == testParentResource.ResourceClaimId); - var resultChildResource1 = - resultParentResource.Children.Single(x => x.Id == testChildResourceToEdit.ResourceClaimId); - - resultChildResource1.AuthStrategyOverridesForCRUD[0].AuthorizationStrategies[0].AuthStrategyName.ShouldBe("TestAuthStrategy4"); - resultChildResource1.AuthStrategyOverridesForCRUD[1].ShouldBeNull(); - resultChildResource1.AuthStrategyOverridesForCRUD[2].ShouldBeNull(); - resultChildResource1.AuthStrategyOverridesForCRUD[3].ShouldBeNull(); - - var resultResourceClaim2 = resultParentResource.Children.Single(x => x.Id == testChildResourceNotToEdit.ResourceClaimId); - - resultResourceClaim2.AuthStrategyOverridesForCRUD[0].ShouldBeNull(); - resultResourceClaim2.AuthStrategyOverridesForCRUD[1].ShouldBeNull(); - resultResourceClaim2.AuthStrategyOverridesForCRUD[2].ShouldBeNull(); - resultResourceClaim2.AuthStrategyOverridesForCRUD[3].ShouldBeNull(); - } -} diff --git a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/UpdateResourcesOnClaimSetCommandV6ServiceTests.cs b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/UpdateResourcesOnClaimSetCommandServiceTests.cs similarity index 87% rename from Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/UpdateResourcesOnClaimSetCommandV6ServiceTests.cs rename to Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/UpdateResourcesOnClaimSetCommandServiceTests.cs index 686b9573f..add5dd2f6 100644 --- a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/UpdateResourcesOnClaimSetCommandV6ServiceTests.cs +++ b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/UpdateResourcesOnClaimSetCommandServiceTests.cs @@ -18,7 +18,7 @@ namespace EdFi.Ods.AdminApi.DBTests.ClaimSetEditorTests; [TestFixture] -public class UpdateResourcesOnClaimSetCommandV6ServiceTests : SecurityDataTestBase +public class UpdateResourcesOnClaimSetCommandServiceTests : SecurityDataTestBase { [Test] public void ShouldUpdateResourcesOnClaimSet() @@ -65,7 +65,7 @@ public void ShouldUpdateResourcesOnClaimSet() Create = false, Read = false, Update = true, - Delete = true, + Delete = true, ReadChanges = true, } } }; @@ -81,14 +81,11 @@ public void ShouldUpdateResourcesOnClaimSet() using var securityContext6 = CreateDbContext(); var addOrEditResourcesOnClaimSetCommand = new AddOrEditResourcesOnClaimSetCommand( - new EditResourceOnClaimSetCommand(new StubOdsSecurityModelVersionResolver.V6(), - null, new EditResourceOnClaimSetCommandV6Service(securityContext6)), + new EditResourceOnClaimSetCommand(new EditResourceOnClaimSetCommandService(securityContext6)), new GetResourceClaimsQuery(securityContext6), - new OverrideDefaultAuthorizationStrategyCommand( - new StubOdsSecurityModelVersionResolver.V6(), null, - new OverrideDefaultAuthorizationStrategyV6Service(securityContext6))); + new OverrideDefaultAuthorizationStrategyCommand(new OverrideDefaultAuthorizationStrategyService(securityContext6))); - var command = new UpdateResourcesOnClaimSetCommandV6Service(securityContext6, addOrEditResourcesOnClaimSetCommand); + var command = new UpdateResourcesOnClaimSetCommandService(securityContext6, addOrEditResourcesOnClaimSetCommand); command.Execute(updateResourcesOnClaimSetModel.Object); var resourceClaimsForClaimSet = ResourceClaimsForClaimSet(testClaimSet.ClaimSetId); diff --git a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/UpdateResourcesOnClaimSetCommandV53ServiceTests.cs b/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/UpdateResourcesOnClaimSetCommandV53ServiceTests.cs deleted file mode 100644 index 37fd0ac48..000000000 --- a/Application/EdFi.Ods.AdminApi.DBTests/ClaimSetEditorTests/UpdateResourcesOnClaimSetCommandV53ServiceTests.cs +++ /dev/null @@ -1,94 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; - -using System; -using System.Linq; -using NUnit.Framework; -using EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; -using Shouldly; -using System.Collections.Generic; -using Moq; - -using Application = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.Application; -using ClaimSet = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.ClaimSet; - -namespace EdFi.Ods.AdminApi.DBTests.ClaimSetEditorTests; - -[TestFixture] -public class UpdateResourcesOnClaimSetCommandV53ServiceTests : SecurityData53TestBase -{ - [Test] - public void ShouldUpdateResourcesOnClaimSet() - { - var testApplication = new Application - { - ApplicationName = $"Test Application {DateTime.Now:O}" - }; - Save(testApplication); - - var testClaimSet = new ClaimSet { ClaimSetName = "TestClaimSet", Application = testApplication }; - Save(testClaimSet); - - var testResources = SetupParentResourceClaimsWithChildren(testClaimSet, testApplication, 2, 1); - - var testParentResource = testResources.Single(x => x.ResourceClaim.ResourceName == "TestParentResourceClaim1"); - var secondTestParentResource = testResources.Single(x => x.ResourceClaim.ResourceName == "TestParentResourceClaim2"); - - using var securityContext = TestContext; - var testChildResource1ToEdit = securityContext.ResourceClaims.Single(x => x.ResourceName == "TestChildResourceClaim1" && x.ParentResourceClaimId == testParentResource.ResourceClaim.ResourceClaimId); - - var addedResourceClaimsForClaimSet = ResourceClaimsForClaimSet(testClaimSet.ClaimSetId); - addedResourceClaimsForClaimSet.Count.ShouldBe(2); - var secondParentResourceClaim = addedResourceClaimsForClaimSet.Single(x => x.Id == secondTestParentResource.ResourceClaim.ResourceClaimId); - secondParentResourceClaim.ShouldNotBeNull(); - - var updatedParent1 = new ResourceClaim - { - Id = testParentResource.ResourceClaim.ResourceClaimId, - Name = testParentResource.ResourceClaim.ResourceName, - Create = false, - Read = false, - Update = true, - Delete = true, - Children = new List {new ResourceClaim - { - Id = testChildResource1ToEdit.ResourceClaimId, - Name = testChildResource1ToEdit.ResourceName, - Create = false, - Read = false, - Update = true, - Delete = true - } } - }; - - var updatedResourceClaims = new List - { - updatedParent1 - }; - - var updateResourcesOnClaimSetModel = new Mock(); - updateResourcesOnClaimSetModel.Setup(x => x.ClaimSetId).Returns(testClaimSet.ClaimSetId); - updateResourcesOnClaimSetModel.Setup(x => x.ResourceClaims).Returns(updatedResourceClaims); - - using var securityContext53 = CreateDbContext(); - var addOrEditResourcesOnClaimSetCommand = new AddOrEditResourcesOnClaimSetCommand( - new EditResourceOnClaimSetCommand(new StubOdsSecurityModelVersionResolver.V3_5(), - new EditResourceOnClaimSetCommandV53Service(securityContext53), null), - new GetResourceClaims53Query(securityContext53), - new OverrideDefaultAuthorizationStrategyCommand( - new StubOdsSecurityModelVersionResolver.V3_5(), - new OverrideDefaultAuthorizationStrategyV53Service(securityContext53), null)); - - var command = new UpdateResourcesOnClaimSetCommandV53Service(securityContext53, addOrEditResourcesOnClaimSetCommand); - command.Execute(updateResourcesOnClaimSetModel.Object); - - var resourceClaimsForClaimSet = ResourceClaimsForClaimSet(testClaimSet.ClaimSetId); - resourceClaimsForClaimSet.Count.ShouldBe(1); - resourceClaimsForClaimSet.First().Name.ShouldBe(testParentResource.ResourceClaim.ResourceName); - resourceClaimsForClaimSet.First().Children.Count.ShouldBe(1); - resourceClaimsForClaimSet.First().Children.First().Name.ShouldBe(testChildResource1ToEdit.ResourceName); - } -} diff --git a/Application/EdFi.Ods.AdminApi.DBTests/EdFi.Ods.AdminApi.DBTests.csproj b/Application/EdFi.Ods.AdminApi.DBTests/EdFi.Ods.AdminApi.DBTests.csproj index 1026f1a64..be9467d2a 100644 --- a/Application/EdFi.Ods.AdminApi.DBTests/EdFi.Ods.AdminApi.DBTests.csproj +++ b/Application/EdFi.Ods.AdminApi.DBTests/EdFi.Ods.AdminApi.DBTests.csproj @@ -6,25 +6,22 @@ - - - - Compatability - - - - - - - - - + + + + + + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + + diff --git a/Application/EdFi.Ods.AdminApi.DBTests/PlatformSecurityContext53TestBase.cs b/Application/EdFi.Ods.AdminApi.DBTests/PlatformSecurityContext53TestBase.cs deleted file mode 100644 index ad0812139..000000000 --- a/Application/EdFi.Ods.AdminApi.DBTests/PlatformSecurityContext53TestBase.cs +++ /dev/null @@ -1,151 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; - -using System; -using System.Threading.Tasks; -using EdFi.Admin.DataAccess.Contexts; -using Compatability::EdFi.SecurityCompatiblity53.DataAccess.Contexts; -using NUnit.Framework; -using Respawn; -using Microsoft.EntityFrameworkCore; -using Respawn.Graph; - -namespace EdFi.Ods.AdminApi.DBTests; - -[TestFixture] -public abstract class PlatformSecurityContextTestBase53 -{ - protected SqlServerSecurityContext TestContext { get; private set; } - protected SqlServerSecurityContext SetupContext { get; private set; } - - protected enum CheckpointPolicyOptions - { - BeforeEachTest, - BeforeAnyTest - } - - protected CheckpointPolicyOptions CheckpointPolicy { get; set; } = CheckpointPolicyOptions.BeforeEachTest; - - private Respawner _checkpoint; - - protected virtual string ConnectionString => TestContext.Database.GetConnectionString(); - - protected virtual void AdditionalFixtureSetup() - { - } - - protected virtual async void CreateCheckpoint() - { - _checkpoint = await Respawner.CreateAsync(ConnectionString, new RespawnerOptions - { - TablesToIgnore = new Table[] - { - "__MigrationHistory", "DeployJournal", "AdminApiDeployJournal" - }, - SchemasToExclude = Array.Empty() - }); - } - - protected abstract SqlServerSecurityContext CreateDbContext(); - - [OneTimeSetUp] - public virtual async Task FixtureSetup() - { - CreateCheckpoint(); - TestContext = CreateDbContext(); - SetupContext = CreateDbContext(); - - if (CheckpointPolicy == CheckpointPolicyOptions.BeforeAnyTest) - { - await _checkpoint.ResetAsync(ConnectionString); - } - - AdditionalFixtureSetup(); - } - - [OneTimeTearDown] - public async Task FixtureTearDown() - { - await _checkpoint.ResetAsync(ConnectionString); - TestContext.Dispose(); - SetupContext.Dispose(); - } - - [SetUp] - public async Task SetUp() - { - CreateCheckpoint(); - TestContext = CreateDbContext(); - SetupContext = CreateDbContext(); - - if (CheckpointPolicy == CheckpointPolicyOptions.BeforeEachTest) - { - await _checkpoint.ResetAsync(ConnectionString); - } - } - - [TearDown] - public void TearDown() - { - TestContext.Dispose(); - SetupContext.Dispose(); - } - - protected void Save(params object[] entities) - { - foreach (var entity in entities) - { - TestContext.Add(entity); - } - - TestContext.SaveChanges(); - } - - protected void UsersTransaction(Action action) - { - using var usersContext = new SqlServerUsersContext(Testing.GetDbContextOptions(Testing.AdminConnectionString)); - using var transaction = usersContext.Database.BeginTransaction(); - action(usersContext); - TestContext.SaveChanges(); - transaction.Commit(); - } - - protected TResult UsersTransaction(Func query) - { - var result = default(TResult); - - UsersTransaction(database => - { - result = query(database); - }); - - return result; - } - - protected void Transaction(Action action) - { - var optionsBuilder = new DbContextOptionsBuilder(); - optionsBuilder.UseSqlServer(Testing.SecurityV53ConnectionString); - - using var usersContext = new SqlServerSecurityContext(optionsBuilder.Options); - using var usersTransaction = usersContext.Database.BeginTransaction(); - action(usersContext); - TestContext.SaveChanges(); - usersTransaction.Commit(); - } - - protected TResult Transaction(Func query) - { - var result = default(TResult); - - Transaction((usersContext) => - { - result = query(usersContext); - }); - - return result; - } -} diff --git a/Application/EdFi.Ods.AdminApi.DBTests/SecurityData53TestBase.cs b/Application/EdFi.Ods.AdminApi.DBTests/SecurityData53TestBase.cs deleted file mode 100644 index 787dfea11..000000000 --- a/Application/EdFi.Ods.AdminApi.DBTests/SecurityData53TestBase.cs +++ /dev/null @@ -1,303 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; - -using System; -using System.Collections.Generic; -using System.Linq; -using AutoMapper; -using EdFi.Ods.AdminApi.Infrastructure; -using Compatability::EdFi.SecurityCompatiblity53.DataAccess.Contexts; -using Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models; -using NUnit.Framework; -using Action = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.Action; -using ActionName = EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor.Action; -using ClaimSetEditorTypes = EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; -using Microsoft.EntityFrameworkCore; - -namespace EdFi.Ods.AdminApi.DBTests; - -[TestFixture] -public abstract class SecurityData53TestBase : PlatformSecurityContextTestBase53 -{ - protected override string ConnectionString => Testing.SecurityV53ConnectionString; - - protected override SqlServerSecurityContext CreateDbContext() - { - var optionsBuilder = new DbContextOptionsBuilder(); - optionsBuilder.UseSqlServer(ConnectionString); - return new SqlServerSecurityContext(optionsBuilder.Options); - } - - // This bool controls whether or not to run SecurityContext initialization - // method. Setting this flag to true will cause seed data to be - // inserted into the security database on fixture setup. - protected bool SeedSecurityContextOnFixtureSetup { get; set; } = false; - - protected void LoadSeedData() - { - var odsApplication = GetOrCreateApplication("Ed-Fi ODS API"); - - var readAction = GetOrCreateAction("Read"); - GetOrCreateAction("Create"); - GetOrCreateAction("Update"); - GetOrCreateAction("Delete"); - - - GetOrCreateAuthorizationStrategy(odsApplication, "Namespace Based", "NamespaceBased"); - - var noFurtherStrategy = GetOrCreateAuthorizationStrategy(odsApplication, "No Further Authorization Required", - "NoFurtherAuthorizationRequired"); - - - var educationStandardsResourceClaim = GetOrCreateResourceClaim("educationStandards", odsApplication); - GetOrCreateResourceClaim("types", odsApplication); - GetOrCreateResourceClaim("managedDescriptors", odsApplication); - GetOrCreateResourceClaim("systemDescriptors", odsApplication); - GetOrCreateResourceClaim("educationOrganizations", odsApplication); - - - GetOrCreateResourceClaimAuthorizationMetadata(readAction, noFurtherStrategy, - educationStandardsResourceClaim); - - TestContext.SaveChanges(); - - Application GetOrCreateApplication(string applicationName) - { - var application = TestContext.Applications.FirstOrDefault(a => a.ApplicationName == applicationName) ?? - TestContext.Applications.Add(new Application - { - ApplicationName = "Ed-Fi ODS API" - }).Entity; - return application; - } - - Action GetOrCreateAction(string actionName) - { - var action = TestContext.Actions.FirstOrDefault(a => a.ActionName == actionName) ?? - TestContext.Actions.Add(new Action - { - ActionName = actionName, - ActionUri = $"http://ed-fi.org/odsapi/actions/{actionName}" - }).Entity; - - return action; - } - - AuthorizationStrategy GetOrCreateAuthorizationStrategy(Application application, string displayName, - string authorizationStrategyName) - { - var authorizationStrategy = TestContext.AuthorizationStrategies.FirstOrDefault(a => - a.Application.ApplicationId == application.ApplicationId && a.DisplayName == displayName && - a.AuthorizationStrategyName == authorizationStrategyName) ?? - TestContext.AuthorizationStrategies.Add( - new AuthorizationStrategy - { - DisplayName = displayName, - AuthorizationStrategyName = authorizationStrategyName, - Application = application - }).Entity; - - return authorizationStrategy; - } - - ResourceClaim GetOrCreateResourceClaim(string resourceName, Application application) - { - var resourceClaim = - TestContext.ResourceClaims.FirstOrDefault(r => - r.ResourceName == resourceName && r.Application.ApplicationId == application.ApplicationId) ?? - TestContext.ResourceClaims.Add(new ResourceClaim - { - Application = application, - DisplayName = resourceName, - ResourceName = resourceName, - ClaimName = $"http://ed-fi.org/ods/identity/claims/domains/{resourceName}", - ParentResourceClaim = null - }).Entity; - - return resourceClaim; - } - - void GetOrCreateResourceClaimAuthorizationMetadata(Action action, - AuthorizationStrategy authorizationStrategy, - ResourceClaim resourceClaim) - { - var resourceClaimAuthorizationMetadata = TestContext.ResourceClaimAuthorizationMetadatas.FirstOrDefault(rcm => - rcm.Action.ActionId == action.ActionId && rcm.AuthorizationStrategy.AuthorizationStrategyId == authorizationStrategy.AuthorizationStrategyId && - rcm.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId); - - if (resourceClaimAuthorizationMetadata == null) - { - TestContext.ResourceClaimAuthorizationMetadatas.Add(new ResourceClaimAuthorizationMetadata - { - Action = action, - AuthorizationStrategy = authorizationStrategy, - ResourceClaim = resourceClaim, - ValidationRuleSetName = null - }); - } - } - } - - protected IReadOnlyCollection SetupResourceClaims(Application testApplication, int resourceClaimCount = 5, int childResourceClaimCount = 3) - { - var parentResourceClaims = new List(); - var childResourceClaims = new List(); - var actions = new List(); - foreach (var parentIndex in Enumerable.Range(1, resourceClaimCount)) - { - var resourceClaim = new ResourceClaim - { - ClaimName = $"TestParentResourceClaim{parentIndex}", - DisplayName = $"TestParentResourceClaim{parentIndex}", - ResourceName = $"TestParentResourceClaim{parentIndex}", - Application = testApplication - }; - parentResourceClaims.Add(resourceClaim); - - childResourceClaims.AddRange(Enumerable.Range(1, childResourceClaimCount) - .Select(childIndex => new ResourceClaim - { - ClaimName = $"TestChildResourceClaim{childIndex}", - DisplayName = $"TestChildResourceClaim{childIndex}", - ResourceName = $"TestChildResourceClaim{childIndex}", - Application = testApplication, - ParentResourceClaim = resourceClaim, - ParentResourceClaimId = resourceClaim.ResourceClaimId - })); - } - - foreach (var action in ActionName.GetAll()) - { - var actionObject = new Action - { - ActionName = action.Value, - ActionUri = action.Value - }; - actions.Add(actionObject); - } - - Save(parentResourceClaims.Cast().ToArray()); - Save(childResourceClaims.Cast().ToArray()); - Save(actions.Cast().ToArray()); - - return parentResourceClaims; - } - - protected IReadOnlyCollection SetupParentResourceClaimsWithChildren(ClaimSet testClaimSet, Application testApplication, int resourceClaimCount = 5, int childResourceClaimCount = 3) - { - var actions = ActionName.GetAll().Select(action => new Action { ActionName = action.Value, ActionUri = action.Value }).ToList(); - Save(actions.Cast().ToArray()); - - var parentResourceClaims = Enumerable.Range(1, resourceClaimCount).Select(parentIndex => new ResourceClaim - { - ClaimName = $"TestParentResourceClaim{parentIndex}", - DisplayName = $"TestParentResourceClaim{parentIndex}", - ResourceName = $"TestParentResourceClaim{parentIndex}", Application = testApplication - }).ToList(); - - var childResourceClaims = parentResourceClaims.SelectMany(x => Enumerable.Range(1, childResourceClaimCount) - .Select(childIndex => new ResourceClaim - { - ClaimName = $"TestChildResourceClaim{childIndex}", - DisplayName = $"TestChildResourceClaim{childIndex}", - ResourceName = $"TestChildResourceClaim{childIndex}", - Application = testApplication, - ParentResourceClaim = x - })).ToList(); - - Save(childResourceClaims.Cast().ToArray()); - - var claimSetResourceClaims = Enumerable.Range(1, resourceClaimCount) - .Select(index => parentResourceClaims[index - 1]).Select(parentResource => new ClaimSetResourceClaim - { - ResourceClaim = parentResource, - Action = actions.Single(x => x.ActionName == ActionName.Create.Value), ClaimSet = testClaimSet - }).ToList(); - - var childResources = parentResourceClaims.SelectMany(x => childResourceClaims - .Where(child => child.ParentResourceClaimId == x.ResourceClaimId) - .Select(child => new ClaimSetResourceClaim - { - ResourceClaim = child, - Action = actions.Single(a => a.ActionName == ActionName.Create.Value), - ClaimSet = testClaimSet - }).ToList()).ToList(); - - claimSetResourceClaims.AddRange(childResources); - - Save(claimSetResourceClaims.Cast().ToArray()); - - return claimSetResourceClaims; - } - - protected IReadOnlyCollection SetupApplicationAuthorizationStrategies(Application testApplication, int authStrategyCount = 5) - { - var testAuthStrategies = Enumerable.Range(1, authStrategyCount) - .Select(index => $"TestAuthStrategy{index}") - .ToArray(); - - var authStrategies = testAuthStrategies - .Select(x => new AuthorizationStrategy - { - AuthorizationStrategyName = x, - DisplayName = x, - Application = testApplication - }) - .ToArray(); - - Save(authStrategies.Cast().ToArray()); - - return authStrategies; - } - - protected IReadOnlyCollection SetupResourcesWithDefaultAuthorizationStrategies(List testAuthorizationStrategies, List claimSetResourceClaims) - { - var resourceClaimWithDefaultAuthStrategies = new List(); - var random = new Random(); - foreach (var resourceClaim in claimSetResourceClaims) - { - var testAuthorizationStrategy = testAuthorizationStrategies[random.Next(testAuthorizationStrategies.Count)]; - - var resourceClaimWithDefaultAuthStrategy = new ResourceClaimAuthorizationMetadata - { - ResourceClaim = resourceClaim.ResourceClaim, - Action = resourceClaim.Action, - AuthorizationStrategy = testAuthorizationStrategy - }; - resourceClaimWithDefaultAuthStrategies.Add(resourceClaimWithDefaultAuthStrategy); - } - - Save(resourceClaimWithDefaultAuthStrategies.Cast().ToArray()); - - return resourceClaimWithDefaultAuthStrategies; - } - - private static IMapper Mapper() => new MapperConfiguration(cfg => cfg.AddProfile()).CreateMapper(); - - protected List ResourceClaimsForClaimSet(int securityContextClaimSetId) - { - List list = null; - using (var securityContext = CreateDbContext()) - { - var getResourcesByClaimSetIdQuery = new ClaimSetEditorTypes.GetResourcesByClaimSetIdQuery(new StubOdsSecurityModelVersionResolver.V3_5(), - new ClaimSetEditorTypes.GetResourcesByClaimSetIdQueryV53Service(securityContext, Mapper()), null); - list = getResourcesByClaimSetIdQuery.AllResources(securityContextClaimSetId).ToList(); - } - return list; - } - - protected ClaimSetEditorTypes.ResourceClaim SingleResourceClaimForClaimSet(int securityContextClaimSetId, int resourceClaimId) - { - ClaimSetEditorTypes.ResourceClaim resourceClaim = null; - using (var securityContext = CreateDbContext()) - { - var getResourcesByClaimSetIdQuery = new ClaimSetEditorTypes.GetResourcesByClaimSetIdQuery(new StubOdsSecurityModelVersionResolver.V3_5(), - new ClaimSetEditorTypes.GetResourcesByClaimSetIdQueryV53Service(securityContext, Mapper()), null); - resourceClaim = getResourcesByClaimSetIdQuery.SingleResource(securityContextClaimSetId, resourceClaimId); - } - return resourceClaim; - } -} diff --git a/Application/EdFi.Ods.AdminApi.DBTests/SecurityDataTestBase.cs b/Application/EdFi.Ods.AdminApi.DBTests/SecurityDataTestBase.cs index 53027f429..a98df227b 100644 --- a/Application/EdFi.Ods.AdminApi.DBTests/SecurityDataTestBase.cs +++ b/Application/EdFi.Ods.AdminApi.DBTests/SecurityDataTestBase.cs @@ -338,8 +338,7 @@ protected IReadOnlyCollection SetupResourcesWithDefaultAuth List list = null; using (var securityContext = CreateDbContext()) { - var getResourcesByClaimSetIdQuery = new ClaimSetEditorTypes.GetResourcesByClaimSetIdQuery(new StubOdsSecurityModelVersionResolver.V6(), - null, new ClaimSetEditorTypes.GetResourcesByClaimSetIdQueryV6Service(securityContext, Mapper())); + var getResourcesByClaimSetIdQuery = new ClaimSetEditorTypes.GetResourcesByClaimSetIdQuery(new ClaimSetEditorTypes.GetResourcesByClaimSetIdQueryService(securityContext, Mapper())); list = getResourcesByClaimSetIdQuery.AllResources(securityContextClaimSetId).ToList(); } return list; @@ -350,8 +349,7 @@ protected ClaimSetEditorTypes.ResourceClaim SingleResourceClaimForClaimSet(int s ClaimSetEditorTypes.ResourceClaim resourceClaim = null; using (var securityContext = CreateDbContext()) { - var getResourcesByClaimSetIdQuery = new ClaimSetEditorTypes.GetResourcesByClaimSetIdQuery(new StubOdsSecurityModelVersionResolver.V6(), - null, new ClaimSetEditorTypes.GetResourcesByClaimSetIdQueryV6Service(securityContext, Mapper())); + var getResourcesByClaimSetIdQuery = new ClaimSetEditorTypes.GetResourcesByClaimSetIdQuery(new ClaimSetEditorTypes.GetResourcesByClaimSetIdQueryService(securityContext, Mapper())); resourceClaim = getResourcesByClaimSetIdQuery.SingleResource(securityContextClaimSetId, resourceClaimId); } return resourceClaim; diff --git a/Application/EdFi.Ods.AdminApi.DBTests/SecurityTestDatabaseSetup.cs b/Application/EdFi.Ods.AdminApi.DBTests/SecurityTestDatabaseSetup.cs index 1936b8b3f..71aa1cdf1 100644 --- a/Application/EdFi.Ods.AdminApi.DBTests/SecurityTestDatabaseSetup.cs +++ b/Application/EdFi.Ods.AdminApi.DBTests/SecurityTestDatabaseSetup.cs @@ -25,12 +25,12 @@ private static SqlConnectionStringBuilder ConnectionStringBuilder { get { - return new SqlConnectionStringBuilder() { ConnectionString = Testing.SecurityV53ConnectionString }; + return new SqlConnectionStringBuilder() { ConnectionString = Testing.SecurityConnectionString }; } } public static void EnsureSecurityDatabase(string downloadPath, - string version = "5.3.1146", + string version = "6.1.972", string nugetSource = "https://pkgs.dev.azure.com/ed-fi-alliance/Ed-Fi-Alliance-OSS/_packaging/EdFi/nuget/v3/index.json", string packageName = "EdFi.Suite3.RestApi.Databases") { diff --git a/Application/EdFi.Ods.AdminApi.DBTests/StubOdsSecurityModelVersionResolver.cs b/Application/EdFi.Ods.AdminApi.DBTests/StubOdsSecurityModelVersionResolver.cs deleted file mode 100644 index 1e5fec43c..000000000 --- a/Application/EdFi.Ods.AdminApi.DBTests/StubOdsSecurityModelVersionResolver.cs +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. - -using EdFi.Ods.AdminApi.Infrastructure; - -namespace EdFi.Ods.AdminApi.DBTests; - -public static class StubOdsSecurityModelVersionResolver -{ - public class V3_5 : IOdsSecurityModelVersionResolver - { - public EdFiOdsSecurityModelCompatibility DetermineSecurityModel() - => EdFiOdsSecurityModelCompatibility.ThreeThroughFive; - } - - public class V6 : IOdsSecurityModelVersionResolver - { - public EdFiOdsSecurityModelCompatibility DetermineSecurityModel() - => EdFiOdsSecurityModelCompatibility.Six; - } -} diff --git a/Application/EdFi.Ods.AdminApi.DBTests/Testing.cs b/Application/EdFi.Ods.AdminApi.DBTests/Testing.cs index d5e8f9682..8f37063c5 100644 --- a/Application/EdFi.Ods.AdminApi.DBTests/Testing.cs +++ b/Application/EdFi.Ods.AdminApi.DBTests/Testing.cs @@ -2,7 +2,6 @@ // Licensed to the Ed-Fi Alliance under one or more agreements. // The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. // See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; using EdFi.Ods.AdminApi.Helpers; using Microsoft.EntityFrameworkCore; @@ -34,8 +33,6 @@ public static IConfiguration Configuration() public static string SecurityConnectionString { get { return Configuration().GetConnectionString("Security"); } } - public static string SecurityV53ConnectionString { get { return Configuration().GetConnectionString("SecurityV53"); } } - public static int DefaultPageSizeOffset => (int)Configuration().GetValue(typeof(int), "AppSettings:DefaultPageSizeOffset"); public static int DefaultPageSizeLimit => (int)Configuration().GetValue(typeof(int), "AppSettings:DefaultPageSizeLimit"); diff --git a/Application/EdFi.Ods.AdminApi.DBTests/appsettings.json b/Application/EdFi.Ods.AdminApi.DBTests/appsettings.json index 399954041..3346e8d90 100644 --- a/Application/EdFi.Ods.AdminApi.DBTests/appsettings.json +++ b/Application/EdFi.Ods.AdminApi.DBTests/appsettings.json @@ -10,7 +10,6 @@ }, "ConnectionStrings": { "Admin": "Data Source=.\\;Initial Catalog=EdFi_Admin_Test;Integrated Security=True;Encrypt=false;Trusted_Connection=true", - "Security": "Data Source=.\\;Initial Catalog=EdFi_Security_Test;Integrated Security=True;Encrypt=false;Trusted_Connection=true", - "SecurityV53": "Data Source=.\\;Initial Catalog=EdFi_Security_Test_v53;Integrated Security=True;Encrypt=false;Trusted_Connection=true" + "Security": "Data Source=.\\;Initial Catalog=EdFi_Security_Test;Integrated Security=True;Encrypt=false;Trusted_Connection=true" } } diff --git a/Application/EdFi.Ods.AdminApi.UnitTests/Api/OdsSecurityVersionResolverTests.cs b/Application/EdFi.Ods.AdminApi.UnitTests/Api/OdsSecurityVersionResolverTests.cs deleted file mode 100644 index beda51292..000000000 --- a/Application/EdFi.Ods.AdminApi.UnitTests/Api/OdsSecurityVersionResolverTests.cs +++ /dev/null @@ -1,54 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. - -using System; -using NUnit.Framework; -using Shouldly; - -namespace EdFi.Ods.AdminApi.Infrastructure.UnitTests.Api; - -[TestFixture] -public class OdsSecurityVersionResolverTests -{ - [Test] - public static void ShouldReturnV3_5ForOdsV53() => new OdsSecurityVersionResolver("5.3") - .DetermineSecurityModel().ShouldBe(EdFiOdsSecurityModelCompatibility.ThreeThroughFive); - - [Test] - public static void ShouldReturnV3_5ForOdsV53Cqe() => new OdsSecurityVersionResolver("5.3-cqe") - .DetermineSecurityModel().ShouldBe(EdFiOdsSecurityModelCompatibility.FiveThreeCqe); - - [Test] - public static void ShouldReturnV6ForOds6() => new OdsSecurityVersionResolver("6.0") - .DetermineSecurityModel().ShouldBe(EdFiOdsSecurityModelCompatibility.Six); - - [Test] - public static void ShouldReturnV6ForOdsGreaterThanV6() => new OdsSecurityVersionResolver("6.1") - .DetermineSecurityModel().ShouldBe(EdFiOdsSecurityModelCompatibility.Six); - - [Test] - public static void ShouldThrowExceptionForOdsV3() - { - Should.Throw(() => new OdsSecurityVersionResolver("3.2.0").DetermineSecurityModel()); - } - - [Test] - public static void ShouldThrowExceptionForOdsV51() - { - Should.Throw(() => new OdsSecurityVersionResolver("5.1").DetermineSecurityModel()); - } - - [Test] - public static void ShouldThrowExceptionForOdsMuchGreaterThanV6() - { - Should.Throw(() => new OdsSecurityVersionResolver("10.1").DetermineSecurityModel()); - } - - [Test] - public static void ShouldThrowExceptionWhenValidApiReturnsNoVersion() - { - Should.Throw(() => new OdsSecurityVersionResolver(string.Empty).DetermineSecurityModel()); - } -} diff --git a/Application/EdFi.Ods.AdminApi.UnitTests/EdFi.Ods.AdminApi.UnitTests.csproj b/Application/EdFi.Ods.AdminApi.UnitTests/EdFi.Ods.AdminApi.UnitTests.csproj index 3630bf31b..580b06fdc 100644 --- a/Application/EdFi.Ods.AdminApi.UnitTests/EdFi.Ods.AdminApi.UnitTests.csproj +++ b/Application/EdFi.Ods.AdminApi.UnitTests/EdFi.Ods.AdminApi.UnitTests.csproj @@ -5,15 +5,15 @@ Copyright © 2023 Ed-Fi Alliance - - - - - + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/Application/EdFi.Ods.AdminApi/EdFi.Ods.AdminApi.csproj b/Application/EdFi.Ods.AdminApi/EdFi.Ods.AdminApi.csproj index d9f3ddbd8..f1aac6ca3 100644 --- a/Application/EdFi.Ods.AdminApi/EdFi.Ods.AdminApi.csproj +++ b/Application/EdFi.Ods.AdminApi/EdFi.Ods.AdminApi.csproj @@ -17,31 +17,28 @@ - - - - - - - - - Compatability - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Application/EdFi.Ods.AdminApi/Features/ClaimSets/AddClaimSet.cs b/Application/EdFi.Ods.AdminApi/Features/ClaimSets/AddClaimSet.cs index 3f4ee8984..8602c1aa0 100644 --- a/Application/EdFi.Ods.AdminApi/Features/ClaimSets/AddClaimSet.cs +++ b/Application/EdFi.Ods.AdminApi/Features/ClaimSets/AddClaimSet.cs @@ -7,7 +7,7 @@ using EdFi.Ods.AdminApi.Infrastructure; using EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; using EdFi.Ods.AdminApi.Infrastructure.Database.Queries; -using EdFi.Ods.AdminApi.Infrastructure.JsonContractResolvers; +using EdFi.Ods.AdminApi.Infrastructure.JsonContractResolvers; using EdFi.Ods.AdminApi.Infrastructure.Services.ClaimSetEditor; using FluentValidation; using Newtonsoft.Json; @@ -31,7 +31,6 @@ public async Task Handle(Validator validator, AddClaimSetCommand addCla IGetResourcesByClaimSetIdQuery getResourcesByClaimSetIdQuery, IGetApplicationsByClaimSetIdQuery getApplications, IAuthStrategyResolver strategyResolver, - IOdsSecurityModelVersionResolver odsSecurityModelResolver, IMapper mapper, Request request) { @@ -62,9 +61,8 @@ public async Task Handle(Validator validator, AddClaimSetCommand addCla new JsonSerializerSettings() { Formatting = Formatting.Indented, - ContractResolver = new ShouldSerializeContractResolver(odsSecurityModelResolver) - } - ); + ContractResolver = new ShouldSerializeContractResolver() + }); } [SwaggerSchema(Title = "AddClaimSetRequest")] @@ -84,7 +82,6 @@ public class Validator : AbstractValidator public Validator(IGetAllClaimSetsQuery getAllClaimSetsQuery, IGetResourceClaimsAsFlatListQuery getResourceClaimsAsFlatListQuery, IGetAllAuthorizationStrategiesQuery getAllAuthorizationStrategiesQuery, - IOdsSecurityModelVersionResolver resolver, IMapper mapper) { _getAllClaimSetsQuery = getAllClaimSetsQuery; @@ -105,7 +102,7 @@ public Validator(IGetAllClaimSetsQuery getAllClaimSetsQuery, RuleFor(m => m).Custom((claimSet, context) => { - var resourceClaimValidator = new ResourceClaimValidator(resolver); + var resourceClaimValidator = new ResourceClaimValidator(); if (claimSet.ResourceClaims != null && claimSet.ResourceClaims.Any()) { diff --git a/Application/EdFi.Ods.AdminApi/Features/ClaimSets/ClaimSetModel.cs b/Application/EdFi.Ods.AdminApi/Features/ClaimSets/ClaimSetModel.cs index ff74545a0..9e0fb9af8 100644 --- a/Application/EdFi.Ods.AdminApi/Features/ClaimSets/ClaimSetModel.cs +++ b/Application/EdFi.Ods.AdminApi/Features/ClaimSets/ClaimSetModel.cs @@ -5,8 +5,6 @@ using EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; using Swashbuckle.AspNetCore.Annotations; -using EdFi.Ods.AdminApi.Infrastructure.Documentation; -using EdFi.Ods.AdminApi.Infrastructure; namespace EdFi.Ods.AdminApi.Features.ClaimSets; @@ -33,7 +31,7 @@ public class ResourceClaimModel public bool Read { get; set; } public bool Update { get; set; } public bool Delete { get; set; } - [SwaggerExclude(EdFiOdsSecurityModelCompatibility.ThreeThroughFive)] + //[SwaggerExclude(EdFiOdsSecurityModelCompatibility.ThreeThroughFive)] public bool ReadChanges { get; set; } public AuthorizationStrategiesModel?[] DefaultAuthStrategiesForCRUD { get; set; } public AuthorizationStrategiesModel?[] AuthStrategyOverridesForCRUD { get; set; } @@ -56,7 +54,7 @@ public class RequestResourceClaimModel public bool Read { get; set; } public bool Update { get; set; } public bool Delete { get; set; } - [SwaggerExclude(EdFiOdsSecurityModelCompatibility.ThreeThroughFive)] + //[SwaggerExclude(EdFiOdsSecurityModelCompatibility.ThreeThroughFive)] public bool ReadChanges { get; set; } public AuthorizationStrategiesModel?[] AuthStrategyOverridesForCRUD { get; set; } @@ -88,12 +86,12 @@ public AuthorizationStrategiesModel() [SwaggerSchema(Title = "AuthorizationStrategy")] public class AuthorizationStrategyModel { - [SwaggerExclude] + //[SwaggerExclude] public int AuthStrategyId { get; set; } public string? AuthStrategyName { get; set; } - [SwaggerExclude] + //[SwaggerExclude] public string? DisplayName { get; set; } public bool IsInheritedFromParent { get; set; } diff --git a/Application/EdFi.Ods.AdminApi/Features/ClaimSets/EditClaimSet.cs b/Application/EdFi.Ods.AdminApi/Features/ClaimSets/EditClaimSet.cs index 85bc47143..1f2e24361 100644 --- a/Application/EdFi.Ods.AdminApi/Features/ClaimSets/EditClaimSet.cs +++ b/Application/EdFi.Ods.AdminApi/Features/ClaimSets/EditClaimSet.cs @@ -8,7 +8,7 @@ using EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; using EdFi.Ods.AdminApi.Infrastructure.Database.Queries; using EdFi.Ods.AdminApi.Infrastructure.ErrorHandling; -using EdFi.Ods.AdminApi.Infrastructure.JsonContractResolvers; +using EdFi.Ods.AdminApi.Infrastructure.JsonContractResolvers; using EdFi.Ods.AdminApi.Infrastructure.Services.ClaimSetEditor; using FluentValidation; using FluentValidation.Results; @@ -33,7 +33,6 @@ public async Task Handle(Validator validator, IEditClaimSetCommand edit IGetResourcesByClaimSetIdQuery getResourcesByClaimSetIdQuery, IGetApplicationsByClaimSetIdQuery getApplications, IAuthStrategyResolver strategyResolver, - IOdsSecurityModelVersionResolver odsSecurityModelResolver, IMapper mapper, Request request, int id) { @@ -75,9 +74,8 @@ public async Task Handle(Validator validator, IEditClaimSetCommand edit new JsonSerializerSettings() { Formatting = Formatting.Indented, - ContractResolver = new ShouldSerializeContractResolver(odsSecurityModelResolver) - } - ); + ContractResolver = new ShouldSerializeContractResolver() + }); } [SwaggerSchema(Title = "EditClaimSetRequest")] @@ -102,7 +100,6 @@ public Validator(IGetClaimSetByIdQuery getClaimSetByIdQuery, IGetAllClaimSetsQuery getAllClaimSetsQuery, IGetResourceClaimsAsFlatListQuery getResourceClaimsAsFlatListQuery, IGetAllAuthorizationStrategiesQuery getAllAuthorizationStrategiesQuery, - IOdsSecurityModelVersionResolver resolver, IMapper mapper) { _getClaimSetByIdQuery = getClaimSetByIdQuery; @@ -132,7 +129,7 @@ public Validator(IGetClaimSetByIdQuery getClaimSetByIdQuery, RuleFor(m => m).Custom((claimSet, context) => { - var resourceClaimValidator = new ResourceClaimValidator(resolver); + var resourceClaimValidator = new ResourceClaimValidator(); if (claimSet.ResourceClaims != null && claimSet.ResourceClaims.Any()) { diff --git a/Application/EdFi.Ods.AdminApi/Features/ClaimSets/ReadClaimSets.cs b/Application/EdFi.Ods.AdminApi/Features/ClaimSets/ReadClaimSets.cs index c0aebc98c..c47842d6c 100644 --- a/Application/EdFi.Ods.AdminApi/Features/ClaimSets/ReadClaimSets.cs +++ b/Application/EdFi.Ods.AdminApi/Features/ClaimSets/ReadClaimSets.cs @@ -43,7 +43,7 @@ internal Task GetClaimSets( internal Task GetClaimSet(IGetClaimSetByIdQuery getClaimSetByIdQuery, IGetResourcesByClaimSetIdQuery getResourcesByClaimSetIdQuery, IGetApplicationsByClaimSetIdQuery getApplications, - IOdsSecurityModelVersionResolver odsSecurityModelResolver, IMapper mapper, int id) + IMapper mapper, int id) { ClaimSet claimSet; try @@ -62,7 +62,7 @@ internal Task GetClaimSet(IGetClaimSetByIdQuery getClaimSetByIdQuery, return Task.FromResult(AdminApiResponse.Ok(claimSetData, new JsonSerializerSettings() { Formatting = Formatting.Indented, - ContractResolver = new ShouldSerializeContractResolver(odsSecurityModelResolver) + ContractResolver = new ShouldSerializeContractResolver() })); } } diff --git a/Application/EdFi.Ods.AdminApi/Features/ClaimSets/ResourceClaimValidator.cs b/Application/EdFi.Ods.AdminApi/Features/ClaimSets/ResourceClaimValidator.cs index c42a1cc13..60d9956f3 100644 --- a/Application/EdFi.Ods.AdminApi/Features/ClaimSets/ResourceClaimValidator.cs +++ b/Application/EdFi.Ods.AdminApi/Features/ClaimSets/ResourceClaimValidator.cs @@ -3,23 +3,19 @@ // The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. // See the LICENSE and NOTICES files in the project root for more information. -using System.Data; -using AutoMapper; -using EdFi.Ods.AdminApi.Infrastructure; using EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; using FluentValidation; +using System.Data; namespace EdFi.Ods.AdminApi.Features.ClaimSets; public class ResourceClaimValidator { private static List? _duplicateResources; - private readonly EdFiOdsSecurityModelCompatibility _odsApiVersion; - public ResourceClaimValidator(IOdsSecurityModelVersionResolver resolver) + public ResourceClaimValidator() { _duplicateResources = new List(); - _odsApiVersion = resolver.DetermineSecurityModel(); } public void Validate(Lookup dbResourceClaims, @@ -53,34 +49,8 @@ public void Validate(Lookup dbResourceClaims, if (resourceClaim.AuthStrategyOverridesForCRUD.Any()) { - if (_odsApiVersion == EdFiOdsSecurityModelCompatibility.Six || _odsApiVersion == EdFiOdsSecurityModelCompatibility.FiveThreeCqe) - { - if (resourceClaim.AuthStrategyOverridesForCRUD.Count() < 5) - context.AddFailure(propertyName, "Please provide a list of 5 elements for 'AuthStrategyOverridesForCRUD' in the Resource name: '{ResourceClaimName}'"); - } - else if (_odsApiVersion == EdFiOdsSecurityModelCompatibility.ThreeThroughFive) - { - if (resourceClaim.AuthStrategyOverridesForCRUD.Count() < 4) - context.AddFailure(propertyName, "Please provide a list of 4 elements 'AuthStrategyOverridesForCRUD' in the Resource name: '{ResourceClaimName}'"); - } - else - { - foreach (var authStrategyOverride in resourceClaim.AuthStrategyOverridesForCRUD) - { - if (authStrategyOverride != null && authStrategyOverride.AuthorizationStrategies.Any()) - { - foreach (var authStrategy in authStrategyOverride.AuthorizationStrategies) - { - if (authStrategy?.AuthStrategyName != null && !dbAuthStrategies.Contains(authStrategy.AuthStrategyName)) - { - context.MessageFormatter.AppendArgument("AuthStrategyName", authStrategy.AuthStrategyName); - context.AddFailure(propertyName, "This resource claim contains an authorization strategy which is not in the system. Claimset Name: '{ClaimSetName}' Resource name: '{ResourceClaimName}' Authorization strategy: '{AuthStrategyName}'.\n"); - } - } - } - - } - } + if (resourceClaim.AuthStrategyOverridesForCRUD.Count() < 5) + context.AddFailure(propertyName, "Please provide a list of 5 elements for 'AuthStrategyOverridesForCRUD' in the Resource name: '{ResourceClaimName}'"); } if (resourceClaim.Children.Any()) diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/AutoMapper/AdminApiMappingProfile.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/AutoMapper/AdminApiMappingProfile.cs index ff17ac753..34238c67b 100644 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/AutoMapper/AdminApiMappingProfile.cs +++ b/Application/EdFi.Ods.AdminApi/Infrastructure/AutoMapper/AdminApiMappingProfile.cs @@ -2,19 +2,17 @@ // Licensed to the Ed-Fi Alliance under one or more agreements. // The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. // See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; - + using EdFi.Admin.DataAccess.Models; -using Profile = AutoMapper.Profile; -using EdFi.Ods.AdminApi.Features.Vendors; using EdFi.Ods.AdminApi.Features.Applications; -using EdFi.Ods.AdminApi.Infrastructure.Database.Commands; using EdFi.Ods.AdminApi.Features.ClaimSets; +using EdFi.Ods.AdminApi.Features.OdsInstances; +using EdFi.Ods.AdminApi.Features.Vendors; +using EdFi.Ods.AdminApi.Infrastructure.Database.Commands; using EdFi.Ods.AdminApi.Infrastructure.Helpers; -using EdFi.Ods.AdminApi.Infrastructure.Services.ClaimSetEditor; -using EdFi.Ods.AdminApi.Features.OdsInstances; -using EdFi.Common.Extensions; - +using EdFi.Ods.AdminApi.Infrastructure.Services.ClaimSetEditor; +using Profile = AutoMapper.Profile; + namespace EdFi.Ods.AdminApi.Infrastructure; public class AdminApiMappingProfile : Profile @@ -36,11 +34,11 @@ public AdminApiMappingProfile() CreateMap() .ForMember(dst => dst.EducationOrganizationIds, opt => opt.MapFrom(src => src.EducationOrganizationIds())) - .ForMember(dst => dst.ProfileName, opt => opt.MapFrom(src => src.ProfileName())) - .ForMember(dst => dst.OdsInstanceId, opt => opt.MapFrom(src => src.OdsInstance.OdsInstanceId)) + .ForMember(dst => dst.ProfileName, opt => opt.MapFrom(src => src.ProfileName())) + .ForMember(dst => dst.OdsInstanceId, opt => opt.MapFrom(src => src.OdsInstance.OdsInstanceId)) .ForMember(dst => dst.OdsInstanceName, opt => opt.MapFrom(src => src.OdsInstanceName())) .ForMember(dst => dst.VendorId, opt => opt.MapFrom(src => src.VendorId())) - .ForMember(dst => dst.Profiles, opt => opt.MapFrom(src => src.Profiles())); + .ForMember(dst => dst.Profiles, opt => opt.MapFrom(src => src.Profiles())); CreateMap() @@ -51,13 +49,13 @@ public AdminApiMappingProfile() CreateMap() .ForMember(dst => dst.ApplicationId, opt => opt.MapFrom(src => src.Application.ApplicationId)) .ForMember(dst => dst.Key, opt => opt.MapFrom(src => src.Key)) - .ForMember(dst => dst.Secret, opt => opt.MapFrom(src => src.Secret)); - - CreateMap() + .ForMember(dst => dst.Secret, opt => opt.MapFrom(src => src.Secret)); + + CreateMap() //.ForMember(dst => dst.Name, opt => opt.MapFrom(src => src.Name)) .ForMember(dst => dst.Name, opt => opt.MapFrom(src => src.Name)) .ForMember(dst => dst.InstanceType, opt => opt.MapFrom(src => src.InstanceType)) - .ForMember(dst => dst.Version, opt => opt.MapFrom(src => src.Version)) + .ForMember(dst => dst.Version, opt => opt.MapFrom(src => src.Version)) .ForMember(dst => dst.IsExtended, opt => opt.MapFrom(src => src.IsExtended)) .ForMember(dst => dst.Status, opt => opt.MapFrom(src => src.Status)); @@ -68,7 +66,7 @@ public AdminApiMappingProfile() CreateMap() .ForMember(dst => dst.Id, opt => opt.MapFrom(src => src.Id)) - .ForMember(dst => dst.Name, opt => opt.MapFrom(src => src.Name)) + .ForMember(dst => dst.Name, opt => opt.MapFrom(src => src.Name)) .ForMember(dst => dst.IsSystemReserved, opt => opt.MapFrom(src => !src.IsEditable)); CreateMap() @@ -80,8 +78,8 @@ public AdminApiMappingProfile() .ForMember(dst => dst.ReadChanges, opt => opt.MapFrom(src => src.ReadChanges)) .ForMember(dst => dst.AuthStrategyOverridesForCRUD, opt => opt.MapFrom(src => src.AuthStrategyOverridesForCRUD)) .ForMember(dst => dst.DefaultAuthStrategiesForCRUD, opt => opt.MapFrom(src => src.DefaultAuthStrategiesForCRUD)) - .ForMember(dst => dst.Children, opt => opt.MapFrom(src => src.Children)); - + .ForMember(dst => dst.Children, opt => opt.MapFrom(src => src.Children)); + CreateMap() .ForMember(dst => dst.AuthStrategyId, opt => opt.MapFrom(src => src.AuthStrategyId)) .ForMember(dst => dst.AuthStrategyName, opt => opt.MapFrom(src => src.AuthStrategyName)) @@ -94,11 +92,6 @@ public AdminApiMappingProfile() .ForMember(dst => dst.DisplayName, opt => opt.MapFrom(src => src.DisplayName)) .ForMember(dst => dst.IsInheritedFromParent, opt => opt.MapFrom(src => src.IsInheritedFromParent)); - CreateMap() - .ForMember(dst => dst.AuthStrategyName, opt => opt.MapFrom(src => src.AuthorizationStrategyName)) - .ForMember(dst => dst.AuthStrategyId, opt => opt.MapFrom(src => src.AuthorizationStrategyId)) - .ForMember(dst => dst.IsInheritedFromParent, opt => opt.Ignore()); - CreateMap() .ForMember(dst => dst.AuthStrategyName, opt => opt.MapFrom(src => src.AuthorizationStrategyName)) .ForMember(dst => dst.AuthStrategyId, opt => opt.MapFrom(src => src.AuthorizationStrategyId)) @@ -113,22 +106,22 @@ public AdminApiMappingProfile() .ForMember(dst => dst.ReadChanges, opt => opt.MapFrom(src => src.ReadChanges)) .ForMember(dst => dst.AuthStrategyOverridesForCRUD, opt => opt.MapFrom(src => src.AuthStrategyOverridesForCRUD)) .ForMember(dst => dst.DefaultAuthStrategiesForCRUD, opt => opt.MapFrom(src => src.DefaultAuthStrategiesForCRUD)) - .ForMember(dst => dst.Children, opt => opt.MapFrom(src => src.Children)); - - CreateMap() - .ForMember(dst => dst.AuthorizationStrategies, opt => opt.MapFrom(src => src.AuthorizationStrategies)).ReverseMap(); - ; - - CreateMap() - .ForMember(dst => dst.Name, opt => opt.MapFrom(src => src.Name)) - .ForMember(dst => dst.Read, opt => opt.MapFrom(src => src.Read)) - .ForMember(dst => dst.Update, opt => opt.MapFrom(src => src.Update)) - .ForMember(dst => dst.Create, opt => opt.MapFrom(src => src.Create)) - .ForMember(dst => dst.Delete, opt => opt.MapFrom(src => src.Delete)) - .ForMember(dst => dst.ReadChanges, opt => opt.MapFrom(src => src.ReadChanges)) - .ForMember(dst => dst.AuthStrategyOverridesForCRUD, opt => opt.MapFrom(src => src.AuthStrategyOverridesForCRUD)) - .ForMember(dst => dst.Children, opt => opt.MapFrom(src => src.Children)); - + .ForMember(dst => dst.Children, opt => opt.MapFrom(src => src.Children)); + + CreateMap() + .ForMember(dst => dst.AuthorizationStrategies, opt => opt.MapFrom(src => src.AuthorizationStrategies)).ReverseMap(); + ; + + CreateMap() + .ForMember(dst => dst.Name, opt => opt.MapFrom(src => src.Name)) + .ForMember(dst => dst.Read, opt => opt.MapFrom(src => src.Read)) + .ForMember(dst => dst.Update, opt => opt.MapFrom(src => src.Update)) + .ForMember(dst => dst.Create, opt => opt.MapFrom(src => src.Create)) + .ForMember(dst => dst.Delete, opt => opt.MapFrom(src => src.Delete)) + .ForMember(dst => dst.ReadChanges, opt => opt.MapFrom(src => src.ReadChanges)) + .ForMember(dst => dst.AuthStrategyOverridesForCRUD, opt => opt.MapFrom(src => src.AuthStrategyOverridesForCRUD)) + .ForMember(dst => dst.Children, opt => opt.MapFrom(src => src.Children)); + CreateMap() .ForMember(dst => dst.Name, opt => opt.MapFrom(src => src.Name)) .ForMember(dst => dst.Read, opt => opt.MapFrom(src => src.Read)) diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Database/Commands/EditApplicationCommand.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Database/Commands/EditApplicationCommand.cs index 09544c9c7..9c578bcd3 100644 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Database/Commands/EditApplicationCommand.cs +++ b/Application/EdFi.Ods.AdminApi/Infrastructure/Database/Commands/EditApplicationCommand.cs @@ -2,14 +2,13 @@ // Licensed to the Ed-Fi Alliance under one or more agreements. // The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. // See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; -using System.Collections.ObjectModel; using EdFi.Admin.DataAccess.Contexts; using EdFi.Admin.DataAccess.Models; using EdFi.Common.Utils.Extensions; using EdFi.Ods.AdminApi.Infrastructure.Database.Queries; using Microsoft.EntityFrameworkCore; +using System.Collections.ObjectModel; namespace EdFi.Ods.AdminApi.Infrastructure.Database.Commands; diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Documentation/SwaggerExcludeSchemaFilter.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Documentation/SwaggerExcludeSchemaFilter.cs index 9171e62c2..5de5025e9 100644 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Documentation/SwaggerExcludeSchemaFilter.cs +++ b/Application/EdFi.Ods.AdminApi/Infrastructure/Documentation/SwaggerExcludeSchemaFilter.cs @@ -8,44 +8,3 @@ using System.Reflection; namespace EdFi.Ods.AdminApi.Infrastructure.Documentation; - -[AttributeUsage(AttributeTargets.Property)] -public class SwaggerExcludeAttribute : Attribute -{ - public EdFiOdsSecurityModelCompatibility VersionCompatibility { get; set; } - public SwaggerExcludeAttribute(EdFiOdsSecurityModelCompatibility version = EdFiOdsSecurityModelCompatibility.Both) - { - VersionCompatibility = version; - } -} - -public class SwaggerExcludeSchemaFilter : ISchemaFilter -{ - private readonly IOdsSecurityModelVersionResolver _odsSecurityModelResolver; - - public SwaggerExcludeSchemaFilter(IOdsSecurityModelVersionResolver odsSecurityModelResolver) - { - _odsSecurityModelResolver = odsSecurityModelResolver; - } - - public void Apply(OpenApiSchema schema, SchemaFilterContext context) - { - var properties = context.Type.GetProperties(); - var version = _odsSecurityModelResolver.DetermineSecurityModel(); - foreach (var property in properties) - { - var attribute = property.GetCustomAttribute(typeof(SwaggerExcludeAttribute)); - var propertyNameInCamelCasing = char.ToLowerInvariant(property.Name[0]) + property.Name[1..]; - - if (attribute != null) - { - var swaggerExcludeAttribute = property.CustomAttributes.First(a => a.AttributeType.Name == nameof(SwaggerExcludeAttribute)); - var odsVersionValue = swaggerExcludeAttribute.ConstructorArguments.First().Value; - if (odsVersionValue != null && - ((EdFiOdsSecurityModelCompatibility)odsVersionValue == EdFiOdsSecurityModelCompatibility.Both || - (EdFiOdsSecurityModelCompatibility)odsVersionValue == version)) - schema.Properties.Remove(propertyNameInCamelCasing); - } - } - } -} diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/JsonContractResolvers/ShouldSerializeContractResolver.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/JsonContractResolvers/ShouldSerializeContractResolver.cs index 28e2f9f37..06e3392ec 100644 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/JsonContractResolvers/ShouldSerializeContractResolver.cs +++ b/Application/EdFi.Ods.AdminApi/Infrastructure/JsonContractResolvers/ShouldSerializeContractResolver.cs @@ -4,34 +4,27 @@ // See the LICENSE and NOTICES files in the project root for more information. using EdFi.Ods.AdminApi.Features.ClaimSets; -using Newtonsoft.Json.Serialization; using Newtonsoft.Json; +using Newtonsoft.Json.Serialization; using System.Reflection; namespace EdFi.Ods.AdminApi.Infrastructure.JsonContractResolvers; public class ShouldSerializeContractResolver : DefaultContractResolver { - private readonly IOdsSecurityModelVersionResolver _odsSecurityModelResolver; - - public ShouldSerializeContractResolver(IOdsSecurityModelVersionResolver resolver) : base() + public ShouldSerializeContractResolver() : base() { - _odsSecurityModelResolver = resolver; } protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization) { - JsonProperty property = base.CreateProperty(member, memberSerialization); + var property = base.CreateProperty(member, memberSerialization); - if (property.DeclaringType == typeof(ResourceClaimModel) && (property.PropertyName is not null && property.PropertyName.ToLowerInvariant() == "readchanges")) + if (property.DeclaringType == typeof(ResourceClaimModel) && + string.Equals(property.PropertyName, "readChanges", StringComparison.OrdinalIgnoreCase)) { - property.ShouldSerialize = - instance => - { - var securityModel = _odsSecurityModelResolver.DetermineSecurityModel(); - return securityModel is EdFiOdsSecurityModelCompatibility.Six or - EdFiOdsSecurityModelCompatibility.FiveThreeCqe; - }; + property.ShouldSerialize = _ => true; } + property.PropertyName = char.ToLowerInvariant(property.PropertyName![0]) + property.PropertyName[1..]; return property; } diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/OdsSecurityVersionResolver.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/OdsSecurityVersionResolver.cs index 35e6ed6f6..85bc5b572 100644 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/OdsSecurityVersionResolver.cs +++ b/Application/EdFi.Ods.AdminApi/Infrastructure/OdsSecurityVersionResolver.cs @@ -8,35 +8,35 @@ namespace EdFi.Ods.AdminApi.Infrastructure; -public interface IOdsSecurityModelVersionResolver +public interface IOdsSecurityModelVersionResolver2 { - EdFiOdsSecurityModelCompatibility DetermineSecurityModel(); + EdFiOdsSecurityModelCompatibility2 DetermineSecurityModel(); } -public class OdsSecurityVersionResolver : IOdsSecurityModelVersionResolver +public class OdsSecurityVersionResolver2 : IOdsSecurityModelVersionResolver2 { private readonly ILog _log; - private readonly Lazy _modelVersion; + private readonly Lazy _modelVersion; private readonly string _odsApiVersion; - public OdsSecurityVersionResolver(string odsApiVersion) + public OdsSecurityVersionResolver2(string odsApiVersion) { _odsApiVersion = odsApiVersion; - _log = LogManager.GetLogger(typeof(OdsSecurityVersionResolver)); - _modelVersion = new Lazy(InitializeModelVersion); + _log = LogManager.GetLogger(typeof(OdsSecurityVersionResolver2)); + _modelVersion = new Lazy(InitializeModelVersion); } - public EdFiOdsSecurityModelCompatibility DetermineSecurityModel() => _modelVersion.Value; + public EdFiOdsSecurityModelCompatibility2 DetermineSecurityModel() => _modelVersion.Value; - private EdFiOdsSecurityModelCompatibility InitializeModelVersion() + private EdFiOdsSecurityModelCompatibility2 InitializeModelVersion() { try { return _odsApiVersion switch { - "5.3" => EdFiOdsSecurityModelCompatibility.ThreeThroughFive, - "5.3-cqe" => EdFiOdsSecurityModelCompatibility.FiveThreeCqe, - "6.0" or "6.1" => EdFiOdsSecurityModelCompatibility.Six, + "5.3" => EdFiOdsSecurityModelCompatibility2.ThreeThroughFive, + "5.3-cqe" => EdFiOdsSecurityModelCompatibility2.FiveThreeCqe, + "6.0" or "6.1" => EdFiOdsSecurityModelCompatibility2.Six, _ => throw new SwitchExpressionException() }; } @@ -48,16 +48,16 @@ private EdFiOdsSecurityModelCompatibility InitializeModelVersion() } } -public class EdFiOdsSecurityModelCompatibilityException : NotImplementedException +public class EdFiOdsSecurityModelCompatibilityException2 : NotImplementedException { - public EdFiOdsSecurityModelCompatibilityException() + public EdFiOdsSecurityModelCompatibilityException2() : base("Handling for security model not implemented") { } - public EdFiOdsSecurityModelCompatibilityException(EdFiOdsSecurityModelCompatibility version) + public EdFiOdsSecurityModelCompatibilityException2(EdFiOdsSecurityModelCompatibility2 version) : base($"Handling for security model for version {version} not implemented") { } - public EdFiOdsSecurityModelCompatibilityException(string message) : base(message) { } + public EdFiOdsSecurityModelCompatibilityException2(string message) : base(message) { } } -public enum EdFiOdsSecurityModelCompatibility +public enum EdFiOdsSecurityModelCompatibility2 { ThreeThroughFive = 1, Six = 2, diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/AddClaimSetCommand.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/AddClaimSetCommand.cs index 7018ace2b..be78025f7 100644 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/AddClaimSetCommand.cs +++ b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/AddClaimSetCommand.cs @@ -7,29 +7,16 @@ namespace EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; public class AddClaimSetCommand { - private readonly IOdsSecurityModelVersionResolver _resolver; - private readonly AddClaimSetCommandV53Service _v53Service; - private readonly AddClaimSetCommandV6Service _v6Service; + private readonly AddClaimSetCommandService _service; - public AddClaimSetCommand(IOdsSecurityModelVersionResolver resolver, - AddClaimSetCommandV53Service v53Service, - AddClaimSetCommandV6Service v6Service) + public AddClaimSetCommand(AddClaimSetCommandService service) { - _resolver = resolver; - _v53Service = v53Service; - _v6Service = v6Service; + _service = service; } public int Execute(IAddClaimSetModel claimSet) { - var securityModel = _resolver.DetermineSecurityModel(); - - return securityModel switch - { - EdFiOdsSecurityModelCompatibility.ThreeThroughFive or EdFiOdsSecurityModelCompatibility.FiveThreeCqe => _v53Service.Execute(claimSet), - EdFiOdsSecurityModelCompatibility.Six => _v6Service.Execute(claimSet), - _ => throw new EdFiOdsSecurityModelCompatibilityException(securityModel), - }; + return _service.Execute(claimSet); } } diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/AddClaimSetCommandV6Service.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/AddClaimSetCommandService.cs similarity index 89% rename from Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/AddClaimSetCommandV6Service.cs rename to Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/AddClaimSetCommandService.cs index 4c76a7db3..b90afbbec 100644 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/AddClaimSetCommandV6Service.cs +++ b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/AddClaimSetCommandService.cs @@ -7,11 +7,11 @@ namespace EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; -public class AddClaimSetCommandV6Service +public class AddClaimSetCommandService { private readonly ISecurityContext _context; - public AddClaimSetCommandV6Service(ISecurityContext context) + public AddClaimSetCommandService(ISecurityContext context) { _context = context; } diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/AddClaimSetCommandV53Service.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/AddClaimSetCommandV53Service.cs deleted file mode 100644 index 65402718e..000000000 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/AddClaimSetCommandV53Service.cs +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; - -using ClaimSetEntity = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.ClaimSet; -using ISecurityContext = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Contexts.ISecurityContext; - -namespace EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; - -public class AddClaimSetCommandV53Service -{ - private readonly ISecurityContext _context; - - public AddClaimSetCommandV53Service(ISecurityContext context) - { - _context = context; - } - - public int Execute(IAddClaimSetModel claimSet) - { - var newClaimSet = new ClaimSetEntity - { - ClaimSetName = claimSet.ClaimSetName, - Application = _context.Applications.Single() - }; - _context.ClaimSets.Add(newClaimSet); - _context.SaveChanges(); - - return newClaimSet.ClaimSetId; - } -} diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/DeleteClaimSetCommand.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/DeleteClaimSetCommand.cs index 8b45b8f88..074776815 100644 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/DeleteClaimSetCommand.cs +++ b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/DeleteClaimSetCommand.cs @@ -3,8 +3,6 @@ // The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. // See the LICENSE and NOTICES files in the project root for more information. -using EdFi.Ods.AdminApi.Infrastructure; - namespace EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; public interface IDeleteClaimSetCommand @@ -14,34 +12,16 @@ public interface IDeleteClaimSetCommand public class DeleteClaimSetCommand : IDeleteClaimSetCommand { - private readonly IOdsSecurityModelVersionResolver _resolver; - private readonly DeleteClaimSetCommandV53Service _v53Service; - private readonly DeleteClaimSetCommandV6Service _v6Service; + private readonly DeleteClaimSetCommandService _service; - public DeleteClaimSetCommand(IOdsSecurityModelVersionResolver resolver, - DeleteClaimSetCommandV53Service v53Service, - DeleteClaimSetCommandV6Service v6Service) + public DeleteClaimSetCommand(DeleteClaimSetCommandService service) { - _resolver = resolver; - _v53Service = v53Service; - _v6Service = v6Service; + _service = service; } public void Execute(IDeleteClaimSetModel claimSet) { - var securityModel = _resolver.DetermineSecurityModel(); - - switch (securityModel) - { - case EdFiOdsSecurityModelCompatibility.ThreeThroughFive or EdFiOdsSecurityModelCompatibility.FiveThreeCqe: - _v53Service.Execute(claimSet); - break; - case EdFiOdsSecurityModelCompatibility.Six: - _v6Service.Execute(claimSet); - break; - default: - throw new EdFiOdsSecurityModelCompatibilityException(securityModel); - } + _service.Execute(claimSet); } } diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/DeleteClaimSetCommandV6Service.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/DeleteClaimSetCommandService.cs similarity index 94% rename from Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/DeleteClaimSetCommandV6Service.cs rename to Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/DeleteClaimSetCommandService.cs index e121d8356..e0084a534 100644 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/DeleteClaimSetCommandV6Service.cs +++ b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/DeleteClaimSetCommandService.cs @@ -9,11 +9,11 @@ using EdFi.Security.DataAccess.Contexts; namespace EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; -public class DeleteClaimSetCommandV6Service +public class DeleteClaimSetCommandService { private readonly ISecurityContext _context; - public DeleteClaimSetCommandV6Service(ISecurityContext context) + public DeleteClaimSetCommandService(ISecurityContext context) { _context = context; } diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/DeleteClaimSetCommandV53Service.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/DeleteClaimSetCommandV53Service.cs deleted file mode 100644 index eb5b534ee..000000000 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/DeleteClaimSetCommandV53Service.cs +++ /dev/null @@ -1,37 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; - -using Compatability::EdFi.SecurityCompatiblity53.DataAccess.Contexts; -using EdFi.Ods.AdminApi.Infrastructure.ErrorHandling; - -namespace EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; - -public class DeleteClaimSetCommandV53Service -{ - private readonly ISecurityContext _context; - - public DeleteClaimSetCommandV53Service(ISecurityContext context) - { - _context = context; - } - - public void Execute(IDeleteClaimSetModel claimSet) - { - var claimSetToDelete = _context.ClaimSets.Single(x => x.ClaimSetId == claimSet.Id); - - if (Constants.DefaultClaimSets.Contains(claimSetToDelete.ClaimSetName) || - Constants.SystemReservedClaimSets.Contains(claimSetToDelete.ClaimSetName)) - { - throw new AdminApiException($"Claim set({claimSetToDelete.ClaimSetName}) is system reserved.Can not be deleted."); - } - - var resourceClaimsForClaimSetId = - _context.ClaimSetResourceClaims.Where(x => x.ClaimSet.ClaimSetId == claimSet.Id).ToList(); - _context.ClaimSetResourceClaims.RemoveRange(resourceClaimsForClaimSetId); - _context.ClaimSets.Remove(claimSetToDelete); - _context.SaveChanges(); - } -} diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditClaimSetCommand.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditClaimSetCommand.cs index d79b5ae8f..fa1149492 100644 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditClaimSetCommand.cs +++ b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditClaimSetCommand.cs @@ -12,29 +12,16 @@ public interface IEditClaimSetCommand public class EditClaimSetCommand : IEditClaimSetCommand { - private readonly IOdsSecurityModelVersionResolver _resolver; - private readonly EditClaimSetCommandV53Service _v53Service; - private readonly EditClaimSetCommandV6Service _v6Service; + private readonly EditClaimSetCommandService _service; - public EditClaimSetCommand(IOdsSecurityModelVersionResolver resolver, - EditClaimSetCommandV53Service v53Service, - EditClaimSetCommandV6Service v6Service) + public EditClaimSetCommand(EditClaimSetCommandService service) { - _resolver = resolver; - _v53Service = v53Service; - _v6Service = v6Service; + _service = service; } public int Execute(IEditClaimSetModel claimSet) { - var securityModel = _resolver.DetermineSecurityModel(); - - return securityModel switch - { - EdFiOdsSecurityModelCompatibility.ThreeThroughFive or EdFiOdsSecurityModelCompatibility.FiveThreeCqe => _v53Service.Execute(claimSet), - EdFiOdsSecurityModelCompatibility.Six => _v6Service.Execute(claimSet), - _ => throw new EdFiOdsSecurityModelCompatibilityException(securityModel), - }; + return _service.Execute(claimSet); } } diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditClaimSetCommandV6Service.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditClaimSetCommandService.cs similarity index 93% rename from Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditClaimSetCommandV6Service.cs rename to Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditClaimSetCommandService.cs index ef81dd8f6..2d43f2849 100644 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditClaimSetCommandV6Service.cs +++ b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditClaimSetCommandService.cs @@ -9,12 +9,12 @@ namespace EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; -public class EditClaimSetCommandV6Service +public class EditClaimSetCommandService { private readonly ISecurityContext _securityContext; private readonly IUsersContext _usersContext; - public EditClaimSetCommandV6Service(ISecurityContext securityContext, IUsersContext usersContext) + public EditClaimSetCommandService(ISecurityContext securityContext, IUsersContext usersContext) { _securityContext = securityContext; _usersContext = usersContext; diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditClaimSetCommandV53Service.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditClaimSetCommandV53Service.cs deleted file mode 100644 index c0f5daf4e..000000000 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditClaimSetCommandV53Service.cs +++ /dev/null @@ -1,58 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; - -using Compatability::EdFi.SecurityCompatiblity53.DataAccess.Contexts; -using EdFi.Admin.DataAccess.Contexts; -using EdFi.Ods.AdminApi.Infrastructure.ErrorHandling; - -namespace EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; - -public class EditClaimSetCommandV53Service -{ - private readonly ISecurityContext _securityContext; - private readonly IUsersContext _usersContext; - - public EditClaimSetCommandV53Service(ISecurityContext securityContext, IUsersContext usersContext) - { - _securityContext = securityContext; - _usersContext = usersContext; - } - - public int Execute(IEditClaimSetModel claimSet) - { - var existingClaimSet = _securityContext.ClaimSets.Single(x => x.ClaimSetId == claimSet.ClaimSetId); - - if (Constants.DefaultClaimSets.Contains(existingClaimSet.ClaimSetName) || - Constants.SystemReservedClaimSets.Contains(existingClaimSet.ClaimSetName)) - { - throw new AdminApiException($"Claim set ({existingClaimSet.ClaimSetName}) is system reserved.May not be modified."); - } - - if (claimSet.ClaimSetName is null) throw new InvalidOperationException("Cannot have a null ClaimSetName"); - if (!claimSet.ClaimSetName.Equals(existingClaimSet.ClaimSetName, StringComparison.InvariantCultureIgnoreCase)) - { - ReAssociateApplicationsToRenamedClaimSet(existingClaimSet.ClaimSetName, claimSet.ClaimSetName); - } - - existingClaimSet.ClaimSetName = claimSet.ClaimSetName; - - void ReAssociateApplicationsToRenamedClaimSet(string existingClaimSetName, string newClaimSetName) - { - var associatedApplications = _usersContext.Applications - .Where(x => x.ClaimSetName == existingClaimSetName); - - foreach (var application in associatedApplications) - { - application.ClaimSetName = newClaimSetName; - } - } - - _securityContext.SaveChanges(); - _usersContext.SaveChanges(); - - return existingClaimSet.ClaimSetId; - } -} diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditResourceOnClaimSetCommand.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditResourceOnClaimSetCommand.cs index a62453bcd..57d593152 100644 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditResourceOnClaimSetCommand.cs +++ b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditResourceOnClaimSetCommand.cs @@ -5,35 +5,13 @@ namespace EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; -public class EditResourceOnClaimSetCommand +public class EditResourceOnClaimSetCommand(EditResourceOnClaimSetCommandService service) { - private readonly IOdsSecurityModelVersionResolver _resolver; - private readonly EditResourceOnClaimSetCommandV53Service _v53Service; - private readonly EditResourceOnClaimSetCommandV6Service _v6Service; - - public EditResourceOnClaimSetCommand(IOdsSecurityModelVersionResolver resolver, - EditResourceOnClaimSetCommandV53Service v53Service, - EditResourceOnClaimSetCommandV6Service v6Service) - { - _resolver = resolver; - _v53Service = v53Service; - _v6Service = v6Service; - } - + private readonly EditResourceOnClaimSetCommandService _service = service; + public void Execute(IEditResourceOnClaimSetModel model) { - var securityModel = _resolver.DetermineSecurityModel(); - switch (securityModel) - { - case EdFiOdsSecurityModelCompatibility.ThreeThroughFive or EdFiOdsSecurityModelCompatibility.FiveThreeCqe: - _v53Service.Execute(model); - break; - case EdFiOdsSecurityModelCompatibility.Six: - _v6Service.Execute(model); - break; - default: - throw new EdFiOdsSecurityModelCompatibilityException(securityModel); - } + _service.Execute(model); } } diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditResourceOnClaimSetCommandV6Service.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditResourceOnClaimSetCommandService.cs similarity index 97% rename from Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditResourceOnClaimSetCommandV6Service.cs rename to Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditResourceOnClaimSetCommandService.cs index f2e75f032..2b1e724e2 100644 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditResourceOnClaimSetCommandV6Service.cs +++ b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditResourceOnClaimSetCommandService.cs @@ -9,11 +9,11 @@ namespace EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; -public class EditResourceOnClaimSetCommandV6Service +public class EditResourceOnClaimSetCommandService { private readonly ISecurityContext _context; - public EditResourceOnClaimSetCommandV6Service(ISecurityContext context) + public EditResourceOnClaimSetCommandService(ISecurityContext context) { _context = context; } @@ -60,7 +60,7 @@ private void RemoveDisabledActionsFromClaimSet(ResourceClaim modelResourceClaim, else if (claimSetResourceClaim.Action.ActionName == Action.Delete.Value && !modelResourceClaim.Delete) { recordsToRemove.Add(claimSetResourceClaim); - } + } else if (claimSetResourceClaim.Action.ActionName == Action.ReadChanges.Value && !modelResourceClaim.ReadChanges) { recordsToRemove.Add(claimSetResourceClaim); @@ -119,8 +119,8 @@ private void AddEnabledActionsToClaimSet(ResourceClaim modelResourceClaim, IRead ClaimSet = claimSetToEdit, ResourceClaim = resourceClaimFromDb }); - } - + } + if (modelResourceClaim.ReadChanges && claimSetResourceClaimsToEdit.All(x => x.Action.ActionName != Action.ReadChanges.Value)) { recordsToAdd.Add(new ClaimSetResourceClaimAction diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditResourceOnClaimSetCommandV53Service.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditResourceOnClaimSetCommandV53Service.cs deleted file mode 100644 index d71d78348..000000000 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/EditResourceOnClaimSetCommandV53Service.cs +++ /dev/null @@ -1,144 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; - -using Compatability::EdFi.SecurityCompatiblity53.DataAccess.Contexts; -using Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models; -using Microsoft.EntityFrameworkCore; - -using SecurityClaimSet = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.ClaimSet; - -namespace EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; - -public class EditResourceOnClaimSetCommandV53Service -{ - private readonly ISecurityContext _context; - - public EditResourceOnClaimSetCommandV53Service(ISecurityContext context) - { - _context = context; - } - - public void Execute(IEditResourceOnClaimSetModel model) - { - var resourceClaimToEdit = model.ResourceClaim; - - if (resourceClaimToEdit is null) return; - - var claimSetToEdit = _context.ClaimSets.Single(x => x.ClaimSetId == model.ClaimSetId); - - var claimSetResourceClaimsToEdit = _context.ClaimSetResourceClaims - .Include(x => x.ResourceClaim) - .Include(x => x.Action) - .Include(x => x.ClaimSet) - .Where(x => x.ResourceClaim.ResourceClaimId == resourceClaimToEdit.Id && x.ClaimSet.ClaimSetId == claimSetToEdit.ClaimSetId) - .ToList(); - - AddEnabledActionsToClaimSet(resourceClaimToEdit, claimSetResourceClaimsToEdit, claimSetToEdit); - - RemoveDisabledActionsFromClaimSet(resourceClaimToEdit, claimSetResourceClaimsToEdit); - - _context.SaveChanges(); - } - - private void RemoveDisabledActionsFromClaimSet(ResourceClaim modelResourceClaim, IEnumerable resourceClaimsToEdit) - { - var recordsToRemove = new List(); - - foreach (var claimSetResourceClaim in resourceClaimsToEdit) - { - if (claimSetResourceClaim.Action.ActionName == Action.Create.Value && !modelResourceClaim.Create) - { - recordsToRemove.Add(claimSetResourceClaim); - } - else if (claimSetResourceClaim.Action.ActionName == Action.Read.Value && !modelResourceClaim.Read) - { - recordsToRemove.Add(claimSetResourceClaim); - } - else if (claimSetResourceClaim.Action.ActionName == Action.Update.Value && !modelResourceClaim.Update) - { - recordsToRemove.Add(claimSetResourceClaim); - } - else if (claimSetResourceClaim.Action.ActionName == Action.Delete.Value && !modelResourceClaim.Delete) - { - recordsToRemove.Add(claimSetResourceClaim); - } - else if (claimSetResourceClaim.Action.ActionName == Action.ReadChanges.Value && !modelResourceClaim.ReadChanges) - { - recordsToRemove.Add(claimSetResourceClaim); - } - } - - if (recordsToRemove.Any()) - { - _context.ClaimSetResourceClaims.RemoveRange(recordsToRemove); - } - } - - private void AddEnabledActionsToClaimSet(ResourceClaim modelResourceClaim, IReadOnlyCollection claimSetResourceClaimsToEdit, SecurityClaimSet claimSetToEdit) - { - var actionsFromDb = _context.Actions.ToList(); - - var resourceClaimFromDb = _context.ResourceClaims.Single(x => x.ResourceClaimId == modelResourceClaim.Id); - - var recordsToAdd = new List(); - - if (modelResourceClaim.Create && claimSetResourceClaimsToEdit.All(x => x.Action.ActionName != Action.Create.Value)) - { - recordsToAdd.Add(new ClaimSetResourceClaim - { - Action = actionsFromDb.Single(x => x.ActionName == Action.Create.Value), - ClaimSet = claimSetToEdit, - ResourceClaim = resourceClaimFromDb - }); - } - - if (modelResourceClaim.Read && claimSetResourceClaimsToEdit.All(x => x.Action.ActionName != Action.Read.Value)) - { - recordsToAdd.Add(new ClaimSetResourceClaim - { - Action = actionsFromDb.Single(x => x.ActionName == Action.Read.Value), - ClaimSet = claimSetToEdit, - ResourceClaim = resourceClaimFromDb - }); - } - - if (modelResourceClaim.Update && claimSetResourceClaimsToEdit.All(x => x.Action.ActionName != Action.Update.Value)) - { - recordsToAdd.Add(new ClaimSetResourceClaim - { - Action = actionsFromDb.Single(x => x.ActionName == Action.Update.Value), - ClaimSet = claimSetToEdit, - ResourceClaim = resourceClaimFromDb - }); - } - - if (modelResourceClaim.Delete && claimSetResourceClaimsToEdit.All(x => x.Action.ActionName != Action.Delete.Value)) - { - recordsToAdd.Add(new ClaimSetResourceClaim - { - Action = actionsFromDb.Single(x => x.ActionName == Action.Delete.Value), - ClaimSet = claimSetToEdit, - ResourceClaim = resourceClaimFromDb - }); - } - - if (modelResourceClaim.ReadChanges && claimSetResourceClaimsToEdit.All(x => x.Action.ActionName != Action.ReadChanges.Value)) - { - recordsToAdd.Add(new ClaimSetResourceClaim - { - Action = actionsFromDb.Single(x => x.ActionName == Action.ReadChanges.Value), - ClaimSet = claimSetToEdit, - ResourceClaim = resourceClaimFromDb - }); - } - - if (recordsToAdd.Any()) - { - _context.ClaimSetResourceClaims.AddRange(recordsToAdd); - } - } -} - diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetAllClaimSetsQuery.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetAllClaimSetsQuery.cs index ecfc89b40..6773b96b6 100644 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetAllClaimSetsQuery.cs +++ b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetAllClaimSetsQuery.cs @@ -15,40 +15,20 @@ public interface IGetAllClaimSetsQuery public class GetAllClaimSetsQuery : IGetAllClaimSetsQuery { - private readonly IOdsSecurityModelVersionResolver _resolver; - private readonly GetAllClaimSetsQueryV53Service _v53Service; - private readonly GetAllClaimSetsQueryV6Service _v6Service; + private readonly GetAllClaimSetsQueryService _service; - public GetAllClaimSetsQuery(IOdsSecurityModelVersionResolver resolver, - GetAllClaimSetsQueryV53Service v53Service, - GetAllClaimSetsQueryV6Service v6Service) + public GetAllClaimSetsQuery(GetAllClaimSetsQueryService service) { - _resolver = resolver; - _v53Service = v53Service; - _v6Service = v6Service; + _service = service; } public IReadOnlyList Execute() { - var securityModel = _resolver.DetermineSecurityModel(); - - return securityModel switch - { - EdFiOdsSecurityModelCompatibility.ThreeThroughFive or EdFiOdsSecurityModelCompatibility.FiveThreeCqe => _v53Service.Execute(), - EdFiOdsSecurityModelCompatibility.Six => _v6Service.Execute(), - _ => throw new EdFiOdsSecurityModelCompatibilityException(securityModel), - }; + return _service.Execute(); } public IReadOnlyList Execute(CommonQueryParams commonQueryParams) { - var securityModel = _resolver.DetermineSecurityModel(); - - return securityModel switch - { - EdFiOdsSecurityModelCompatibility.ThreeThroughFive or EdFiOdsSecurityModelCompatibility.FiveThreeCqe => _v53Service.Execute(commonQueryParams), - EdFiOdsSecurityModelCompatibility.Six => _v6Service.Execute(commonQueryParams), - _ => throw new EdFiOdsSecurityModelCompatibilityException(securityModel), - }; + return _service.Execute(commonQueryParams); } } diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetAllClaimSetsQueryV6Service.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetAllClaimSetsQueryService.cs similarity index 92% rename from Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetAllClaimSetsQueryV6Service.cs rename to Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetAllClaimSetsQueryService.cs index 356919f06..40de9a4ff 100644 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetAllClaimSetsQueryV6Service.cs +++ b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetAllClaimSetsQueryService.cs @@ -12,12 +12,12 @@ namespace EdFi.Ods.AdminApi.Infrastructure.Services.ClaimSetEditor; -public class GetAllClaimSetsQueryV6Service +public class GetAllClaimSetsQueryService { private readonly ISecurityContext _securityContext; private readonly IOptions _options; - public GetAllClaimSetsQueryV6Service(ISecurityContext securityContext, IOptions options) + public GetAllClaimSetsQueryService(ISecurityContext securityContext, IOptions options) { _securityContext = securityContext; _options = options; diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetAllClaimSetsQueryV53Service.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetAllClaimSetsQueryV53Service.cs deleted file mode 100644 index 28e0b0c03..000000000 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetAllClaimSetsQueryV53Service.cs +++ /dev/null @@ -1,56 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; - -using Compatability::EdFi.SecurityCompatiblity53.DataAccess.Contexts; -using EdFi.Ods.AdminApi.Helpers; -using EdFi.Ods.AdminApi.Infrastructure.Extensions; -using Microsoft.Extensions.Options; -using ClaimSet = EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor.ClaimSet; - -namespace EdFi.Ods.AdminApi.Infrastructure.Services.ClaimSetEditor; - -public class GetAllClaimSetsQueryV53Service -{ - private readonly ISecurityContext _securityContext; - private readonly IOptions _options; - - public GetAllClaimSetsQueryV53Service(ISecurityContext securityContext, IOptions options) - { - _securityContext = securityContext; - _options = options; - } - - public IReadOnlyList Execute() - { - return _securityContext.ClaimSets - .Select(x => new ClaimSet - { - Id = x.ClaimSetId, - Name = x.ClaimSetName, - IsEditable = !Constants.DefaultClaimSets.Contains(x.ClaimSetName) && - !Constants.SystemReservedClaimSets.Contains(x.ClaimSetName) - }) - .Distinct() - .OrderBy(x => x.Name) - .ToList(); - } - - public IReadOnlyList Execute(CommonQueryParams commonQueryParams) - { - return _securityContext.ClaimSets - .Select(x => new ClaimSet - { - Id = x.ClaimSetId, - Name = x.ClaimSetName, - IsEditable = !Constants.DefaultClaimSets.Contains(x.ClaimSetName) && - !Constants.SystemReservedClaimSets.Contains(x.ClaimSetName) - }) - .Distinct() - .OrderBy(x => x.Name) - .Paginate(commonQueryParams.Offset, commonQueryParams.Limit, _options) - .ToList(); - } -} diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetClaimSetByIdQuery.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetClaimSetByIdQuery.cs index 91261bcc1..75266aa40 100644 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetClaimSetByIdQuery.cs +++ b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetClaimSetByIdQuery.cs @@ -7,29 +7,16 @@ namespace EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; public class GetClaimSetByIdQuery : IGetClaimSetByIdQuery { - private readonly IOdsSecurityModelVersionResolver _resolver; - private readonly GetClaimSetByIdQueryV53Service _v53Service; - private readonly GetClaimSetByIdQueryV6Service _v6Service; + private readonly GetClaimSetByIdQueryService _service; - public GetClaimSetByIdQuery(IOdsSecurityModelVersionResolver resolver, - GetClaimSetByIdQueryV53Service v53Service, - GetClaimSetByIdQueryV6Service v6Service) + public GetClaimSetByIdQuery(GetClaimSetByIdQueryService service) { - _resolver = resolver; - _v53Service = v53Service; - _v6Service = v6Service; + _service = service; } public ClaimSet Execute(int securityContextClaimSetId) { - var securityModel = _resolver.DetermineSecurityModel(); - - return securityModel switch - { - EdFiOdsSecurityModelCompatibility.ThreeThroughFive or EdFiOdsSecurityModelCompatibility.FiveThreeCqe => _v53Service.Execute(securityContextClaimSetId), - EdFiOdsSecurityModelCompatibility.Six => _v6Service.Execute(securityContextClaimSetId), - _ => throw new EdFiOdsSecurityModelCompatibilityException(securityModel), - }; + return _service.Execute(securityContextClaimSetId); } } diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetClaimSetByIdQueryV6Service.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetClaimSetByIdQueryService.cs similarity index 92% rename from Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetClaimSetByIdQueryV6Service.cs rename to Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetClaimSetByIdQueryService.cs index 4c36ebd0e..1276a7fa1 100644 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetClaimSetByIdQueryV6Service.cs +++ b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetClaimSetByIdQueryService.cs @@ -9,11 +9,11 @@ namespace EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; -public class GetClaimSetByIdQueryV6Service +public class GetClaimSetByIdQueryService { private readonly ISecurityContext _securityContext; - public GetClaimSetByIdQueryV6Service(ISecurityContext securityContext) + public GetClaimSetByIdQueryService(ISecurityContext securityContext) { _securityContext = securityContext; } diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetClaimSetByIdQueryV53Service.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetClaimSetByIdQueryV53Service.cs deleted file mode 100644 index e975e0132..000000000 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetClaimSetByIdQueryV53Service.cs +++ /dev/null @@ -1,42 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; - -using System.Net; -using EdFi.Ods.AdminApi.Infrastructure.ErrorHandling; -using Compatability::EdFi.SecurityCompatiblity53.DataAccess.Contexts; - -namespace EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; - -public class GetClaimSetByIdQueryV53Service -{ - private readonly ISecurityContext _securityContext; - - public GetClaimSetByIdQueryV53Service(ISecurityContext securityContext) - { - _securityContext = securityContext; - } - - public ClaimSet Execute(int claimSetId) - { - var securityContextClaimSet = _securityContext.ClaimSets - .SingleOrDefault(x => x.ClaimSetId == claimSetId); - - if (securityContextClaimSet != null) - { - return new ClaimSet - { - Id = securityContextClaimSet.ClaimSetId, - Name = securityContextClaimSet.ClaimSetName, - IsEditable = !Constants.DefaultClaimSets.Contains(securityContextClaimSet.ClaimSetName) - }; - } - - throw new AdminApiException("No such claim set exists in the database.") - { - StatusCode = HttpStatusCode.NotFound - }; - } -} diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetResourcesByClaimSetIdQuery.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetResourcesByClaimSetIdQuery.cs index cb56a7c6d..88fcc8a89 100644 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetResourcesByClaimSetIdQuery.cs +++ b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetResourcesByClaimSetIdQuery.cs @@ -7,43 +7,23 @@ namespace EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor { public class GetResourcesByClaimSetIdQuery : IGetResourcesByClaimSetIdQuery { - private readonly IOdsSecurityModelVersionResolver _resolver; - private readonly GetResourcesByClaimSetIdQueryV53Service _v53Service; - private readonly GetResourcesByClaimSetIdQueryV6Service _v6Service; + private readonly GetResourcesByClaimSetIdQueryService _service; - public GetResourcesByClaimSetIdQuery(IOdsSecurityModelVersionResolver resolver, - GetResourcesByClaimSetIdQueryV53Service v53Service, - GetResourcesByClaimSetIdQueryV6Service v6Service) + public GetResourcesByClaimSetIdQuery(GetResourcesByClaimSetIdQueryService service) { - _resolver = resolver; - _v53Service = v53Service; - _v6Service = v6Service; + _service = service; } public IList AllResources(int securityContextClaimSetId) { IList parentResources; - var securityModel = _resolver.DetermineSecurityModel(); - return securityModel switch { - EdFiOdsSecurityModelCompatibility.ThreeThroughFive => ModelThreeThroughFive(), - EdFiOdsSecurityModelCompatibility.FiveThreeCqe => ModelThreeThroughFive(true), - EdFiOdsSecurityModelCompatibility.Six => ModelSix(), - _ => throw new EdFiOdsSecurityModelCompatibilityException(securityModel) - }; - - IList ModelThreeThroughFive(bool IsFiveThreeCqe = false) { - parentResources = _v53Service.GetParentResources(securityContextClaimSetId, IsFiveThreeCqe); - var childResources = _v53Service.GetChildResources(securityContextClaimSetId, IsFiveThreeCqe); - _v53Service.AddChildResourcesToParents(childResources, parentResources); - - return parentResources; - } + return ModelSix(); IList ModelSix() { - parentResources = _v6Service.GetParentResources(securityContextClaimSetId); - var childResources = _v6Service.GetChildResources(securityContextClaimSetId); - GetResourcesByClaimSetIdQueryV6Service.AddChildResourcesToParents(childResources, parentResources); + parentResources = _service.GetParentResources(securityContextClaimSetId); + var childResources = _service.GetChildResources(securityContextClaimSetId); + GetResourcesByClaimSetIdQueryService.AddChildResourcesToParents(childResources, parentResources); return parentResources; } diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetResourcesByClaimSetIdQueryV6Service.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetResourcesByClaimSetIdQueryService.cs similarity index 97% rename from Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetResourcesByClaimSetIdQueryV6Service.cs rename to Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetResourcesByClaimSetIdQueryService.cs index 4d2386aab..f38b8e343 100644 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetResourcesByClaimSetIdQueryV6Service.cs +++ b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetResourcesByClaimSetIdQueryService.cs @@ -1,291 +1,291 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. - -using AutoMapper; -using EdFi.Security.DataAccess.Contexts; -using EdFi.Security.DataAccess.Models; -using SecurityResourceClaim = EdFi.Security.DataAccess.Models.ResourceClaim; -using SecurityAuthorizationStrategy = EdFi.Security.DataAccess.Models.AuthorizationStrategy; -using EdFi.Ods.AdminApi.Infrastructure.Services.ClaimSetEditor; -using EdFi.Ods.AdminApi.Infrastructure.Services.ClaimSetEditor.Extensions; -using Microsoft.EntityFrameworkCore; - -namespace EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor -{ - public class GetResourcesByClaimSetIdQueryV6Service - { - private readonly ISecurityContext _securityContext; - private readonly IMapper _mapper; - - public GetResourcesByClaimSetIdQueryV6Service(ISecurityContext securityContext, IMapper mapper) - { - _securityContext = securityContext; - _mapper = mapper; - } - - internal static void AddChildResourcesToParents(IReadOnlyList childResources, IList parentResources) - { - foreach (var childResource in childResources) - { - var parentResource = parentResources.SingleOrDefault(x => x.Id == childResource.ParentId); - if (parentResource != null) - parentResource.Children.Add(childResource); - else - { - parentResources.Add(childResource); - } - } - } - - internal IList GetParentResources(int claimSetId) - { - var dbParentResources = _securityContext.ClaimSetResourceClaimActions - .Include(x => x.ResourceClaim) - .Include(x => x.ResourceClaim.ParentResourceClaim) - .Include(x => x.Action) - .Include(x => x.AuthorizationStrategyOverrides).ThenInclude(x => x.AuthorizationStrategy) - .Where(x => x.ClaimSet.ClaimSetId == claimSetId - && x.ResourceClaim.ParentResourceClaimId == null).ToList(); - - var defaultAuthStrategies = GetDefaultAuthStrategies(dbParentResources.Select(x => x.ResourceClaim).ToList()); - var authStrategyOverrides = GetAuthStrategyOverrides(dbParentResources.ToList()); - - var parentResources = dbParentResources.GroupBy(x => x.ResourceClaim).Select(x => new ResourceClaim - { - Id = x.Key.ResourceClaimId, - Name = x.Key.ResourceName, - Create = x.Any(a => a.Action.ActionName == Action.Create.Value), - Read = x.Any(a => a.Action.ActionName == Action.Read.Value), - Update = x.Any(a => a.Action.ActionName == Action.Update.Value), - Delete = x.Any(a => a.Action.ActionName == Action.Delete.Value), - ReadChanges = x.Any(a => a.Action.ActionName == Action.ReadChanges.Value), - IsParent = true, - DefaultAuthStrategiesForCRUD = defaultAuthStrategies[x.Key.ResourceClaimId].ToArray(), - AuthStrategyOverridesForCRUD = authStrategyOverrides[x.Key.ResourceClaimId].ToArray() - }).ToList(); - - parentResources.ForEach(x => x.Children = new List()); - return parentResources; - } - - private Dictionary GetDefaultAuthStrategies(IReadOnlyCollection resourceClaims) - { - var resultDictionary = new Dictionary(); - - var defaultAuthStrategies = _securityContext.ResourceClaimActions - .Include(x => x.ResourceClaim).Include(x => x.Action).Include(x => x.AuthorizationStrategies). - ThenInclude(x => x.AuthorizationStrategy).ToList(); - - var defaultAuthStrategiesForParents = defaultAuthStrategies - .Where(x => x.ResourceClaim.ParentResourceClaimId == null).ToList(); - - var defaultAuthStrategiesForChildren = defaultAuthStrategies - .Where(x => x.ResourceClaim.ParentResourceClaimId != null).ToList(); - - foreach (var resourceClaim in resourceClaims) - { - var actions = new List(); - if (resourceClaim.ParentResourceClaimId == null) - { - var createDefaultStrategy = defaultAuthStrategiesForParents.SingleOrDefault(x => - x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && - x.Action.ActionName == Action.Create.Value)?.AuthorizationStrategies.Select(x => x.AuthorizationStrategy); - AddStrategyToParentResource(createDefaultStrategy); - var readDefaultStrategy = defaultAuthStrategiesForParents.SingleOrDefault(x => - x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && - x.Action.ActionName == Action.Read.Value)?.AuthorizationStrategies.Select(x => x.AuthorizationStrategy); - AddStrategyToParentResource(readDefaultStrategy); - var updateDefaultStrategy = defaultAuthStrategiesForParents - .SingleOrDefault(x => - x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && - x.Action.ActionName == Action.Update.Value)?.AuthorizationStrategies.Select(x => x.AuthorizationStrategy); - AddStrategyToParentResource(updateDefaultStrategy); - var deleteDefaultStrategy = defaultAuthStrategiesForParents - .SingleOrDefault(x => - x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && - x.Action.ActionName == Action.Delete.Value)?.AuthorizationStrategies.Select(x => x.AuthorizationStrategy); - AddStrategyToParentResource(deleteDefaultStrategy); - var readChangesDefaultStrategy = defaultAuthStrategiesForParents - .SingleOrDefault(x => - x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && - x.Action.ActionName == Action.ReadChanges.Value)?.AuthorizationStrategies.Select(x => x.AuthorizationStrategy); - AddStrategyToParentResource(readChangesDefaultStrategy); - - void AddStrategyToParentResource(IEnumerable? defaultStrategy) - { - actions.Add(defaultStrategy != null ? new ClaimSetResourceClaimActionAuthStrategies() - { - AuthorizationStrategies = defaultStrategy.Select(x => _mapper.Map(x)).ToList()! - } : null); - } - } - else - { - var createDefaultStrategies = defaultAuthStrategiesForChildren.SingleOrDefault(x => - x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && - x.Action.ActionName == Action.Create.Value)?.AuthorizationStrategies.Select(x => x.AuthorizationStrategy); - actions = AddStrategyToChildResource(createDefaultStrategies, Action.Create); - - var readDefaultStrategies = defaultAuthStrategiesForChildren.SingleOrDefault(x => - x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && - x.Action.ActionName == Action.Read.Value)?.AuthorizationStrategies.Select(x => x.AuthorizationStrategy); - actions = AddStrategyToChildResource(readDefaultStrategies, Action.Read); - - var updateDefaultStrategies = defaultAuthStrategiesForChildren.SingleOrDefault(x => - x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && - x.Action.ActionName == Action.Update.Value)?.AuthorizationStrategies.Select(x => x.AuthorizationStrategy); - actions = AddStrategyToChildResource(updateDefaultStrategies, Action.Update); - - var deleteDefaultStrategies = defaultAuthStrategiesForChildren.SingleOrDefault(x => - x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && - x.Action.ActionName == Action.Delete.Value)?.AuthorizationStrategies.Select(x => x.AuthorizationStrategy); - actions = AddStrategyToChildResource(deleteDefaultStrategies, Action.Delete); - - var readChangesDefaultStrategy = defaultAuthStrategiesForChildren.SingleOrDefault(x => - x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && - x.Action.ActionName == Action.ReadChanges.Value)?.AuthorizationStrategies.Select(x => x.AuthorizationStrategy); - actions = AddStrategyToChildResource(readChangesDefaultStrategy, Action.ReadChanges); - - List AddStrategyToChildResource(IEnumerable? defaultStrategies, Action action) - { - if (defaultStrategies == null) - { - defaultStrategies = defaultAuthStrategiesForParents.SingleOrDefault(x => - x.ResourceClaim.ResourceClaimId == resourceClaim.ParentResourceClaimId && - x.Action.ActionName == action.Value)?.AuthorizationStrategies.Select(x => x.AuthorizationStrategy); - - if (defaultStrategies != null) - { - var mappedStrategies = defaultStrategies.Select(x => - { - var value = _mapper.Map(x); - if (value != null) - value.IsInheritedFromParent = true; - return value; - }); - - actions.Add(new ClaimSetResourceClaimActionAuthStrategies() - { - AuthorizationStrategies = mappedStrategies.ToArray() - }); - } - } - else - { - var mappedStrategies = defaultStrategies.Select(x => _mapper.Map(x)); - actions.Add(new ClaimSetResourceClaimActionAuthStrategies() - { - AuthorizationStrategies = mappedStrategies.ToArray() - }); - } - - return actions; - } - } - - resultDictionary[resourceClaim.ResourceClaimId] = actions.ToArray() as ClaimSetResourceClaimActionAuthStrategies[]; - } - - return resultDictionary; - } - - private Dictionary GetAuthStrategyOverrides(List resourceClaims) - { - var resultDictionary = new Dictionary(); - resourceClaims = - new List(resourceClaims.OrderBy(i => new List { Action.Create.Value, Action.Read.Value, Action.Update.Value, Action.Delete.Value, Action.ReadChanges.Value }.IndexOf(i.Action.ActionName))); - foreach (var resourceClaim in resourceClaims) - { - List? authStrategies = null; - if (resourceClaim.ResourceClaim.ParentResourceClaim == null) - { - authStrategies = _mapper.Map>(resourceClaim.AuthorizationStrategyOverrides is not null && resourceClaim.AuthorizationStrategyOverrides.Any() ? - resourceClaim.AuthorizationStrategyOverrides.Select(x => x.AuthorizationStrategy) : null); - } - else - { - var parentResources = _securityContext.ClaimSetResourceClaimActions - .Include(x => x.ResourceClaim) - .Include(x => x.ClaimSet) - .Include(x => x.Action) - .Include(x => x.AuthorizationStrategyOverrides).ThenInclude(x => x.AuthorizationStrategy).ToList(); - var parentResourceOverride = parentResources.SingleOrDefault(x => x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaim.ParentResourceClaimId - && x.ClaimSet.ClaimSetId == resourceClaim.ClaimSet.ClaimSetId - && x.Action.ActionId == resourceClaim.Action.ActionId); - if (parentResourceOverride?.AuthorizationStrategyOverrides != null && parentResourceOverride.AuthorizationStrategyOverrides.Any()) - { - authStrategies = - _mapper.Map>(parentResourceOverride.AuthorizationStrategyOverrides.Select(x => x.AuthorizationStrategy)); - if (authStrategies != null) - { - authStrategies.ForEach(a => a.IsInheritedFromParent = true); - } - } - - if (resourceClaim.AuthorizationStrategyOverrides != null && resourceClaim.AuthorizationStrategyOverrides.Any()) - { - authStrategies = _mapper.Map>(resourceClaim.AuthorizationStrategyOverrides.Select(x => x.AuthorizationStrategy)); - } - } - - if (resultDictionary.ContainsKey(resourceClaim.ResourceClaim.ResourceClaimId)) - { - if (authStrategies != null) - { - foreach (var authStrategy in authStrategies) - { - resultDictionary[resourceClaim.ResourceClaim.ResourceClaimId].AddAuthorizationStrategyOverrides(resourceClaim.Action.ActionName, authStrategy); - } - } - } - else - { - resultDictionary[resourceClaim.ResourceClaim.ResourceClaimId] = new ClaimSetResourceClaimActionAuthStrategies[5]; - if (authStrategies != null) - { - foreach (var authStrategy in authStrategies) - { - resultDictionary[resourceClaim.ResourceClaim.ResourceClaimId].AddAuthorizationStrategyOverrides(resourceClaim.Action.ActionName, authStrategy); - } - } - } - - } - return resultDictionary; - } - - internal IReadOnlyList GetChildResources(int claimSetId) - { - var dbChildResources = - _securityContext.ClaimSetResourceClaimActions - .Include(x => x.ResourceClaim) - .Include(x => x.Action) - .Include(x => x.AuthorizationStrategyOverrides) - .Where(x => x.ClaimSet.ClaimSetId == claimSetId - && x.ResourceClaim.ParentResourceClaimId != null).ToList(); - var defaultAuthStrategies = GetDefaultAuthStrategies(dbChildResources.Select(x => x.ResourceClaim).ToList()); - var authStrategyOverrides = GetAuthStrategyOverrides(dbChildResources.ToList()); - - var childResources = dbChildResources.GroupBy(x => x.ResourceClaim) - .Select(x => new ResourceClaim - { - Id = x.Key.ResourceClaimId, - ParentId = x.Key.ParentResourceClaimId ?? 0, - Name = x.Key.ResourceName, - Create = x.Any(a => a.Action.ActionName == Action.Create.Value), - Read = x.Any(a => a.Action.ActionName == Action.Read.Value), - Update = x.Any(a => a.Action.ActionName == Action.Update.Value), - Delete = x.Any(a => a.Action.ActionName == Action.Delete.Value), - ReadChanges = x.Any(a => a.Action.ActionName == Action.ReadChanges.Value), - IsParent = false, - DefaultAuthStrategiesForCRUD = defaultAuthStrategies[x.Key.ResourceClaimId], - AuthStrategyOverridesForCRUD = authStrategyOverrides.Keys.Any(p => p == x.Key.ResourceClaimId) ? authStrategyOverrides[x.Key.ResourceClaimId] : Array.Empty(), - }).ToList(); - return childResources; - } - } -} - - +// SPDX-License-Identifier: Apache-2.0 +// Licensed to the Ed-Fi Alliance under one or more agreements. +// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. +// See the LICENSE and NOTICES files in the project root for more information. + +using AutoMapper; +using EdFi.Security.DataAccess.Contexts; +using EdFi.Security.DataAccess.Models; +using SecurityResourceClaim = EdFi.Security.DataAccess.Models.ResourceClaim; +using SecurityAuthorizationStrategy = EdFi.Security.DataAccess.Models.AuthorizationStrategy; +using EdFi.Ods.AdminApi.Infrastructure.Services.ClaimSetEditor; +using EdFi.Ods.AdminApi.Infrastructure.Services.ClaimSetEditor.Extensions; +using Microsoft.EntityFrameworkCore; + +namespace EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor +{ + public class GetResourcesByClaimSetIdQueryService + { + private readonly ISecurityContext _securityContext; + private readonly IMapper _mapper; + + public GetResourcesByClaimSetIdQueryService(ISecurityContext securityContext, IMapper mapper) + { + _securityContext = securityContext; + _mapper = mapper; + } + + internal static void AddChildResourcesToParents(IReadOnlyList childResources, IList parentResources) + { + foreach (var childResource in childResources) + { + var parentResource = parentResources.SingleOrDefault(x => x.Id == childResource.ParentId); + if (parentResource != null) + parentResource.Children.Add(childResource); + else + { + parentResources.Add(childResource); + } + } + } + + internal IList GetParentResources(int claimSetId) + { + var dbParentResources = _securityContext.ClaimSetResourceClaimActions + .Include(x => x.ResourceClaim) + .Include(x => x.ResourceClaim.ParentResourceClaim) + .Include(x => x.Action) + .Include(x => x.AuthorizationStrategyOverrides).ThenInclude(x => x.AuthorizationStrategy) + .Where(x => x.ClaimSet.ClaimSetId == claimSetId + && x.ResourceClaim.ParentResourceClaimId == null).ToList(); + + var defaultAuthStrategies = GetDefaultAuthStrategies(dbParentResources.Select(x => x.ResourceClaim).ToList()); + var authStrategyOverrides = GetAuthStrategyOverrides(dbParentResources.ToList()); + + var parentResources = dbParentResources.GroupBy(x => x.ResourceClaim).Select(x => new ResourceClaim + { + Id = x.Key.ResourceClaimId, + Name = x.Key.ResourceName, + Create = x.Any(a => a.Action.ActionName == Action.Create.Value), + Read = x.Any(a => a.Action.ActionName == Action.Read.Value), + Update = x.Any(a => a.Action.ActionName == Action.Update.Value), + Delete = x.Any(a => a.Action.ActionName == Action.Delete.Value), + ReadChanges = x.Any(a => a.Action.ActionName == Action.ReadChanges.Value), + IsParent = true, + DefaultAuthStrategiesForCRUD = defaultAuthStrategies[x.Key.ResourceClaimId].ToArray(), + AuthStrategyOverridesForCRUD = authStrategyOverrides[x.Key.ResourceClaimId].ToArray() + }).ToList(); + + parentResources.ForEach(x => x.Children = new List()); + return parentResources; + } + + private Dictionary GetDefaultAuthStrategies(IReadOnlyCollection resourceClaims) + { + var resultDictionary = new Dictionary(); + + var defaultAuthStrategies = _securityContext.ResourceClaimActions + .Include(x => x.ResourceClaim).Include(x => x.Action).Include(x => x.AuthorizationStrategies). + ThenInclude(x => x.AuthorizationStrategy).ToList(); + + var defaultAuthStrategiesForParents = defaultAuthStrategies + .Where(x => x.ResourceClaim.ParentResourceClaimId == null).ToList(); + + var defaultAuthStrategiesForChildren = defaultAuthStrategies + .Where(x => x.ResourceClaim.ParentResourceClaimId != null).ToList(); + + foreach (var resourceClaim in resourceClaims) + { + var actions = new List(); + if (resourceClaim.ParentResourceClaimId == null) + { + var createDefaultStrategy = defaultAuthStrategiesForParents.SingleOrDefault(x => + x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && + x.Action.ActionName == Action.Create.Value)?.AuthorizationStrategies.Select(x => x.AuthorizationStrategy); + AddStrategyToParentResource(createDefaultStrategy); + var readDefaultStrategy = defaultAuthStrategiesForParents.SingleOrDefault(x => + x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && + x.Action.ActionName == Action.Read.Value)?.AuthorizationStrategies.Select(x => x.AuthorizationStrategy); + AddStrategyToParentResource(readDefaultStrategy); + var updateDefaultStrategy = defaultAuthStrategiesForParents + .SingleOrDefault(x => + x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && + x.Action.ActionName == Action.Update.Value)?.AuthorizationStrategies.Select(x => x.AuthorizationStrategy); + AddStrategyToParentResource(updateDefaultStrategy); + var deleteDefaultStrategy = defaultAuthStrategiesForParents + .SingleOrDefault(x => + x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && + x.Action.ActionName == Action.Delete.Value)?.AuthorizationStrategies.Select(x => x.AuthorizationStrategy); + AddStrategyToParentResource(deleteDefaultStrategy); + var readChangesDefaultStrategy = defaultAuthStrategiesForParents + .SingleOrDefault(x => + x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && + x.Action.ActionName == Action.ReadChanges.Value)?.AuthorizationStrategies.Select(x => x.AuthorizationStrategy); + AddStrategyToParentResource(readChangesDefaultStrategy); + + void AddStrategyToParentResource(IEnumerable? defaultStrategy) + { + actions.Add(defaultStrategy != null ? new ClaimSetResourceClaimActionAuthStrategies() + { + AuthorizationStrategies = defaultStrategy.Select(x => _mapper.Map(x)).ToList()! + } : null); + } + } + else + { + var createDefaultStrategies = defaultAuthStrategiesForChildren.SingleOrDefault(x => + x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && + x.Action.ActionName == Action.Create.Value)?.AuthorizationStrategies.Select(x => x.AuthorizationStrategy); + actions = AddStrategyToChildResource(createDefaultStrategies, Action.Create); + + var readDefaultStrategies = defaultAuthStrategiesForChildren.SingleOrDefault(x => + x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && + x.Action.ActionName == Action.Read.Value)?.AuthorizationStrategies.Select(x => x.AuthorizationStrategy); + actions = AddStrategyToChildResource(readDefaultStrategies, Action.Read); + + var updateDefaultStrategies = defaultAuthStrategiesForChildren.SingleOrDefault(x => + x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && + x.Action.ActionName == Action.Update.Value)?.AuthorizationStrategies.Select(x => x.AuthorizationStrategy); + actions = AddStrategyToChildResource(updateDefaultStrategies, Action.Update); + + var deleteDefaultStrategies = defaultAuthStrategiesForChildren.SingleOrDefault(x => + x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && + x.Action.ActionName == Action.Delete.Value)?.AuthorizationStrategies.Select(x => x.AuthorizationStrategy); + actions = AddStrategyToChildResource(deleteDefaultStrategies, Action.Delete); + + var readChangesDefaultStrategy = defaultAuthStrategiesForChildren.SingleOrDefault(x => + x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && + x.Action.ActionName == Action.ReadChanges.Value)?.AuthorizationStrategies.Select(x => x.AuthorizationStrategy); + actions = AddStrategyToChildResource(readChangesDefaultStrategy, Action.ReadChanges); + + List AddStrategyToChildResource(IEnumerable? defaultStrategies, Action action) + { + if (defaultStrategies == null) + { + defaultStrategies = defaultAuthStrategiesForParents.SingleOrDefault(x => + x.ResourceClaim.ResourceClaimId == resourceClaim.ParentResourceClaimId && + x.Action.ActionName == action.Value)?.AuthorizationStrategies.Select(x => x.AuthorizationStrategy); + + if (defaultStrategies != null) + { + var mappedStrategies = defaultStrategies.Select(x => + { + var value = _mapper.Map(x); + if (value != null) + value.IsInheritedFromParent = true; + return value; + }); + + actions.Add(new ClaimSetResourceClaimActionAuthStrategies() + { + AuthorizationStrategies = mappedStrategies.ToArray() + }); + } + } + else + { + var mappedStrategies = defaultStrategies.Select(x => _mapper.Map(x)); + actions.Add(new ClaimSetResourceClaimActionAuthStrategies() + { + AuthorizationStrategies = mappedStrategies.ToArray() + }); + } + + return actions; + } + } + + resultDictionary[resourceClaim.ResourceClaimId] = actions.ToArray() as ClaimSetResourceClaimActionAuthStrategies[]; + } + + return resultDictionary; + } + + private Dictionary GetAuthStrategyOverrides(List resourceClaims) + { + var resultDictionary = new Dictionary(); + resourceClaims = + new List(resourceClaims.OrderBy(i => new List { Action.Create.Value, Action.Read.Value, Action.Update.Value, Action.Delete.Value, Action.ReadChanges.Value }.IndexOf(i.Action.ActionName))); + foreach (var resourceClaim in resourceClaims) + { + List? authStrategies = null; + if (resourceClaim.ResourceClaim.ParentResourceClaim == null) + { + authStrategies = _mapper.Map>(resourceClaim.AuthorizationStrategyOverrides is not null && resourceClaim.AuthorizationStrategyOverrides.Any() ? + resourceClaim.AuthorizationStrategyOverrides.Select(x => x.AuthorizationStrategy) : null); + } + else + { + var parentResources = _securityContext.ClaimSetResourceClaimActions + .Include(x => x.ResourceClaim) + .Include(x => x.ClaimSet) + .Include(x => x.Action) + .Include(x => x.AuthorizationStrategyOverrides).ThenInclude(x => x.AuthorizationStrategy).ToList(); + var parentResourceOverride = parentResources.SingleOrDefault(x => x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaim.ParentResourceClaimId + && x.ClaimSet.ClaimSetId == resourceClaim.ClaimSet.ClaimSetId + && x.Action.ActionId == resourceClaim.Action.ActionId); + if (parentResourceOverride?.AuthorizationStrategyOverrides != null && parentResourceOverride.AuthorizationStrategyOverrides.Any()) + { + authStrategies = + _mapper.Map>(parentResourceOverride.AuthorizationStrategyOverrides.Select(x => x.AuthorizationStrategy)); + if (authStrategies != null) + { + authStrategies.ForEach(a => a.IsInheritedFromParent = true); + } + } + + if (resourceClaim.AuthorizationStrategyOverrides != null && resourceClaim.AuthorizationStrategyOverrides.Any()) + { + authStrategies = _mapper.Map>(resourceClaim.AuthorizationStrategyOverrides.Select(x => x.AuthorizationStrategy)); + } + } + + if (resultDictionary.ContainsKey(resourceClaim.ResourceClaim.ResourceClaimId)) + { + if (authStrategies != null) + { + foreach (var authStrategy in authStrategies) + { + resultDictionary[resourceClaim.ResourceClaim.ResourceClaimId].AddAuthorizationStrategyOverrides(resourceClaim.Action.ActionName, authStrategy); + } + } + } + else + { + resultDictionary[resourceClaim.ResourceClaim.ResourceClaimId] = new ClaimSetResourceClaimActionAuthStrategies[5]; + if (authStrategies != null) + { + foreach (var authStrategy in authStrategies) + { + resultDictionary[resourceClaim.ResourceClaim.ResourceClaimId].AddAuthorizationStrategyOverrides(resourceClaim.Action.ActionName, authStrategy); + } + } + } + + } + return resultDictionary; + } + + internal IReadOnlyList GetChildResources(int claimSetId) + { + var dbChildResources = + _securityContext.ClaimSetResourceClaimActions + .Include(x => x.ResourceClaim) + .Include(x => x.Action) + .Include(x => x.AuthorizationStrategyOverrides) + .Where(x => x.ClaimSet.ClaimSetId == claimSetId + && x.ResourceClaim.ParentResourceClaimId != null).ToList(); + var defaultAuthStrategies = GetDefaultAuthStrategies(dbChildResources.Select(x => x.ResourceClaim).ToList()); + var authStrategyOverrides = GetAuthStrategyOverrides(dbChildResources.ToList()); + + var childResources = dbChildResources.GroupBy(x => x.ResourceClaim) + .Select(x => new ResourceClaim + { + Id = x.Key.ResourceClaimId, + ParentId = x.Key.ParentResourceClaimId ?? 0, + Name = x.Key.ResourceName, + Create = x.Any(a => a.Action.ActionName == Action.Create.Value), + Read = x.Any(a => a.Action.ActionName == Action.Read.Value), + Update = x.Any(a => a.Action.ActionName == Action.Update.Value), + Delete = x.Any(a => a.Action.ActionName == Action.Delete.Value), + ReadChanges = x.Any(a => a.Action.ActionName == Action.ReadChanges.Value), + IsParent = false, + DefaultAuthStrategiesForCRUD = defaultAuthStrategies[x.Key.ResourceClaimId], + AuthStrategyOverridesForCRUD = authStrategyOverrides.Keys.Any(p => p == x.Key.ResourceClaimId) ? authStrategyOverrides[x.Key.ResourceClaimId] : Array.Empty(), + }).ToList(); + return childResources; + } + } +} + + diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetResourcesByClaimSetIdQueryV53Service.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetResourcesByClaimSetIdQueryV53Service.cs deleted file mode 100644 index 93d951bdc..000000000 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/GetResourcesByClaimSetIdQueryV53Service.cs +++ /dev/null @@ -1,281 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; - -using AutoMapper; -using EdFi.Ods.AdminApi.Infrastructure.Services.ClaimSetEditor; -using EdFi.Ods.AdminApi.Infrastructure.Services.ClaimSetEditor.Extensions; -using Compatability::EdFi.SecurityCompatiblity53.DataAccess.Contexts; -using Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models; -using SecurityAuthorizationStrategy = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.AuthorizationStrategy; -using SecurityResourceClaim = Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models.ResourceClaim; -using Microsoft.EntityFrameworkCore; - -namespace EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor -{ - public class GetResourcesByClaimSetIdQueryV53Service - { - private readonly ISecurityContext _securityContext; - private readonly IMapper _mapper; - - public GetResourcesByClaimSetIdQueryV53Service(ISecurityContext securityContext, IMapper mapper) - { - _securityContext = securityContext; - _mapper = mapper; - } - - internal void AddChildResourcesToParents(IReadOnlyList childResources, IList parentResources) - { - foreach (var childResource in childResources) - { - var parentResource = parentResources.SingleOrDefault(x => x.Id == childResource.ParentId); - if (parentResource != null) - parentResource.Children.Add(childResource); - else - { - parentResources.Add(childResource); - } - } - } - - internal IList GetParentResources(int claimSetId, bool IsFiveThreeCqe) - { - var dbParentResources = _securityContext.ClaimSetResourceClaims - .Include(x => x.ResourceClaim) - .Include(x => x.ResourceClaim.ParentResourceClaim) - .Include(x => x.Action) - .Include(x => x.AuthorizationStrategyOverride) - .Where(x => x.ClaimSet.ClaimSetId == claimSetId - && x.ResourceClaim.ParentResourceClaimId == null).ToList(); - - var defaultAuthStrategies = GetDefaultAuthStrategies(dbParentResources.Select(x => x.ResourceClaim).ToList(), IsFiveThreeCqe); - var authStrategyOverrides = GetAuthStrategyOverrides(dbParentResources.ToList(), IsFiveThreeCqe); - - var parentResources = dbParentResources.GroupBy(x => x.ResourceClaim).Select(x => new ResourceClaim - { - Id = x.Key.ResourceClaimId, - Name = x.Key.ResourceName, - Create = x.Any(a => a.Action.ActionName == Action.Create.Value), - Read = x.Any(a => a.Action.ActionName == Action.Read.Value), - Update = x.Any(a => a.Action.ActionName == Action.Update.Value), - Delete = x.Any(a => a.Action.ActionName == Action.Delete.Value), - ReadChanges = x.Any(a => a.Action.ActionName == Action.ReadChanges.Value), - IsParent = true, - DefaultAuthStrategiesForCRUD = defaultAuthStrategies[x.Key.ResourceClaimId], - AuthStrategyOverridesForCRUD = authStrategyOverrides[x.Key.ResourceClaimId].ToArray() - }).ToList(); - - parentResources.ForEach(x => x.Children = new List()); - return parentResources; - } - - private Dictionary GetDefaultAuthStrategies(IReadOnlyCollection resourceClaims, bool IsFiveThreeCqe) - { - var resultDictionary = new Dictionary(); - - var defaultAuthStrategies = _securityContext.ResourceClaimAuthorizationMetadatas - .Include(x => x.ResourceClaim).Include(x => x.Action).Include(x => x.AuthorizationStrategy).ToList(); - - var defaultAuthStrategiesForParents = defaultAuthStrategies - .Where(x => x.ResourceClaim.ParentResourceClaimId == null).ToList(); - - var defaultAuthStrategiesForChildren = defaultAuthStrategies - .Where(x => x.ResourceClaim.ParentResourceClaimId != null).ToList(); - - foreach (var resourceClaim in resourceClaims) - { - var actions = new List(); - if (resourceClaim.ParentResourceClaimId == null) - { - var createDefaultStrategy = defaultAuthStrategiesForParents.SingleOrDefault(x => - x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && - x.Action.ActionName == Action.Create.Value)?.AuthorizationStrategy; - AddStrategyToParentResource(createDefaultStrategy); - var readDefaultStrategy = defaultAuthStrategiesForParents.SingleOrDefault(x => - x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && - x.Action.ActionName == Action.Read.Value)?.AuthorizationStrategy; - AddStrategyToParentResource(readDefaultStrategy); - var updateDefaultStrategy = defaultAuthStrategiesForParents - .SingleOrDefault(x => - x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && - x.Action.ActionName == Action.Update.Value)?.AuthorizationStrategy; - AddStrategyToParentResource(updateDefaultStrategy); - var deleteDefaultStrategy = defaultAuthStrategiesForParents - .SingleOrDefault(x => - x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && - x.Action.ActionName == Action.Delete.Value)?.AuthorizationStrategy; - AddStrategyToParentResource(deleteDefaultStrategy); - - if (IsFiveThreeCqe) - { - var readChangesDefaultStrategy = defaultAuthStrategiesForParents - .SingleOrDefault(x => - x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && - x.Action.ActionName == Action.ReadChanges.Value)?.AuthorizationStrategy; - AddStrategyToParentResource(readChangesDefaultStrategy); - } - - void AddStrategyToParentResource(SecurityAuthorizationStrategy? defaultStrategy) - { - actions.Add(defaultStrategy != null ? new ClaimSetResourceClaimActionAuthStrategies() - { - AuthorizationStrategies = new List - { _mapper.Map(defaultStrategy) } - } : null); - } - } - else - { - var createDefaultStrategy = defaultAuthStrategiesForChildren.SingleOrDefault(x => - x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && - x.Action.ActionName == Action.Create.Value)?.AuthorizationStrategy; - actions = AddStrategyToChildResource(createDefaultStrategy, Action.Create); - - var readDefaultStrategy = defaultAuthStrategiesForChildren.SingleOrDefault(x => - x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && - x.Action.ActionName == Action.Read.Value)?.AuthorizationStrategy; - actions = AddStrategyToChildResource(readDefaultStrategy, Action.Read); - - var updateDefaultStrategy = defaultAuthStrategiesForChildren.SingleOrDefault(x => - x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && - x.Action.ActionName == Action.Update.Value)?.AuthorizationStrategy; - actions = AddStrategyToChildResource(updateDefaultStrategy, Action.Update); - - var deleteDefaultStrategy = defaultAuthStrategiesForChildren.SingleOrDefault(x => - x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && - x.Action.ActionName == Action.Delete.Value)?.AuthorizationStrategy; - actions = AddStrategyToChildResource(deleteDefaultStrategy, Action.Delete); - - if (IsFiveThreeCqe) - { - var readChangesDefaultStrategy = defaultAuthStrategiesForChildren.SingleOrDefault(x => - x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaimId && - x.Action.ActionName == Action.ReadChanges.Value)?.AuthorizationStrategy; - actions = AddStrategyToChildResource(readChangesDefaultStrategy, Action.ReadChanges); - } - - List AddStrategyToChildResource(SecurityAuthorizationStrategy? defaultStrategy, Action action) - { - if (defaultStrategy == null) - { - defaultStrategy = defaultAuthStrategiesForParents.SingleOrDefault(x => - x.ResourceClaim.ResourceClaimId == resourceClaim.ParentResourceClaimId && - x.Action.ActionName == action.Value)?.AuthorizationStrategy; - var mappedStrategy = _mapper.Map(defaultStrategy); - if (mappedStrategy != null) mappedStrategy.IsInheritedFromParent = true; - - var strategy = mappedStrategy != null ? new ClaimSetResourceClaimActionAuthStrategies() - { - AuthorizationStrategies = new List { _mapper.Map(mappedStrategy) }.ToArray() - } : null; - - actions.Add(strategy); - } - else - { - actions.Add(new ClaimSetResourceClaimActionAuthStrategies() - { - AuthorizationStrategies = new List { _mapper.Map(defaultStrategy) }.ToArray() - }); - } - - return actions; - } - } - - resultDictionary[resourceClaim.ResourceClaimId] = actions.ToArray() as ClaimSetResourceClaimActionAuthStrategies[]; - } - - return resultDictionary; - } - - - internal Dictionary GetAuthStrategyOverrides(List resourceClaims, bool IsFiveThreeCqe) - { - var resultDictionary = new Dictionary(); - resourceClaims = - new List(resourceClaims.OrderBy(i => new List { Action.Create.Value, Action.Read.Value, Action.Update.Value, Action.Delete.Value, Action.ReadChanges.Value }.IndexOf(i.Action.ActionName))); - foreach (var resourceClaim in resourceClaims) - { - AuthorizationStrategy? authStrategy = null; - if (resourceClaim.ResourceClaim.ParentResourceClaim == null) - { - authStrategy = _mapper.Map(resourceClaim.AuthorizationStrategyOverride); - } - else - { - var parentResources = _securityContext.ClaimSetResourceClaims - .Include(x => x.ResourceClaim) - .Include(x => x.ClaimSet) - .Include(x => x.Action) - .Include(x => x.AuthorizationStrategyOverride).ToList(); - var parentResourceOverride = parentResources.SingleOrDefault(x => x.ResourceClaim.ResourceClaimId == resourceClaim.ResourceClaim.ParentResourceClaimId - && x.ClaimSet.ClaimSetId == resourceClaim.ClaimSet.ClaimSetId - && x.Action.ActionId == resourceClaim.Action.ActionId); - if (parentResourceOverride?.AuthorizationStrategyOverride != null) - { - authStrategy = - _mapper.Map(parentResourceOverride.AuthorizationStrategyOverride); - if (authStrategy != null) - { - authStrategy.IsInheritedFromParent = true; - } - } - - if (resourceClaim.AuthorizationStrategyOverride != null) - { - authStrategy = _mapper.Map(resourceClaim.AuthorizationStrategyOverride); - } - } - - if (resultDictionary.ContainsKey(resourceClaim.ResourceClaim.ResourceClaimId)) - { - resultDictionary[resourceClaim.ResourceClaim.ResourceClaimId].AddAuthorizationStrategyOverrides(resourceClaim.Action.ActionName, authStrategy); - } - else - { - var arrayLength = 4; - if (IsFiveThreeCqe) - { - arrayLength = 5; - } - resultDictionary[resourceClaim.ResourceClaim.ResourceClaimId] = new ClaimSetResourceClaimActionAuthStrategies[arrayLength]; - resultDictionary[resourceClaim.ResourceClaim.ResourceClaimId].AddAuthorizationStrategyOverrides(resourceClaim.Action.ActionName, authStrategy); - } - } - return resultDictionary; - } - - internal IReadOnlyList GetChildResources(int claimSetId, bool IsFiveThreeCqe) - { - var dbChildResources = - _securityContext.ClaimSetResourceClaims - .Include(x => x.ResourceClaim) - .Include(x => x.Action) - .Include(x => x.AuthorizationStrategyOverride) - .Where(x => x.ClaimSet.ClaimSetId == claimSetId - && x.ResourceClaim.ParentResourceClaimId != null).ToList(); - var defaultAuthStrategies = GetDefaultAuthStrategies(dbChildResources.Select(x => x.ResourceClaim).ToList(), IsFiveThreeCqe); - var authStrategyOverrides = GetAuthStrategyOverrides(dbChildResources.ToList(), IsFiveThreeCqe); - - var childResources = dbChildResources.GroupBy(x => x.ResourceClaim) - .Select(x => new ResourceClaim - { - Id = x.Key.ResourceClaimId, - ParentId = x.Key.ParentResourceClaimId ?? 0, - Name = x.Key.ResourceName, - Create = x.Any(a => a.Action.ActionName == Action.Create.Value), - Read = x.Any(a => a.Action.ActionName == Action.Read.Value), - Update = x.Any(a => a.Action.ActionName == Action.Update.Value), - Delete = x.Any(a => a.Action.ActionName == Action.Delete.Value), - ReadChanges = x.Any(a => a.Action.ActionName == Action.ReadChanges.Value), - IsParent = false, - DefaultAuthStrategiesForCRUD = defaultAuthStrategies[x.Key.ResourceClaimId], - AuthStrategyOverridesForCRUD = authStrategyOverrides.Keys.Any(p => p == x.Key.ResourceClaimId) ? authStrategyOverrides[x.Key.ResourceClaimId] : Array.Empty(), - }).ToList(); - return childResources; - } - } -} diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/OverrideDefaultAuthorizationStrategyCommand.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/OverrideDefaultAuthorizationStrategyCommand.cs index d08f66be7..17fd7dd9b 100644 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/OverrideDefaultAuthorizationStrategyCommand.cs +++ b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/OverrideDefaultAuthorizationStrategyCommand.cs @@ -7,31 +7,16 @@ namespace EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; public class OverrideDefaultAuthorizationStrategyCommand { - private readonly IOdsSecurityModelVersionResolver _resolver; - private readonly OverrideDefaultAuthorizationStrategyV53Service _v53Service; - private readonly OverrideDefaultAuthorizationStrategyV6Service _v6Service; + private readonly OverrideDefaultAuthorizationStrategyService _service; - public OverrideDefaultAuthorizationStrategyCommand(IOdsSecurityModelVersionResolver resolver, OverrideDefaultAuthorizationStrategyV53Service v53Service, OverrideDefaultAuthorizationStrategyV6Service v6Service) + public OverrideDefaultAuthorizationStrategyCommand(OverrideDefaultAuthorizationStrategyService service) { - _resolver = resolver; - _v53Service = v53Service; - _v6Service = v6Service; + _service = service; } public void Execute(IOverrideDefaultAuthorizationStrategyModel model) { - var securityModel = _resolver.DetermineSecurityModel(); - switch (securityModel) - { - case EdFiOdsSecurityModelCompatibility.ThreeThroughFive or EdFiOdsSecurityModelCompatibility.FiveThreeCqe: - _v53Service.Execute(model); - break; - case EdFiOdsSecurityModelCompatibility.Six: - _v6Service.Execute(model); - break; - default: - throw new EdFiOdsSecurityModelCompatibilityException(securityModel); - } + _service.Execute(model); } } diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/OverrideDefaultAuthorizationStrategyV6Service.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/OverrideDefaultAuthorizationStrategyService.cs similarity index 98% rename from Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/OverrideDefaultAuthorizationStrategyV6Service.cs rename to Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/OverrideDefaultAuthorizationStrategyService.cs index 8e167b3c9..83078bf39 100644 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/OverrideDefaultAuthorizationStrategyV6Service.cs +++ b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/OverrideDefaultAuthorizationStrategyService.cs @@ -9,11 +9,11 @@ namespace EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; -public class OverrideDefaultAuthorizationStrategyV6Service +public class OverrideDefaultAuthorizationStrategyService { private readonly ISecurityContext _context; - public OverrideDefaultAuthorizationStrategyV6Service(ISecurityContext context) + public OverrideDefaultAuthorizationStrategyService(ISecurityContext context) { _context = context; } @@ -90,7 +90,7 @@ private List RemoveOverrides( model.AuthorizationStrategyForDelete.Length == 0) { claimSetResourceClaim.AuthorizationStrategyOverrides = null; - } + } else if (claimSetResourceClaim.Action.ActionName == Action.ReadChanges.Value && model.AuthorizationStrategyForReadChanges != null && model.AuthorizationStrategyForReadChanges.Length == 0) { @@ -154,7 +154,7 @@ private static void AddOverrides(IOverrideDefaultAuthorizationStrategyModel mode SetAuthorizationStrategyOverrides( claimSetResourceClaim, parentResourceClaims, model.AuthorizationStrategyForDelete, authorizationStrategiesDictionary, Action.Delete.Value); - } + } else if (claimSetResourceClaim.Action.ActionName == Action.ReadChanges.Value && model.AuthorizationStrategyForReadChanges != null && model.AuthorizationStrategyForReadChanges.Length != 0) { @@ -170,25 +170,25 @@ private static void SetAuthorizationStrategyOverrides( List parentResourceClaims, int[] authorizationStrategyValues, Dictionary authorizationStrategiesDictionary, string actionName) - { - foreach (var authStrategyId in authorizationStrategyValues.Where(x => x != 0)) - { - var authStrategyOverride = new ClaimSetResourceClaimActionAuthorizationStrategyOverrides() - { AuthorizationStrategy = authorizationStrategiesDictionary[authStrategyId] }; - - if (parentResourceClaims.Any() && parentResourceClaims.SingleOrDefault( - x => - x.Action.ActionName == actionName && x.AuthorizationStrategyOverrides != null && - x.AuthorizationStrategyOverrides.Any() && - x.AuthorizationStrategyOverrides.SingleOrDefault()?.AuthorizationStrategyId == - authStrategyId) == null) - { - claimSetResourceClaimAction.AuthorizationStrategyOverrides.Add(authStrategyOverride); - } - else if (!parentResourceClaims.Any()) - { - claimSetResourceClaimAction.AuthorizationStrategyOverrides.Add(authStrategyOverride); - } + { + foreach (var authStrategyId in authorizationStrategyValues.Where(x => x != 0)) + { + var authStrategyOverride = new ClaimSetResourceClaimActionAuthorizationStrategyOverrides() + { AuthorizationStrategy = authorizationStrategiesDictionary[authStrategyId] }; + + if (parentResourceClaims.Any() && parentResourceClaims.SingleOrDefault( + x => + x.Action.ActionName == actionName && x.AuthorizationStrategyOverrides != null && + x.AuthorizationStrategyOverrides.Any() && + x.AuthorizationStrategyOverrides.SingleOrDefault()?.AuthorizationStrategyId == + authStrategyId) == null) + { + claimSetResourceClaimAction.AuthorizationStrategyOverrides.Add(authStrategyOverride); + } + else if (!parentResourceClaims.Any()) + { + claimSetResourceClaimAction.AuthorizationStrategyOverrides.Add(authStrategyOverride); + } } } } diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/OverrideDefaultAuthorizationStrategyV53Service.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/OverrideDefaultAuthorizationStrategyV53Service.cs deleted file mode 100644 index 00d65d161..000000000 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/OverrideDefaultAuthorizationStrategyV53Service.cs +++ /dev/null @@ -1,201 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; - -using Compatability::EdFi.SecurityCompatiblity53.DataAccess.Contexts; -using Compatability::EdFi.SecurityCompatiblity53.DataAccess.Models; -using Microsoft.EntityFrameworkCore; - -namespace EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor; - -public class OverrideDefaultAuthorizationStrategyV53Service -{ - private readonly ISecurityContext _context; - - public OverrideDefaultAuthorizationStrategyV53Service(ISecurityContext context) - { - _context = context; - } - - public void Execute(IOverrideDefaultAuthorizationStrategyModel model) - { - var claimSetResourceClaimsToEdit = _context.ClaimSetResourceClaims - .Include(x => x.ResourceClaim) - .Include(x => x.Action) - .Include(x => x.ClaimSet) - .Include(x => x.AuthorizationStrategyOverride) - .Where(x => x.ResourceClaim.ResourceClaimId == model.ResourceClaimId && x.ClaimSet.ClaimSetId == model.ClaimSetId) - .ToList(); - - var parentResourceClaimId = _context.ResourceClaims - .Single(x => x.ResourceClaimId == model.ResourceClaimId).ParentResourceClaimId; - var parentResourceClaims = new List(); - - if (parentResourceClaimId != null) - { - parentResourceClaims = _context.ClaimSetResourceClaims - .Include(x => x.ResourceClaim) - .Include(x => x.Action) - .Include(x => x.ClaimSet) - .Include(x => x.AuthorizationStrategyOverride) - .Where(x => x.ResourceClaim.ResourceClaimId == parentResourceClaimId && x.ClaimSet.ClaimSetId == model.ClaimSetId) - .ToList(); - } - - var authorizationStrategiesDictionary = new Dictionary(); - foreach (var authStrategy in _context.AuthorizationStrategies.ToList()) - { - authorizationStrategiesDictionary[authStrategy.AuthorizationStrategyId] = authStrategy; - } - - claimSetResourceClaimsToEdit = RemoveOverrides(model, claimSetResourceClaimsToEdit); - - AddOverrides(model, claimSetResourceClaimsToEdit, authorizationStrategiesDictionary, parentResourceClaims); - - _context.SaveChanges(); - } - - private static List RemoveOverrides(IOverrideDefaultAuthorizationStrategyModel model, IEnumerable resourceClaimsToEdit) - { - var claimSetResourceClaims = resourceClaimsToEdit.ToList(); - foreach (var claimSetResourceClaim in claimSetResourceClaims) - { - if (claimSetResourceClaim.Action.ActionName == Action.Create.Value && model.AuthorizationStrategyForCreate != null && model.AuthorizationStrategyForCreate.Length == 0) - { - claimSetResourceClaim.AuthorizationStrategyOverride = null; - } - else if (claimSetResourceClaim.Action.ActionName == Action.Read.Value && model.AuthorizationStrategyForRead != null && model.AuthorizationStrategyForRead.Length == 0) - { - claimSetResourceClaim.AuthorizationStrategyOverride = null; - } - else if (claimSetResourceClaim.Action.ActionName == Action.Update.Value && model.AuthorizationStrategyForUpdate != null && model.AuthorizationStrategyForUpdate.Length == 0) - { - claimSetResourceClaim.AuthorizationStrategyOverride = null; - } - else if (claimSetResourceClaim.Action.ActionName == Action.Delete.Value && model.AuthorizationStrategyForDelete != null && model.AuthorizationStrategyForDelete.Length == 0) - { - claimSetResourceClaim.AuthorizationStrategyOverride = null; - } - else if (claimSetResourceClaim.Action.ActionName == Action.ReadChanges.Value && model.AuthorizationStrategyForReadChanges != null - && model.AuthorizationStrategyForReadChanges.Length == 0) - { - claimSetResourceClaim.AuthorizationStrategyOverride = null; - } - } - - return claimSetResourceClaims; - } - - private static void AddOverrides(IOverrideDefaultAuthorizationStrategyModel model, - IEnumerable resourceClaimsToEdit, - Dictionary authorizationStrategiesDictionary, - List parentResourceClaims) - { - var claimSetResourceClaims = resourceClaimsToEdit.ToList(); - foreach (var claimSetResourceClaim in claimSetResourceClaims) - { - - if (claimSetResourceClaim.Action.ActionName == Action.Create.Value && model.AuthorizationStrategyForCreate != null && model.AuthorizationStrategyForCreate.Length != 0) - { - foreach (var authStrategyId in model.AuthorizationStrategyForCreate) - { - if (authStrategyId != 0) - { - if (parentResourceClaims.Any() && parentResourceClaims.SingleOrDefault(x => - x.Action.ActionName == Action.Create.Value && x.AuthorizationStrategyOverride != null && - x.AuthorizationStrategyOverride.AuthorizationStrategyId == authStrategyId) == null) - { - claimSetResourceClaim.AuthorizationStrategyOverride = authorizationStrategiesDictionary[authStrategyId]; - } - else if (!parentResourceClaims.Any()) - { - claimSetResourceClaim.AuthorizationStrategyOverride = authorizationStrategiesDictionary[authStrategyId]; - } - } - } - } - else if (claimSetResourceClaim.Action.ActionName == Action.Read.Value && model.AuthorizationStrategyForRead != null && model.AuthorizationStrategyForRead.Length != 0) - { - foreach (var authStrategyId in model.AuthorizationStrategyForRead) - { - if (authStrategyId != 0) - { - if (parentResourceClaims.Any() && parentResourceClaims.SingleOrDefault(x => - x.Action.ActionName == Action.Read.Value && x.AuthorizationStrategyOverride != null && - x.AuthorizationStrategyOverride.AuthorizationStrategyId == authStrategyId) == null) - { - claimSetResourceClaim.AuthorizationStrategyOverride = authorizationStrategiesDictionary[authStrategyId]; - } - else if (!parentResourceClaims.Any()) - { - claimSetResourceClaim.AuthorizationStrategyOverride = authorizationStrategiesDictionary[authStrategyId]; - } - } - } - } - else if (claimSetResourceClaim.Action.ActionName == Action.Update.Value && model.AuthorizationStrategyForUpdate != null && model.AuthorizationStrategyForUpdate.Length != 0) - { - foreach (var authStrategyId in model.AuthorizationStrategyForUpdate) - { - if (authStrategyId != 0) - { - if (parentResourceClaims.Any() && parentResourceClaims.SingleOrDefault(x => - x.Action.ActionName == Action.Update.Value && x.AuthorizationStrategyOverride != null && - x.AuthorizationStrategyOverride.AuthorizationStrategyId == authStrategyId) == null) - { - claimSetResourceClaim.AuthorizationStrategyOverride = authorizationStrategiesDictionary[authStrategyId]; - } - else if (!parentResourceClaims.Any()) - { - claimSetResourceClaim.AuthorizationStrategyOverride = authorizationStrategiesDictionary[authStrategyId]; - } - } - } - - } - else if (claimSetResourceClaim.Action.ActionName == Action.Delete.Value && model.AuthorizationStrategyForDelete != null && model.AuthorizationStrategyForDelete.Length != 0) - { - foreach (var authStrategyId in model.AuthorizationStrategyForDelete) - { - if (authStrategyId != 0) - { - if (parentResourceClaims.Any() && parentResourceClaims.SingleOrDefault(x => - x.Action.ActionName == Action.Delete.Value && x.AuthorizationStrategyOverride != null && - x.AuthorizationStrategyOverride.AuthorizationStrategyId == authStrategyId) == null) - { - claimSetResourceClaim.AuthorizationStrategyOverride = authorizationStrategiesDictionary[authStrategyId]; - } - else if (!parentResourceClaims.Any()) - { - claimSetResourceClaim.AuthorizationStrategyOverride = authorizationStrategiesDictionary[authStrategyId]; - } - } - } - - } - else if (claimSetResourceClaim.Action.ActionName == Action.ReadChanges.Value && model.AuthorizationStrategyForReadChanges != null - && model.AuthorizationStrategyForReadChanges.Length != 0) - { - foreach (var authStrategyId in model.AuthorizationStrategyForReadChanges) - { - if (authStrategyId != 0) - { - if (parentResourceClaims.Any() && parentResourceClaims.SingleOrDefault(x => - x.Action.ActionName == Action.ReadChanges.Value && x.AuthorizationStrategyOverride != null && - x.AuthorizationStrategyOverride.AuthorizationStrategyId == authStrategyId) == null) - { - claimSetResourceClaim.AuthorizationStrategyOverride = authorizationStrategiesDictionary[authStrategyId]; - } - else if (!parentResourceClaims.Any()) - { - claimSetResourceClaim.AuthorizationStrategyOverride = authorizationStrategiesDictionary[authStrategyId]; - } - } - } - - } - } - } -} diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/UpdateResourcesOnClaimSetCommand.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/UpdateResourcesOnClaimSetCommand.cs index 7250f8ffc..5dc0dc0c6 100644 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/UpdateResourcesOnClaimSetCommand.cs +++ b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/UpdateResourcesOnClaimSetCommand.cs @@ -3,39 +3,20 @@ // The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. // See the LICENSE and NOTICES files in the project root for more information. -using System.Collections.Generic; - namespace EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor { public class UpdateResourcesOnClaimSetCommand { - private readonly IOdsSecurityModelVersionResolver _resolver; - private readonly UpdateResourcesOnClaimSetCommandV53Service _v53Service; - private readonly UpdateResourcesOnClaimSetCommandV6Service _v6Service; + private readonly UpdateResourcesOnClaimSetCommandService _service; - public UpdateResourcesOnClaimSetCommand(IOdsSecurityModelVersionResolver resolver, - UpdateResourcesOnClaimSetCommandV53Service v53Service, - UpdateResourcesOnClaimSetCommandV6Service v6Service) + public UpdateResourcesOnClaimSetCommand(UpdateResourcesOnClaimSetCommandService service) { - _resolver = resolver; - _v53Service = v53Service; - _v6Service = v6Service; + _service = service; } public void Execute(IUpdateResourcesOnClaimSetModel model) { - var securityModel = _resolver.DetermineSecurityModel(); - switch (securityModel) - { - case EdFiOdsSecurityModelCompatibility.ThreeThroughFive or EdFiOdsSecurityModelCompatibility.FiveThreeCqe: - _v53Service.Execute(model); - break; - case EdFiOdsSecurityModelCompatibility.Six: - _v6Service.Execute(model); - break; - default: - throw new EdFiOdsSecurityModelCompatibilityException(securityModel); - } + _service.Execute(model); } } diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/UpdateResourcesOnClaimSetCommandV6Service.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/UpdateResourcesOnClaimSetCommandService.cs similarity index 90% rename from Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/UpdateResourcesOnClaimSetCommandV6Service.cs rename to Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/UpdateResourcesOnClaimSetCommandService.cs index e49134a5c..22ff3a2a6 100644 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/UpdateResourcesOnClaimSetCommandV6Service.cs +++ b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/UpdateResourcesOnClaimSetCommandService.cs @@ -3,18 +3,18 @@ // The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. // See the LICENSE and NOTICES files in the project root for more information. -using EdFi.Security.DataAccess.Contexts; +using EdFi.Security.DataAccess.Contexts; using Microsoft.EntityFrameworkCore; namespace EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor { - public class UpdateResourcesOnClaimSetCommandV6Service + public class UpdateResourcesOnClaimSetCommandService { private readonly ISecurityContext _context; private readonly AddOrEditResourcesOnClaimSetCommand _addOrEditResourcesOnClaimSetCommand; - public UpdateResourcesOnClaimSetCommandV6Service(ISecurityContext context, + public UpdateResourcesOnClaimSetCommandService(ISecurityContext context, AddOrEditResourcesOnClaimSetCommand addOrEditResourcesOnClaimSetCommand) { _context = context; @@ -24,9 +24,9 @@ public UpdateResourcesOnClaimSetCommandV6Service(ISecurityContext context, public void Execute(IUpdateResourcesOnClaimSetModel model) { var resourceClaimsForClaimSet = - _context - .ClaimSetResourceClaimActions - .Include(x => x.AuthorizationStrategyOverrides).ThenInclude(x => x.AuthorizationStrategy) + _context + .ClaimSetResourceClaimActions + .Include(x => x.AuthorizationStrategyOverrides).ThenInclude(x => x.AuthorizationStrategy) .Where(x => x.ClaimSet.ClaimSetId == model.ClaimSetId).ToList(); _context.ClaimSetResourceClaimActions.RemoveRange(resourceClaimsForClaimSet); _context.SaveChanges(); diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/UpdateResourcesOnClaimSetCommandV53Service.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/UpdateResourcesOnClaimSetCommandV53Service.cs deleted file mode 100644 index 72ce948c6..000000000 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/Services/ClaimSetEditor/UpdateResourcesOnClaimSetCommandV53Service.cs +++ /dev/null @@ -1,35 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -// Licensed to the Ed-Fi Alliance under one or more agreements. -// The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. -// See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; - -using Compatability::EdFi.SecurityCompatiblity53.DataAccess.Contexts; - -namespace EdFi.Ods.AdminApi.Infrastructure.ClaimSetEditor -{ - public class UpdateResourcesOnClaimSetCommandV53Service - { - private readonly ISecurityContext _context; - private readonly AddOrEditResourcesOnClaimSetCommand _addOrEditResourcesOnClaimSetCommand; - - public UpdateResourcesOnClaimSetCommandV53Service(ISecurityContext context, - AddOrEditResourcesOnClaimSetCommand addOrEditResourcesOnClaimSetCommand) - { - _context = context; - _addOrEditResourcesOnClaimSetCommand = addOrEditResourcesOnClaimSetCommand; - } - - public void Execute(IUpdateResourcesOnClaimSetModel model) - { - var resourceClaimsForClaimSet = - _context.ClaimSetResourceClaims.Where(x => x.ClaimSet.ClaimSetId == model.ClaimSetId).ToList(); - _context.ClaimSetResourceClaims.RemoveRange(resourceClaimsForClaimSet); - _context.SaveChanges(); - - if (model.ResourceClaims == null) return; - - _addOrEditResourcesOnClaimSetCommand.Execute(model.ClaimSetId, model.ResourceClaims); - } - } -} diff --git a/Application/EdFi.Ods.AdminApi/Infrastructure/WebApplicationBuilderExtensions.cs b/Application/EdFi.Ods.AdminApi/Infrastructure/WebApplicationBuilderExtensions.cs index d1d7ef162..19ded14c1 100644 --- a/Application/EdFi.Ods.AdminApi/Infrastructure/WebApplicationBuilderExtensions.cs +++ b/Application/EdFi.Ods.AdminApi/Infrastructure/WebApplicationBuilderExtensions.cs @@ -2,7 +2,6 @@ // Licensed to the Ed-Fi Alliance under one or more agreements. // The Ed-Fi Alliance licenses this file to you under the Apache License, Version 2.0. // See the LICENSE and NOTICES files in the project root for more information. -extern alias Compatability; using System.Reflection; using EdFi.Admin.DataAccess.Contexts; @@ -65,13 +64,6 @@ public static void AddServices(this WebApplicationBuilder webApplicationBuilder) } } - //Add service to identify ODS Version - webApplicationBuilder.Services.AddSingleton(sp => - { - var odsApiVersion = webApplicationBuilder.Configuration.GetValue("AppSettings:OdsApiVersion"); - return new OdsSecurityVersionResolver(odsApiVersion); - }); - // Add services to the container. // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle webApplicationBuilder.Services.AddEndpointsApiExplorer(); @@ -131,7 +123,6 @@ public static void AddServices(this WebApplicationBuilder webApplicationBuilder) opt.DocumentFilter(); opt.SchemaFilter(); - opt.SchemaFilter(); opt.OperationFilter(); opt.EnableAnnotations(); opt.OrderActionsBy(x => @@ -195,9 +186,6 @@ private static (string adminConnectionString, bool) AddDatabases(this WebApplica optionsBuilder.UseLowerCaseNamingConvention(); var context = new PostgresSecurityContext(optionsBuilder.Options); - webApplicationBuilder.Services.AddScoped( - sp => new Compatability::EdFi.SecurityCompatiblity53.DataAccess.Contexts.PostgresSecurityContext(optionsBuilder.Options)); - webApplicationBuilder.Services.AddScoped( sp => new PostgresSecurityContext(SecurityDbContextOptions(DatabaseEngineEnum.PostgreSql))); @@ -220,9 +208,6 @@ private static (string adminConnectionString, bool) AddDatabases(this WebApplica optionsBuilder.UseSqlServer(securityConnectionString); var context = new SqlServerSecurityContext(optionsBuilder.Options); - webApplicationBuilder.Services.AddScoped( - sp => new Compatability::EdFi.SecurityCompatiblity53.DataAccess.Contexts.SqlServerSecurityContext(optionsBuilder.Options)); - webApplicationBuilder.Services.AddScoped( sp => new SqlServerSecurityContext(SecurityDbContextOptions(DatabaseEngineEnum.SqlServer))); diff --git a/Docker/dev.mssql.Dockerfile b/Docker/dev.mssql.Dockerfile index 5a9e82fca..b3eef21c9 100644 --- a/Docker/dev.mssql.Dockerfile +++ b/Docker/dev.mssql.Dockerfile @@ -13,6 +13,7 @@ WORKDIR /source COPY --from=assets ./Application/NuGet.Config EdFi.Ods.AdminApi/ COPY --from=assets ./Application/EdFi.Ods.AdminApi EdFi.Ods.AdminApi/ +COPY --from=assets ./Application/Directory.Packages.props ./ WORKDIR /source/EdFi.Ods.AdminApi diff --git a/Docker/dev.pgsql.Dockerfile b/Docker/dev.pgsql.Dockerfile index f3cc67d4e..4f2454a5a 100644 --- a/Docker/dev.pgsql.Dockerfile +++ b/Docker/dev.pgsql.Dockerfile @@ -12,6 +12,7 @@ WORKDIR /source COPY --from=assets Application/NuGet.Config EdFi.Ods.AdminApi/ COPY --from=assets Application/EdFi.Ods.AdminApi EdFi.Ods.AdminApi/ +COPY --from=assets ./Application/Directory.Packages.props ./ WORKDIR /source/EdFi.Ods.AdminApi RUN dotnet restore && dotnet build -c Release