diff --git a/src/apps/Altinn.AccessManagement/src/Altinn.AccessManagement.Core/Models/ResourceRegistry/ServiceResource.cs b/src/apps/Altinn.AccessManagement/src/Altinn.AccessManagement.Core/Models/ResourceRegistry/ServiceResource.cs
index b708a8ad6..fa2886325 100644
--- a/src/apps/Altinn.AccessManagement/src/Altinn.AccessManagement.Core/Models/ResourceRegistry/ServiceResource.cs
+++ b/src/apps/Altinn.AccessManagement/src/Altinn.AccessManagement.Core/Models/ResourceRegistry/ServiceResource.cs
@@ -1,74 +1,84 @@
-using System.Text.Json.Serialization;
-using Altinn.AccessManagement.Core.Enums;
+#nullable enable
+using System.ComponentModel.DataAnnotations;
+using System.Text.Json.Serialization;
using Altinn.AccessManagement.Core.Enums.ResourceRegistry;
namespace Altinn.AccessManagement.Core.Models.ResourceRegistry
{
///
- /// Model describing a complete resource from the resource registry.
+ /// Model describing a complete resource from the resrouce registry
///
public class ServiceResource
{
///
/// The identifier of the resource
///
- public string Identifier { get; set; }
+ [Required]
+ public string? Identifier { get; set; }
+
+ ///
+ /// The version of the resource
+ ///
+ public string? Version { get; set; }
///
/// The title of service
///
- public Dictionary Title { get; set; }
+ [Required]
+ public Dictionary? Title { get; set; }
///
/// Description
///
- public Dictionary Description { get; set; }
+ [Required]
+ public Dictionary? Description { get; set; }
///
/// Description explaining the rights a recipient will receive if given access to the resource
///
- public Dictionary RightDescription { get; set; }
+ public Dictionary? RightDescription { get; set; }
///
/// The homepage
///
- public string Homepage { get; set; }
+ public string? Homepage { get; set; }
///
/// The status
///
- public string Status { get; set; }
+ public string? Status { get; set; }
///
/// spatial coverage
/// This property represents that area(s) a Public Service is likely to be available only within, typically the area(s) covered by a particular public authority.
///
- public List Spatial { get; set; }
+ public List? Spatial { get; set; }
///
/// List of possible contact points
///
- public List ContactPoints { get; set; }
+ [Required]
+ public List? ContactPoints { get; set; }
///
/// Linkes to the outcome of a public service
///
- public List Produces { get; set; }
+ public List? Produces { get; set; }
///
/// IsPartOf
///
- public string IsPartOf { get; set; }
+ public string? IsPartOf { get; set; }
///
/// ThematicAreas
///
- public List ThematicAreas { get; set; }
+ public List? ThematicAreas { get; set; }
///
/// ResourceReference
///
- public List ResourceReferences { get; set; }
+ public List? ResourceReferences { get; set; }
///
/// Is this resource possible to delegate to others or not
@@ -83,12 +93,13 @@ public class ServiceResource
///
/// HasCompetentAuthority
///
- public CompetentAuthority HasCompetentAuthority { get; set; }
+ [Required]
+ public CompetentAuthority? HasCompetentAuthority { get; set; }
///
/// Keywords
///
- public List Keywords { get; set; }
+ public List? Keywords { get; set; }
///
/// Sets the access list mode for the resource
@@ -115,22 +126,37 @@ public class ServiceResource
///
/// Available for type defines which type of entity / person that resource targets
///
- public List AvailableForType { get; set; }
+ public List? AvailableForType { get; set; }
///
/// List of autorizationReference attributes to reference this resource in authorization API
///
- public List AuthorizationReference { get; set; }
+ public List? AuthorizationReference { get; set; }
+
+ ///
+ /// Consent template defines which template to use if resource is a consent resource
+ ///
+ public string? ConsentTemplate { get; set; }
+
+ ///
+ /// Consent text is markdown text used if resource is a consent resource
+ ///
+ public Dictionary? ConsentText { get; set; }
+
+ ///
+ /// Defines consentmetadata for consent resources
+ ///
+ public Dictionary? ConsentMetadata { get; set; }
///
- /// Defines consentmendtata for consent resources
+ /// Defines if consent resource is used for one time consents, or consents with an expiry date
///
- public Dictionary ConsentMetadata { get; set; }
+ public bool IsOneTimeConsent { get; set; }
///
- /// The consent template that is used for this resource.
+ /// Gets or sets the unique identifier for the version of the entity.
///
- public string ConsentTemplate { get; set; }
+ public int VersionId { get; set; }
///
/// Writes key information when this object is written to Log.
diff --git a/src/apps/Altinn.AccessManagement/src/Altinn.AccessManagement.Core/Services/ConsentService.cs b/src/apps/Altinn.AccessManagement/src/Altinn.AccessManagement.Core/Services/ConsentService.cs
index d10cdc7d8..e70f0ca07 100644
--- a/src/apps/Altinn.AccessManagement/src/Altinn.AccessManagement.Core/Services/ConsentService.cs
+++ b/src/apps/Altinn.AccessManagement/src/Altinn.AccessManagement.Core/Services/ConsentService.cs
@@ -732,7 +732,8 @@ private static void ValidateContext(ConsentContext context, ref ValidationErrorB
}
else
{
- ServiceResource resourceDetails = await _resourceRegistryClient.GetResource(consentRight.Resource[0].Value, cancelactionToken);
+ ConsentResourceAttribute consentResourceAttribute = consentRight.Resource[0];
+ ServiceResource resourceDetails = await _resourceRegistryClient.GetResource(consentResourceAttribute.Value, cancelactionToken);
if (resourceDetails == null)
{
problemsBuilder.Add(Problems.InvalidConsentResource);
@@ -744,6 +745,7 @@ private static void ValidateContext(ConsentContext context, ref ValidationErrorB
else
{
ValidateConsentMetadata(ref problemsBuilder, rightIndex, consentRight, resourceDetails);
+ consentResourceAttribute.Version = resourceDetails.VersionId.ToString();
}
if (resourceDetails != null && string.IsNullOrEmpty(templateId))
diff --git a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Controllers/Bff/ConsentControllerTestBFF.cs b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Controllers/Bff/ConsentControllerTestBFF.cs
index 03cdb2b68..abd4d14b3 100644
--- a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Controllers/Bff/ConsentControllerTestBFF.cs
+++ b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Controllers/Bff/ConsentControllerTestBFF.cs
@@ -477,6 +477,8 @@ public async Task GetConsent_Valid()
Assert.Equal("d5b861c8-8e3b-44cd-9952-5315e5990cf5", consentRequest.From.ValueSpan);
Assert.Equal("8ef5e5fa-94e1-4869-8635-df86b6219181", consentRequest.To.ValueSpan); // TODO FIx
Assert.Equal("urn:altinn:resource", consentRequest.ConsentRights[0].Resource[0].Type);
+ Assert.Equal("1", consentRequest.ConsentRights[0].Resource[0].Version);
+ Assert.Equal("4", consentRequest.ConsentRights[1].Resource[0].Version);
Assert.Equal(consentContextExternal.Language, consentRequest.Context.Language);
}
diff --git a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_a4253d59-b40f-409a-a3f7-c6395f065192.json b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_a4253d59-b40f-409a-a3f7-c6395f065192.json
index 5459fe9ec..3f9515217 100644
--- a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_a4253d59-b40f-409a-a3f7-c6395f065192.json
+++ b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_a4253d59-b40f-409a-a3f7-c6395f065192.json
@@ -1,4 +1,4 @@
-{
+{
"iD": "a4253d59-b40f-409a-a3f7-c6395f065192",
"from": "urn:altinn:party:uuid:d5b861c8-8e3b-44cd-9952-5315e5990cf5",
"to": "urn:altinn:party:uuid:8ef5e5fa-94e1-4869-8635-df86b6219181",
@@ -17,7 +17,8 @@
"resource": [
{
"type": "urn:altinn:resource",
- "value": "ttd_skattegrunnlag"
+ "value": "ttd_skattegrunnlag",
+ "version": "1"
}
],
"metadata": {
@@ -32,7 +33,8 @@
"resource": [
{
"type": "urn:altinn:resource",
- "value": "ttd_inntektsopplysninger"
+ "value": "ttd_inntektsopplysninger",
+ "version": "4"
}
],
"metadata": {
diff --git a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e2071c55-6adf-487b-af05-9198a230ed44.json b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e2071c55-6adf-487b-af05-9198a230ed44.json
index c6a332778..c1b99201c 100644
--- a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e2071c55-6adf-487b-af05-9198a230ed44.json
+++ b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e2071c55-6adf-487b-af05-9198a230ed44.json
@@ -1,4 +1,4 @@
-{
+{
"iD": "e2071c55-6adf-487b-af05-9198a230ed44",
"from": "urn:altinn:party:uuid:d5b861c8-8e3b-44cd-9952-5315e5990cf5",
"to": "urn:altinn:party:uuid:8ef5e5fa-94e1-4869-8635-df86b6219181",
@@ -16,7 +16,8 @@
"resource": [
{
"type": "urn:altinn:resource",
- "value": "ttd_skattegrunnlag"
+ "value": "ttd_skattegrunnlag",
+ "version": "1"
}
],
"metadata": {
@@ -31,7 +32,8 @@
"resource": [
{
"type": "urn:altinn:resource",
- "value": "ttd_inntektsopplysninger"
+ "value": "ttd_inntektsopplysninger",
+ "version": "4"
}
],
"metadata": {
diff --git a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e2071c55-6adf-487b-af05-9198a230ed46.json b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e2071c55-6adf-487b-af05-9198a230ed46.json
index e78868ddf..55ac579c7 100644
--- a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e2071c55-6adf-487b-af05-9198a230ed46.json
+++ b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e2071c55-6adf-487b-af05-9198a230ed46.json
@@ -16,7 +16,8 @@
"resource": [
{
"type": "urn:altinn:resource",
- "value": "ttd_skattegrunnlag"
+ "value": "ttd_skattegrunnlag",
+ "version": "1"
}
],
"metadata": {
@@ -31,7 +32,8 @@
"resource": [
{
"type": "urn:altinn:resource",
- "value": "ttd_inntektsopplysninger"
+ "value": "ttd_inntektsopplysninger",
+ "version": "4"
}
],
"metadata": {
diff --git a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e2071c55-6adf-487b-af05-9198a230ed77.json b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e2071c55-6adf-487b-af05-9198a230ed77.json
index f527b608e..8f44aad56 100644
--- a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e2071c55-6adf-487b-af05-9198a230ed77.json
+++ b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e2071c55-6adf-487b-af05-9198a230ed77.json
@@ -1,4 +1,4 @@
-{
+{
"iD": "e2071c55-6adf-487b-af05-9198a230ed77",
"from": "urn:altinn:party:uuid:00000000-0000-0000-0005-000000006078",
"to": "urn:altinn:party:uuid:8ef5e5fa-94e1-4869-8635-df86b6219181",
@@ -16,7 +16,8 @@
"resource": [
{
"type": "urn:altinn:resource",
- "value": "ttd_skattegrunnlag"
+ "value": "ttd_skattegrunnlag",
+ "version": "1"
}
],
"metadata": {
@@ -31,7 +32,8 @@
"resource": [
{
"type": "urn:altinn:resource",
- "value": "ttd_inntektsopplysninger"
+ "value": "ttd_inntektsopplysninger",
+ "version": "4"
}
],
"metadata": {
diff --git a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e579b7a2-7994-4636-9aca-59e114915b70.json b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e579b7a2-7994-4636-9aca-59e114915b70.json
index d2e9a80b1..7330ff785 100644
--- a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e579b7a2-7994-4636-9aca-59e114915b70.json
+++ b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/Consent/consent_request_e579b7a2-7994-4636-9aca-59e114915b70.json
@@ -1,4 +1,4 @@
-{
+{
"iD": "e579b7a2-7994-4636-9aca-59e114915b70",
"from": "urn:altinn:party:uuid:d5b861c8-8e3b-44cd-9952-5315e5990cf5",
"to": "urn:altinn:party:uuid:8ef5e5fa-94e1-4869-8635-df86b6219181",
@@ -12,7 +12,8 @@
"resource": [
{
"type": "urn:altinn:resource",
- "value": "ttd_skattegrunnlag"
+ "value": "ttd_skattegrunnlag",
+ "version": "1"
}
],
"metadata": {
@@ -27,7 +28,8 @@
"resource": [
{
"type": "urn:altinn:resource",
- "value": "ttd_inntektsopplysninger"
+ "value": "ttd_inntektsopplysninger",
+ "version": "4"
}
],
"metadata": {
diff --git a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_inntektsopplysninger/resource.json b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_inntektsopplysninger/resource.json
index 4e4609c4f..688f6e567 100644
--- a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_inntektsopplysninger/resource.json
+++ b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_inntektsopplysninger/resource.json
@@ -1,4 +1,4 @@
-{
+{
"identifier": "ttd_inntektsopplysninger",
"title": {
"en": "Consent Income Resource ",
@@ -45,5 +45,6 @@
"value": "ttd_inntektsopplysninger"
}
],
- "consentTemplate": "sblanesoknad"
+ "consentTemplate": "sblanesoknad",
+ "versionId": 4
}
diff --git a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_navnescore/resource.json b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_navnescore/resource.json
index 4755cb431..4caa39a22 100644
--- a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_navnescore/resource.json
+++ b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_navnescore/resource.json
@@ -1,4 +1,4 @@
-{
+{
"identifier": "ttd_navnescore",
"title": {
"en": "Consent Income Resource ",
@@ -42,5 +42,6 @@
"value": "ttd_skattegrunnlag"
}
],
- "consentTemplate": "default"
+ "consentTemplate": "default",
+ "versionId": 3
}
diff --git a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_skattegrunnlag/resource.json b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_skattegrunnlag/resource.json
index 2721c53e5..691acbd7a 100644
--- a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_skattegrunnlag/resource.json
+++ b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_skattegrunnlag/resource.json
@@ -1,4 +1,4 @@
-{
+{
"identifier": "ttd_skattegrunnlag",
"title": {
"en": "Consent Income Resource ",
@@ -46,5 +46,6 @@
"value": "ttd_skattegrunnlag"
}
],
- "consentTemplate": "sblanesoknad"
+ "consentTemplate": "sblanesoknad",
+ "versionId": 1
}
diff --git a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_skattegrunnlag2/resource.json b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_skattegrunnlag2/resource.json
index bf66d83ae..9f74b4c4e 100644
--- a/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_skattegrunnlag2/resource.json
+++ b/src/apps/Altinn.AccessManagement/test/AccessMgmt.Tests/Data/ResourceRegistryResources/ttd_skattegrunnlag2/resource.json
@@ -1,4 +1,4 @@
-{
+{
"identifier": "ttd_skattegrunnlag2",
"title": {
"en": "Consent Income Resource ",
@@ -46,5 +46,6 @@
"value": "ttd_skattegrunnlag"
}
],
- "consentTemplate": "sblanesoknad2"
+ "consentTemplate": "sblanesoknad2",
+ "versionId": 2
}