From b49c59ac64efdaae6598300783b584dd6b042618 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Dybvik=20Langfors?= Date: Tue, 13 Aug 2024 07:49:42 +0200 Subject: [PATCH 1/3] Add current user flag to parties dto --- docs/schema/V1/swagger.verified.json | 3 +++ .../AltinnAuthorization/AuthorizedPartiesResult.cs | 1 + .../V1/EndUser/Parties/Queries/Get/GetPartiesDto.cs | 1 + .../Authorization/AltinnAuthorizationClient.cs | 2 +- .../Altinn/Authorization/AuthorizedPartiesHelper.cs | 12 ++++++++---- .../LocalDevelopmentAltinnAuthorization.cs | 2 +- 6 files changed, 15 insertions(+), 6 deletions(-) diff --git a/docs/schema/V1/swagger.verified.json b/docs/schema/V1/swagger.verified.json index bbf8c80bf..531bff2ad 100644 --- a/docs/schema/V1/swagger.verified.json +++ b/docs/schema/V1/swagger.verified.json @@ -4288,6 +4288,9 @@ "hasKeyRole": { "type": "boolean" }, + "isCurrentUser": { + "type": "boolean" + }, "isMainAdministrator": { "type": "boolean" }, diff --git a/src/Digdir.Domain.Dialogporten.Application/Externals/AltinnAuthorization/AuthorizedPartiesResult.cs b/src/Digdir.Domain.Dialogporten.Application/Externals/AltinnAuthorization/AuthorizedPartiesResult.cs index 3556c0a96..4e7e82b65 100644 --- a/src/Digdir.Domain.Dialogporten.Application/Externals/AltinnAuthorization/AuthorizedPartiesResult.cs +++ b/src/Digdir.Domain.Dialogporten.Application/Externals/AltinnAuthorization/AuthorizedPartiesResult.cs @@ -12,6 +12,7 @@ public class AuthorizedParty public AuthorizedPartyType PartyType { get; init; } public bool IsDeleted { get; init; } public bool HasKeyRole { get; init; } + public bool IsCurrentUser { get; set; } public bool IsMainAdministrator { get; init; } public bool IsAccessManager { get; init; } public bool HasOnlyAccessToSubParties { get; init; } diff --git a/src/Digdir.Domain.Dialogporten.Application/Features/V1/EndUser/Parties/Queries/Get/GetPartiesDto.cs b/src/Digdir.Domain.Dialogporten.Application/Features/V1/EndUser/Parties/Queries/Get/GetPartiesDto.cs index 63132f2c6..5ccd0106a 100644 --- a/src/Digdir.Domain.Dialogporten.Application/Features/V1/EndUser/Parties/Queries/Get/GetPartiesDto.cs +++ b/src/Digdir.Domain.Dialogporten.Application/Features/V1/EndUser/Parties/Queries/Get/GetPartiesDto.cs @@ -12,6 +12,7 @@ public class AuthorizedPartyDto public string PartyType { get; init; } = null!; public bool IsDeleted { get; init; } public bool HasKeyRole { get; init; } + public bool IsCurrentUser { get; init; } public bool IsMainAdministrator { get; init; } public bool IsAccessManager { get; init; } public bool HasOnlyAccessToSubParties { get; init; } diff --git a/src/Digdir.Domain.Dialogporten.Infrastructure/Altinn/Authorization/AltinnAuthorizationClient.cs b/src/Digdir.Domain.Dialogporten.Infrastructure/Altinn/Authorization/AltinnAuthorizationClient.cs index 322a9c381..32562db63 100644 --- a/src/Digdir.Domain.Dialogporten.Infrastructure/Altinn/Authorization/AltinnAuthorizationClient.cs +++ b/src/Digdir.Domain.Dialogporten.Infrastructure/Altinn/Authorization/AltinnAuthorizationClient.cs @@ -89,7 +89,7 @@ private async Task PerformAuthorizedPartiesRequest(Auth CancellationToken token) { var authorizedPartiesDto = await SendAuthorizedPartiesRequest(authorizedPartiesRequest, token); - return AuthorizedPartiesHelper.CreateAuthorizedPartiesResult(authorizedPartiesDto); + return AuthorizedPartiesHelper.CreateAuthorizedPartiesResult(authorizedPartiesDto, authorizedPartiesRequest); } private async Task PerformNonScalableDialogSearchAuthorization( diff --git a/src/Digdir.Domain.Dialogporten.Infrastructure/Altinn/Authorization/AuthorizedPartiesHelper.cs b/src/Digdir.Domain.Dialogporten.Infrastructure/Altinn/Authorization/AuthorizedPartiesHelper.cs index b4a73f88a..ec70b55e2 100644 --- a/src/Digdir.Domain.Dialogporten.Infrastructure/Altinn/Authorization/AuthorizedPartiesHelper.cs +++ b/src/Digdir.Domain.Dialogporten.Infrastructure/Altinn/Authorization/AuthorizedPartiesHelper.cs @@ -1,3 +1,4 @@ +using System.Xml; using Digdir.Domain.Dialogporten.Application.Externals.AltinnAuthorization; using Digdir.Domain.Dialogporten.Domain.Parties; @@ -11,21 +12,23 @@ internal static class AuthorizedPartiesHelper private const string MainAdministratorRoleCode = "HADM"; private const string AccessManagerRoleCode = "ADMAI"; private static readonly string[] KeyRoleCodes = ["DAGL", "LEDE", "INNH", "DTPR", "DTSO", "BEST"]; - public static AuthorizedPartiesResult CreateAuthorizedPartiesResult(List? authorizedPartiesDto) + public static AuthorizedPartiesResult CreateAuthorizedPartiesResult( + List? authorizedPartiesDto, + AuthorizedPartiesRequest authorizedPartiesRequest) { var result = new AuthorizedPartiesResult(); if (authorizedPartiesDto is not null) { foreach (var authorizedPartyDto in authorizedPartiesDto) { - result.AuthorizedParties.Add(MapFromDto(authorizedPartyDto)); + result.AuthorizedParties.Add(MapFromDto(authorizedPartyDto, authorizedPartiesRequest.Value)); } } return result; } - private static AuthorizedParty MapFromDto(AuthorizedPartiesResultDto dto) + private static AuthorizedParty MapFromDto(AuthorizedPartiesResultDto dto, string currentUserValue) { var party = dto.Type switch { @@ -46,11 +49,12 @@ private static AuthorizedParty MapFromDto(AuthorizedPartiesResultDto dto) }, IsDeleted = dto.IsDeleted, HasKeyRole = dto.AuthorizedRoles.Exists(role => KeyRoleCodes.Contains(role)), + IsCurrentUser = dto.PersonId == currentUserValue, IsMainAdministrator = dto.AuthorizedRoles.Contains(MainAdministratorRoleCode), IsAccessManager = dto.AuthorizedRoles.Contains(AccessManagerRoleCode), HasOnlyAccessToSubParties = dto.OnlyHierarchyElementWithNoAccess, AuthorizedResources = GetPrefixedResources(dto.AuthorizedResources), - SubParties = dto.Subunits.Count > 0 ? dto.Subunits.Select(MapFromDto).ToList() : null + SubParties = dto.Subunits.Count > 0 ? dto.Subunits.Select(x => MapFromDto(x, currentUserValue)).ToList() : null }; } diff --git a/src/Digdir.Domain.Dialogporten.Infrastructure/Altinn/Authorization/LocalDevelopmentAltinnAuthorization.cs b/src/Digdir.Domain.Dialogporten.Infrastructure/Altinn/Authorization/LocalDevelopmentAltinnAuthorization.cs index dc49a1409..8931f6b6a 100644 --- a/src/Digdir.Domain.Dialogporten.Infrastructure/Altinn/Authorization/LocalDevelopmentAltinnAuthorization.cs +++ b/src/Digdir.Domain.Dialogporten.Infrastructure/Altinn/Authorization/LocalDevelopmentAltinnAuthorization.cs @@ -50,5 +50,5 @@ public async Task GetAuthorizedResourcesForSear } public async Task GetAuthorizedParties(IPartyIdentifier authenticatedParty, CancellationToken cancellationToken = default) - => await Task.FromResult(new AuthorizedPartiesResult { AuthorizedParties = [new() { Name = "Local Party", Party = authenticatedParty.FullId }] }); + => await Task.FromResult(new AuthorizedPartiesResult { AuthorizedParties = [new() { Name = "Local Party", Party = authenticatedParty.FullId, IsCurrentUser = true }] }); } From c3d8519cec204a3649d7360628032828a0c8b811 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Dybvik=20Langfors?= Date: Tue, 13 Aug 2024 08:20:59 +0200 Subject: [PATCH 2/3] Update GQL dtos, rename to IsCurrentEndUser --- docs/schema/V1/schema.verified.graphql | 1 + .../Externals/AltinnAuthorization/AuthorizedPartiesResult.cs | 2 +- .../Features/V1/EndUser/Parties/Queries/Get/GetPartiesDto.cs | 2 +- .../EndUser/Parties/ObjectTypes.cs | 1 + .../Altinn/Authorization/AuthorizedPartiesHelper.cs | 2 +- .../Altinn/Authorization/LocalDevelopmentAltinnAuthorization.cs | 2 +- 6 files changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/schema/V1/schema.verified.graphql b/docs/schema/V1/schema.verified.graphql index c011a9e17..65d0920f0 100644 --- a/docs/schema/V1/schema.verified.graphql +++ b/docs/schema/V1/schema.verified.graphql @@ -65,6 +65,7 @@ type AuthorizedParty { partyType: String! isDeleted: Boolean! hasKeyRole: Boolean! + isCurrentUser: Boolean! isMainAdministrator: Boolean! isAccessManager: Boolean! hasOnlyAccessToSubParties: Boolean! diff --git a/src/Digdir.Domain.Dialogporten.Application/Externals/AltinnAuthorization/AuthorizedPartiesResult.cs b/src/Digdir.Domain.Dialogporten.Application/Externals/AltinnAuthorization/AuthorizedPartiesResult.cs index 4e7e82b65..920275db9 100644 --- a/src/Digdir.Domain.Dialogporten.Application/Externals/AltinnAuthorization/AuthorizedPartiesResult.cs +++ b/src/Digdir.Domain.Dialogporten.Application/Externals/AltinnAuthorization/AuthorizedPartiesResult.cs @@ -12,7 +12,7 @@ public class AuthorizedParty public AuthorizedPartyType PartyType { get; init; } public bool IsDeleted { get; init; } public bool HasKeyRole { get; init; } - public bool IsCurrentUser { get; set; } + public bool IsCurrentEndUser { get; set; } public bool IsMainAdministrator { get; init; } public bool IsAccessManager { get; init; } public bool HasOnlyAccessToSubParties { get; init; } diff --git a/src/Digdir.Domain.Dialogporten.Application/Features/V1/EndUser/Parties/Queries/Get/GetPartiesDto.cs b/src/Digdir.Domain.Dialogporten.Application/Features/V1/EndUser/Parties/Queries/Get/GetPartiesDto.cs index 5ccd0106a..a94da37c4 100644 --- a/src/Digdir.Domain.Dialogporten.Application/Features/V1/EndUser/Parties/Queries/Get/GetPartiesDto.cs +++ b/src/Digdir.Domain.Dialogporten.Application/Features/V1/EndUser/Parties/Queries/Get/GetPartiesDto.cs @@ -12,7 +12,7 @@ public class AuthorizedPartyDto public string PartyType { get; init; } = null!; public bool IsDeleted { get; init; } public bool HasKeyRole { get; init; } - public bool IsCurrentUser { get; init; } + public bool IsCurrentEndUser { get; init; } public bool IsMainAdministrator { get; init; } public bool IsAccessManager { get; init; } public bool HasOnlyAccessToSubParties { get; init; } diff --git a/src/Digdir.Domain.Dialogporten.GraphQL/EndUser/Parties/ObjectTypes.cs b/src/Digdir.Domain.Dialogporten.GraphQL/EndUser/Parties/ObjectTypes.cs index 61f271ea0..02fcf9abe 100644 --- a/src/Digdir.Domain.Dialogporten.GraphQL/EndUser/Parties/ObjectTypes.cs +++ b/src/Digdir.Domain.Dialogporten.GraphQL/EndUser/Parties/ObjectTypes.cs @@ -7,6 +7,7 @@ public class AuthorizedParty public string PartyType { get; init; } = null!; public bool IsDeleted { get; init; } public bool HasKeyRole { get; init; } + public bool IsCurrentEndUser { get; init; } public bool IsMainAdministrator { get; init; } public bool IsAccessManager { get; init; } public bool HasOnlyAccessToSubParties { get; init; } diff --git a/src/Digdir.Domain.Dialogporten.Infrastructure/Altinn/Authorization/AuthorizedPartiesHelper.cs b/src/Digdir.Domain.Dialogporten.Infrastructure/Altinn/Authorization/AuthorizedPartiesHelper.cs index ec70b55e2..dbf9b662b 100644 --- a/src/Digdir.Domain.Dialogporten.Infrastructure/Altinn/Authorization/AuthorizedPartiesHelper.cs +++ b/src/Digdir.Domain.Dialogporten.Infrastructure/Altinn/Authorization/AuthorizedPartiesHelper.cs @@ -49,7 +49,7 @@ private static AuthorizedParty MapFromDto(AuthorizedPartiesResultDto dto, string }, IsDeleted = dto.IsDeleted, HasKeyRole = dto.AuthorizedRoles.Exists(role => KeyRoleCodes.Contains(role)), - IsCurrentUser = dto.PersonId == currentUserValue, + IsCurrentEndUser = dto.PersonId == currentUserValue, IsMainAdministrator = dto.AuthorizedRoles.Contains(MainAdministratorRoleCode), IsAccessManager = dto.AuthorizedRoles.Contains(AccessManagerRoleCode), HasOnlyAccessToSubParties = dto.OnlyHierarchyElementWithNoAccess, diff --git a/src/Digdir.Domain.Dialogporten.Infrastructure/Altinn/Authorization/LocalDevelopmentAltinnAuthorization.cs b/src/Digdir.Domain.Dialogporten.Infrastructure/Altinn/Authorization/LocalDevelopmentAltinnAuthorization.cs index 8931f6b6a..7e4bbbcdc 100644 --- a/src/Digdir.Domain.Dialogporten.Infrastructure/Altinn/Authorization/LocalDevelopmentAltinnAuthorization.cs +++ b/src/Digdir.Domain.Dialogporten.Infrastructure/Altinn/Authorization/LocalDevelopmentAltinnAuthorization.cs @@ -50,5 +50,5 @@ public async Task GetAuthorizedResourcesForSear } public async Task GetAuthorizedParties(IPartyIdentifier authenticatedParty, CancellationToken cancellationToken = default) - => await Task.FromResult(new AuthorizedPartiesResult { AuthorizedParties = [new() { Name = "Local Party", Party = authenticatedParty.FullId, IsCurrentUser = true }] }); + => await Task.FromResult(new AuthorizedPartiesResult { AuthorizedParties = [new() { Name = "Local Party", Party = authenticatedParty.FullId, IsCurrentEndUser = true }] }); } From 98e169dcc0ede830789e907736cf2680b7cd40d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Dybvik=20Langfors?= Date: Tue, 13 Aug 2024 08:22:31 +0200 Subject: [PATCH 3/3] Update schema exports --- docs/schema/V1/schema.verified.graphql | 2 +- docs/schema/V1/swagger.verified.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/schema/V1/schema.verified.graphql b/docs/schema/V1/schema.verified.graphql index 65d0920f0..f6cd0840c 100644 --- a/docs/schema/V1/schema.verified.graphql +++ b/docs/schema/V1/schema.verified.graphql @@ -65,7 +65,7 @@ type AuthorizedParty { partyType: String! isDeleted: Boolean! hasKeyRole: Boolean! - isCurrentUser: Boolean! + isCurrentEndUser: Boolean! isMainAdministrator: Boolean! isAccessManager: Boolean! hasOnlyAccessToSubParties: Boolean! diff --git a/docs/schema/V1/swagger.verified.json b/docs/schema/V1/swagger.verified.json index 531bff2ad..3416b471e 100644 --- a/docs/schema/V1/swagger.verified.json +++ b/docs/schema/V1/swagger.verified.json @@ -4288,7 +4288,7 @@ "hasKeyRole": { "type": "boolean" }, - "isCurrentUser": { + "isCurrentEndUser": { "type": "boolean" }, "isMainAdministrator": {