Skip to content

Commit b9e09e8

Browse files
andreasisnesJon Kjetil Øye
andauthored
issues(2619): Be om tilgang | GET request/draft (#2622)
* draft * - fix system-resource authorization - fix wrong scope authorization on GET instances/users --------- Co-authored-by: Jon Kjetil Øye <acn-joye@ai-dev.no>
1 parent 6048127 commit b9e09e8

File tree

2 files changed

+54
-2
lines changed

2 files changed

+54
-2
lines changed

src/apps/Altinn.AccessManagement/src/Altinn.AccessManagement.Api.Enduser/Controllers/ConnectionsController.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1118,7 +1118,7 @@ public async Task<IActionResult> CheckInstance(
11181118
/// Gets all users who have access to a specific instance.
11191119
/// </summary>
11201120
[HttpGet("resources/instances/users")]
1121-
[Authorize(Policy = AuthzConstants.POLICY_ENDUSER_CONNECTIONS_BIDRECTIONAL_READ)]
1121+
[Authorize(Policy = AuthzConstants.POLICY_ENDUSER_CONNECTIONS_WRITE_TOOTHERS)]
11221122
[Authorize(Policy = AuthzConstants.POLICY_INSTANCE_DELEGATION)]
11231123
[ProducesResponseType<PaginatedResult<SimplifiedPartyDto>>(StatusCodes.Status200OK, MediaTypeNames.Application.Json)]
11241124
[ProducesResponseType<AltinnProblemDetails>(StatusCodes.Status400BadRequest, MediaTypeNames.Application.Json)]

src/apps/Altinn.AccessManagement/src/Altinn.AccessManagement.Api.Enduser/Controllers/RequestController.cs

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.ComponentModel.DataAnnotations;
22
using System.Net.Mime;
3+
using System.Security.Claims;
34
using Altinn.AccessManagement.Api.Enduser.Models;
45
using Altinn.AccessManagement.Core.Constants;
56
using Altinn.AccessManagement.Core.Errors;
@@ -12,9 +13,12 @@
1213
using Altinn.AccessMgmt.PersistenceEF.Constants;
1314
using Altinn.AccessMgmt.PersistenceEF.Queries.Connection;
1415
using Altinn.AccessMgmt.PersistenceEF.Utils;
16+
using Altinn.Authorization.ABAC.Xacml.JsonProfile;
1517
using Altinn.Authorization.Api.Contracts.AccessManagement;
1618
using Altinn.Authorization.Api.Contracts.AccessManagement.Request;
1719
using Altinn.Authorization.ProblemDetails;
20+
using Altinn.Common.PEP.Helpers;
21+
using Altinn.Common.PEP.Interfaces;
1822
using Azure.Core;
1923
using Microsoft.AspNetCore.Authorization;
2024
using Microsoft.AspNetCore.Mvc;
@@ -32,7 +36,8 @@ public class RequestController(
3236
IConnectionService connectionService,
3337
ConnectionQuery connectionQuery,
3438
IResourceService resourceService,
35-
IEntityService entityService
39+
IEntityService entityService,
40+
IPDP Pdp
3641
) : ControllerBase
3742
{
3843
private Action<ConnectionOptions> ConfigureConnections { get; } = options =>
@@ -96,6 +101,35 @@ public async Task<IActionResult> GetReceivedRequests(
96101
return result.IsSuccess ? Ok(PaginatedResult.Create(result.Value, null)) : result.Problem.ToActionResult();
97102
}
98103

104+
[HttpGet("draft")]
105+
[FeatureGate(RequirementType.Any, AccessMgmtFeatureFlags.EnableRequestAssignmentResource)]
106+
[Authorize(Policy = AuthzConstants.SCOPE_PORTAL_ENDUSER)]
107+
[ProducesResponseType<RequestDto>(StatusCodes.Status200OK, MediaTypeNames.Application.Json)]
108+
[ProducesResponseType<AltinnProblemDetails>(StatusCodes.Status400BadRequest, MediaTypeNames.Application.Json)]
109+
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
110+
[ProducesResponseType(StatusCodes.Status403Forbidden)]
111+
public async Task<IActionResult> GetDraftRequest([FromQuery][Required] Guid id, CancellationToken ct = default)
112+
{
113+
var result = await requestService.GetRequest(id, ct);
114+
if (result.IsProblem)
115+
{
116+
return Forbid();
117+
}
118+
119+
if (result.Value.Status != RequestStatus.Draft)
120+
{
121+
return Forbid();
122+
}
123+
124+
bool isAuthorized = await AuthorizeResourceAccess("altinn_access_management", result.Value.From.Id, User, "write");
125+
if (isAuthorized)
126+
{
127+
return Forbid();
128+
}
129+
130+
return Ok(result.Value);
131+
}
132+
99133
[HttpGet]
100134
[FeatureGate(RequirementType.Any, AccessMgmtFeatureFlags.EnableRequestAssignmentResource, AccessMgmtFeatureFlags.EnableRequestAssignmentPackage)]
101135
[Authorize(Policy = AuthzConstants.POLICY_ACCESS_MANAGEMENT_ENDUSER_READ)]
@@ -452,4 +486,22 @@ private async Task<IActionResult> UpdateRequestStatus(Guid partyUuid, Guid id, R
452486

453487
return Ok(result.Value);
454488
}
489+
490+
private async Task<bool> AuthorizeResourceAccess(string resource, Guid resourceParty, ClaimsPrincipal userPrincipal, string action)
491+
{
492+
XacmlJsonRequestRoot request = DecisionHelper.CreateDecisionRequestForResourceRegistryResource(resource, resourceParty, userPrincipal, action);
493+
XacmlJsonResponse response = await Pdp.GetDecisionForRequest(request);
494+
495+
if (response?.Response == null)
496+
{
497+
throw new InvalidOperationException("response");
498+
}
499+
500+
if (!DecisionHelper.ValidatePdpDecision(response.Response, userPrincipal))
501+
{
502+
return false;
503+
}
504+
505+
return true;
506+
}
455507
}

0 commit comments

Comments
 (0)