From 96556f4eebc68d801268baae428301cf1cb470d1 Mon Sep 17 00:00:00 2001
From: Alexander van Delft <56023674+lxatstariongroup@users.noreply.github.com>
Date: Fri, 12 Jul 2024 14:01:43 +0200
Subject: [PATCH] [FIX] PermissionService Owned Things directly contained in
EngineeringModel and their full containment tree
* [FIX] PermissionService Owned Things directly contained in EngineeringModel and their full containment tree
* Bump version number
* Version upgrade texts
---
CDP4Common/CDP4Common.csproj | 4 +-
.../PermissionServiceTestFixture.cs | 36 ++++++++++++++-
.../PermissionServiceTestFixture.cs | 46 ++++++++++++++++---
CDP4Dal/CDP4Dal.csproj | 5 +-
CDP4Dal/Permission/PermissionService.cs | 27 +++++++++--
CDP4DalCommon/CDP4DalCommon.csproj | 4 +-
CDP4JsonFileDal/CDP4JsonFileDal.csproj | 4 +-
CDP4JsonSerializer/CDP4JsonSerializer.csproj | 4 +-
.../CDP4MessagePackSerializer.csproj | 4 +-
CDP4Reporting/CDP4Reporting.csproj | 4 +-
.../CDP4RequirementsVerification.csproj | 4 +-
CDP4Rules/CDP4Rules.csproj | 4 +-
CDP4ServicesDal/CDP4ServicesDal.csproj | 4 +-
.../CDP4ServicesMessaging.csproj | 4 +-
CDP4Web/CDP4Web.csproj | 4 +-
CDP4WspDal/CDP4WspDal.csproj | 4 +-
16 files changed, 123 insertions(+), 39 deletions(-)
diff --git a/CDP4Common/CDP4Common.csproj b/CDP4Common/CDP4Common.csproj
index 3230a363..6a9d5be4 100644
--- a/CDP4Common/CDP4Common.csproj
+++ b/CDP4Common/CDP4Common.csproj
@@ -4,7 +4,7 @@
net48;netstandard2.0
Starion Group S.A.
CDP4Common Community Edition
- 27.1.0
+ 27.2.0
CDP4 Common Class Library that contains DTOs, POCOs
Copyright © Starion Group S.A.
Sam, Merlin, Alex, Naron, Alexander, Yevhen, Nathanael, Ahmed
@@ -20,7 +20,7 @@
CDP COMET ECSS-E-TM-10-25
LGPL-3.0-only
- [ADD] Implement ExceptionHandlerService
+ [FIX] PermissionService
README.md
diff --git a/CDP4Dal.NetCore.Tests/Permission/PermissionServiceTestFixture.cs b/CDP4Dal.NetCore.Tests/Permission/PermissionServiceTestFixture.cs
index edb4c2ec..99a7c120 100644
--- a/CDP4Dal.NetCore.Tests/Permission/PermissionServiceTestFixture.cs
+++ b/CDP4Dal.NetCore.Tests/Permission/PermissionServiceTestFixture.cs
@@ -70,6 +70,7 @@ public class PermissionServiceTestFixture
private PermissionService permissionService;
private CommonFileStore commonFileStore;
+ private File file;
[SetUp]
public void Setup()
@@ -103,6 +104,7 @@ public void Setup()
this.requirementsSpecification = new RequirementsSpecification(Guid.NewGuid(), this.assembler.Cache, this.uri);
this.requirement = new Requirement(Guid.NewGuid(), this.assembler.Cache, this.uri);
this.commonFileStore = new CommonFileStore(Guid.NewGuid(), this.assembler.Cache, this.uri);
+ this.file = new File(Guid.NewGuid(), this.assembler.Cache, this.uri);
this.sitedir.Model.Add(this.modelsetup);
this.sitedir.Person.Add(this.person);
@@ -134,6 +136,8 @@ public void Setup()
this.requirementsSpecification.Requirement.Add(this.requirement);
this.iteration.RequirementsSpecification.Add(this.requirementsSpecification);
this.model.CommonFileStore.Add(this.commonFileStore);
+ this.file.Owner = this.domain1;
+ this.commonFileStore.File.Add(this.file);
this.session.Setup(x => x.ActivePerson).Returns(this.person);
this.session.Setup(x => x.Assembler).Returns(this.assembler);
@@ -172,6 +176,7 @@ public void TestCanWriteFalseWithDefaultPermission()
Assert.That(this.permissionService.CanRead(this.model), Is.False);
Assert.That(this.permissionService.CanRead(this.iteration), Is.False);
+ Assert.That(this.permissionService.CanRead(this.file), Is.False);
}
[Test]
@@ -399,10 +404,39 @@ public void VerifyModifyIfOwnerForThingsThatAreDirectlyUnderEngineeringModel()
//Thing has other owner as User's participant
this.commonFileStore.Owner = this.domain2;
- Assert.That(this.permissionService.CanWrite(this.commonFileStore), Is.True);
+ Assert.That(this.permissionService.CanWrite(this.commonFileStore), Is.False);
Assert.That(this.permissionService.CanRead(this.commonFileStore), Is.True);
}
+ [Test]
+ public void VerifyModifyIfOwnerForThingsThatContainedInThingsThatAreDirectlyUnderEngineeringModel()
+ {
+ this.session.Setup(x => x.ActivePersonParticipants).Returns(new List { this.participant });
+ Assert.That(this.permissionService.CanWrite(this.model), Is.False);
+ Assert.That(this.permissionService.CanRead(this.model), Is.False);
+
+ var permission =
+ this.participantRole.ParticipantPermission.Single(x => x.ObjectClass == ClassKind.File);
+
+ permission.AccessRight = ParticipantAccessRightKind.MODIFY_IF_OWNER;
+
+ this.file.Owner = null;
+
+ //Thing has no owner
+ Assert.Throws(() => this.permissionService.CanWrite(this.file));
+ Assert.Throws(() => this.permissionService.CanRead(this.file));
+
+ //Thing has same owner as User's participant
+ this.file.Owner = this.domain1;
+ Assert.That(this.permissionService.CanWrite(this.file), Is.True);
+ Assert.That(this.permissionService.CanRead(this.file), Is.True);
+
+ //Thing has other owner as User's participant
+ this.file.Owner = this.domain2;
+ Assert.That(this.permissionService.CanWrite(this.file), Is.False);
+ Assert.That(this.permissionService.CanRead(this.file), Is.True);
+ }
+
[Test]
public void VerifySameAsSuperclassParticipantPermission()
{
diff --git a/CDP4Dal.Tests/Permission/PermissionServiceTestFixture.cs b/CDP4Dal.Tests/Permission/PermissionServiceTestFixture.cs
index 3c40f66c..99a7c120 100644
--- a/CDP4Dal.Tests/Permission/PermissionServiceTestFixture.cs
+++ b/CDP4Dal.Tests/Permission/PermissionServiceTestFixture.cs
@@ -2,20 +2,20 @@
//
// Copyright (c) 2015-2024 Starion Group S.A.
//
-// Author: Sam Gerené, Alex Vorobiev, Alexander van Delft, Nathanael Smiechowski, Antoine Théate, Omar Elebiary, Jaime Bernar
-//
+// Author: Sam Gerené, Merlin Bieze, Alex Vorobiev, Naron Phou, Alexander van Delft, Yevhen Ikonnykov
+//
// This file is part of CDP4-COMET SDK Community Edition
-//
+//
// The CDP4-COMET SDK Community Edition is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 3 of the License, or (at your option) any later version.
-//
+//
// The CDP4-COMET SDK Community Edition is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
-//
+//
// You should have received a copy of the GNU Lesser General Public License
// along with this program; if not, write to the Free Software Foundation,
// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
@@ -70,6 +70,7 @@ public class PermissionServiceTestFixture
private PermissionService permissionService;
private CommonFileStore commonFileStore;
+ private File file;
[SetUp]
public void Setup()
@@ -103,6 +104,7 @@ public void Setup()
this.requirementsSpecification = new RequirementsSpecification(Guid.NewGuid(), this.assembler.Cache, this.uri);
this.requirement = new Requirement(Guid.NewGuid(), this.assembler.Cache, this.uri);
this.commonFileStore = new CommonFileStore(Guid.NewGuid(), this.assembler.Cache, this.uri);
+ this.file = new File(Guid.NewGuid(), this.assembler.Cache, this.uri);
this.sitedir.Model.Add(this.modelsetup);
this.sitedir.Person.Add(this.person);
@@ -134,6 +136,8 @@ public void Setup()
this.requirementsSpecification.Requirement.Add(this.requirement);
this.iteration.RequirementsSpecification.Add(this.requirementsSpecification);
this.model.CommonFileStore.Add(this.commonFileStore);
+ this.file.Owner = this.domain1;
+ this.commonFileStore.File.Add(this.file);
this.session.Setup(x => x.ActivePerson).Returns(this.person);
this.session.Setup(x => x.Assembler).Returns(this.assembler);
@@ -172,6 +176,7 @@ public void TestCanWriteFalseWithDefaultPermission()
Assert.That(this.permissionService.CanRead(this.model), Is.False);
Assert.That(this.permissionService.CanRead(this.iteration), Is.False);
+ Assert.That(this.permissionService.CanRead(this.file), Is.False);
}
[Test]
@@ -399,10 +404,39 @@ public void VerifyModifyIfOwnerForThingsThatAreDirectlyUnderEngineeringModel()
//Thing has other owner as User's participant
this.commonFileStore.Owner = this.domain2;
- Assert.That(this.permissionService.CanWrite(this.commonFileStore), Is.True);
+ Assert.That(this.permissionService.CanWrite(this.commonFileStore), Is.False);
Assert.That(this.permissionService.CanRead(this.commonFileStore), Is.True);
}
+ [Test]
+ public void VerifyModifyIfOwnerForThingsThatContainedInThingsThatAreDirectlyUnderEngineeringModel()
+ {
+ this.session.Setup(x => x.ActivePersonParticipants).Returns(new List { this.participant });
+ Assert.That(this.permissionService.CanWrite(this.model), Is.False);
+ Assert.That(this.permissionService.CanRead(this.model), Is.False);
+
+ var permission =
+ this.participantRole.ParticipantPermission.Single(x => x.ObjectClass == ClassKind.File);
+
+ permission.AccessRight = ParticipantAccessRightKind.MODIFY_IF_OWNER;
+
+ this.file.Owner = null;
+
+ //Thing has no owner
+ Assert.Throws(() => this.permissionService.CanWrite(this.file));
+ Assert.Throws(() => this.permissionService.CanRead(this.file));
+
+ //Thing has same owner as User's participant
+ this.file.Owner = this.domain1;
+ Assert.That(this.permissionService.CanWrite(this.file), Is.True);
+ Assert.That(this.permissionService.CanRead(this.file), Is.True);
+
+ //Thing has other owner as User's participant
+ this.file.Owner = this.domain2;
+ Assert.That(this.permissionService.CanWrite(this.file), Is.False);
+ Assert.That(this.permissionService.CanRead(this.file), Is.True);
+ }
+
[Test]
public void VerifySameAsSuperclassParticipantPermission()
{
diff --git a/CDP4Dal/CDP4Dal.csproj b/CDP4Dal/CDP4Dal.csproj
index aa896207..850e04d1 100644
--- a/CDP4Dal/CDP4Dal.csproj
+++ b/CDP4Dal/CDP4Dal.csproj
@@ -4,7 +4,7 @@
net48;netstandard2.0
Starion Group S.A.
CDP4Dal Community Edition
- 27.1.0
+ 27.2.0
CDP4 Data Access Layer library, a consumer of an ECSS-E-TM-10-25 Annex C API
Copyright © Starion Group S.A.
Sam, Merlin, Alex, Naron, Alexander, Yevhen, Nathanael, Ahmed
@@ -20,8 +20,7 @@
CDP COMET ECSS-E-TM-10-25
LGPL-3.0-only
- [BUMP] To CDP4Common 27.1.0
- [ADD] Use ExceptionHandlerService in Session
+ [FIX] PermissionService
README.md
diff --git a/CDP4Dal/Permission/PermissionService.cs b/CDP4Dal/Permission/PermissionService.cs
index be917ca1..1098c523 100644
--- a/CDP4Dal/Permission/PermissionService.cs
+++ b/CDP4Dal/Permission/PermissionService.cs
@@ -650,7 +650,7 @@ private bool CanWriteIfParticipantOwned(IOwnedThing ownedThing)
if (thing.Container is EngineeringModel currentModel)
{
- return this.Session.OpenIterations.Where(x => x.Key.Container == currentModel).Select(x => x.Value).Any();
+ return this.Session.OpenIterations.Where(x => x.Key.Container == currentModel && x.Value.Item2.Domain.Contains(ownedThing.Owner)).Select(x => x.Value).Any();
}
//Check if the ownedThing domain is contained in the participant domains
@@ -669,13 +669,30 @@ private bool TryGetThingParticipant(Thing thing, out Participant participant)
var iteration = thing is Iteration it ? it : thing.GetContainerOfType();
participant = null;
- if (iteration != null
- && this.Session.OpenIterations.TryGetValue(iteration, out var participation)
+ if (iteration != null)
+ {
+ if (this.Session.OpenIterations.TryGetValue(iteration, out var participation)
&& participation.Item1 != null
&& participation.Item2 != null)
+ {
+ participant = participation.Item2;
+ return true;
+ }
+ }
+ else
{
- participant = participation.Item2;
- return true;
+ // Check TopContainer, for contained Things on a non Iteration Thing directly under EngineeringModel,
+ // like EngineeringModel=>CommonFileStore=>File
+ if (thing.TopContainer is EngineeringModel currentModel)
+ {
+ var iterations = this.Session.OpenIterations.FirstOrDefault(x => x.Key.Container == currentModel);
+
+ if (iterations.Key != null)
+ {
+ participant = iterations.Value.Item2;
+ return true;
+ }
+ }
}
return false;
diff --git a/CDP4DalCommon/CDP4DalCommon.csproj b/CDP4DalCommon/CDP4DalCommon.csproj
index cf93b6e6..153ded70 100644
--- a/CDP4DalCommon/CDP4DalCommon.csproj
+++ b/CDP4DalCommon/CDP4DalCommon.csproj
@@ -5,7 +5,7 @@
Starion Group S.A.
latest
CDP4DalCommon Community Edition
- 27.1.0
+ 27.2.0
CDP4 Common Class Library that contains common types for any CDP4 server and the CDP4Dal
Copyright © Starion Group S.A.
Sam, Alex, Alexander, Nathanael, Antoine, Omar, Jaime
@@ -21,7 +21,7 @@
CDP COMET ECSS-E-TM-10-25
LGPL-3.0-only
- [BUMP] To CDP4Common 27.1.0
+ [BUMP] To CDP4Common 27.2.0
README.md
true
diff --git a/CDP4JsonFileDal/CDP4JsonFileDal.csproj b/CDP4JsonFileDal/CDP4JsonFileDal.csproj
index 3d6ae584..aa030978 100644
--- a/CDP4JsonFileDal/CDP4JsonFileDal.csproj
+++ b/CDP4JsonFileDal/CDP4JsonFileDal.csproj
@@ -4,7 +4,7 @@
net48;netstandard2.0
Starion Group S.A.
CDP4JsonFileDal Community Edition
- 27.1.0
+ 27.2.0
CDP4 Json File Dal Plugin
Copyright © Starion Group S.A.
Sam, Merlin, Alex, Naron, Alexander, Yevhen, Nathanael
@@ -20,7 +20,7 @@
CDP COMET ECSS-E-TM-10-25
LGPL-3.0-only
- [BUMP] To CDP4Common 27.1.0
+ [BUMP] To CDP4Common 27.2.0
README.md
diff --git a/CDP4JsonSerializer/CDP4JsonSerializer.csproj b/CDP4JsonSerializer/CDP4JsonSerializer.csproj
index e65ade8c..9d84e1a9 100644
--- a/CDP4JsonSerializer/CDP4JsonSerializer.csproj
+++ b/CDP4JsonSerializer/CDP4JsonSerializer.csproj
@@ -4,7 +4,7 @@
net48;netstandard2.0
Starion Group S.A.
CDP4JsonSerializer Community Edition
- 27.1.0
+ 27.2.0
CDP4 JSON Serialization Library
Copyright © Starion Group S.A.
Sam, Merlin, Alex, Naron, Alexander, Yevhen, Nathanael
@@ -20,7 +20,7 @@
CDP COMET ECSS-E-TM-10-25 JSON
LGPL-3.0-only
- [BUMP] To CDP4Common 27.1.0
+ [BUMP] To CDP4Common 27.2.0
README.md
diff --git a/CDP4MessagePackSerializer/CDP4MessagePackSerializer.csproj b/CDP4MessagePackSerializer/CDP4MessagePackSerializer.csproj
index 89e78825..53675bc1 100644
--- a/CDP4MessagePackSerializer/CDP4MessagePackSerializer.csproj
+++ b/CDP4MessagePackSerializer/CDP4MessagePackSerializer.csproj
@@ -4,7 +4,7 @@
net48;netstandard2.0
Starion Group S.A.
CDP4MessagePackSerializer Community Edition
- 27.1.0
+ 27.2.0
CDP4 MessagePack Serialization Library
Copyright © Starion Group S.A.
Sam, Alex, Alexander, Nathanael, Antoine, Omar
@@ -20,7 +20,7 @@
CDP COMET ECSS-E-TM-10-25 MessagePack
LGPL-3.0-only
- [BUMP] To CDP4Common 27.1.0
+ [BUMP] To CDP4Common 27.2.0
README.md
diff --git a/CDP4Reporting/CDP4Reporting.csproj b/CDP4Reporting/CDP4Reporting.csproj
index 4ff092f1..a3a5ad92 100644
--- a/CDP4Reporting/CDP4Reporting.csproj
+++ b/CDP4Reporting/CDP4Reporting.csproj
@@ -4,7 +4,7 @@
netstandard2.0
Starion Group S.A.
CDP4Reporting Community Edition
- 27.1.0
+ 27.2.0
CDP4 Reporting
Copyright © Starion Group S.A.
Sam, Alex, Alexander
@@ -20,7 +20,7 @@
CDP COMET ECSS-E-TM-10-25
LGPL-3.0-only
- [BUMP] To CDP4Common 27.1.0
+ [BUMP] To CDP4Common 27.2.0
latest
README.md
diff --git a/CDP4RequirementsVerification/CDP4RequirementsVerification.csproj b/CDP4RequirementsVerification/CDP4RequirementsVerification.csproj
index 17de439c..77db8ffc 100644
--- a/CDP4RequirementsVerification/CDP4RequirementsVerification.csproj
+++ b/CDP4RequirementsVerification/CDP4RequirementsVerification.csproj
@@ -4,7 +4,7 @@
net48;netstandard2.0
Starion Group S.A.
CDP4RequirementsVerification Community Edition
- 27.1.0
+ 27.2.0
CDP4 Class Library that provides requirement verification
Copyright © Starion Group S.A.
Sam, Alex, Alexander, Yevhen, Nathanael
@@ -20,7 +20,7 @@
CDP COMET ECSS-E-TM-10-25
LGPL-3.0-only
- [BUMP] To CDP4Common 27.1.0
+ [BUMP] To CDP4Common 27.2.0
README.md
diff --git a/CDP4Rules/CDP4Rules.csproj b/CDP4Rules/CDP4Rules.csproj
index 548b4ee7..4c2b1bd0 100644
--- a/CDP4Rules/CDP4Rules.csproj
+++ b/CDP4Rules/CDP4Rules.csproj
@@ -4,7 +4,7 @@
net48;netstandard2.0
Starion Group S.A.
CDP4Rules Community Edition
- 27.1.0
+ 27.2.0
CDP4 Class Library that provides Model Analysis and Rule Checking
Copyright © Starion Group S.A.
Sam, Alex, Alexander, Yevhen, Nathanael
@@ -20,7 +20,7 @@
CDP COMET ECSS-E-TM-10-25
LGPL-3.0-only
- [BUMP] To CDP4Common 27.1.0
+ [BUMP] To CDP4Common 27.2.0
README.md
diff --git a/CDP4ServicesDal/CDP4ServicesDal.csproj b/CDP4ServicesDal/CDP4ServicesDal.csproj
index 901f5ffd..8e3ff15e 100644
--- a/CDP4ServicesDal/CDP4ServicesDal.csproj
+++ b/CDP4ServicesDal/CDP4ServicesDal.csproj
@@ -4,7 +4,7 @@
net48;netstandard2.0
Starion Group S.A.
CDP4ServicesDal Community Edition
- 27.1.0
+ 27.2.0
CDP4ServicesDal Dal Plugin
Copyright © Starion Group S.A.
Sam, Merlin, Alex, Naron, Alexander, Yevhen, Nathanael
@@ -20,7 +20,7 @@
CDP COMET ECSS-E-TM-10-25
LGPL-3.0-only
- [BUMP] To CDP4Common 27.1.0
+ [BUMP] To CDP4Common 27.2.0
README.md
diff --git a/CDP4ServicesMessaging/CDP4ServicesMessaging.csproj b/CDP4ServicesMessaging/CDP4ServicesMessaging.csproj
index 6ee664ca..5046abe9 100644
--- a/CDP4ServicesMessaging/CDP4ServicesMessaging.csproj
+++ b/CDP4ServicesMessaging/CDP4ServicesMessaging.csproj
@@ -4,7 +4,7 @@
netstandard2.0
Starion Group S.A.
CDP4Common Community Edition
- 27.1.0
+ 27.2.0
CDP4 Services Messaging is a Class Library that contains clients and messages class that can be used for inter services communication
Copyright © Starion Group S.A.
Sam, Alex, Alexander, Nathanael, Antoine
@@ -20,7 +20,7 @@
CDP COMET ECSS-E-TM-10-25
LGPL-3.0-only
- [BUMP] To CDP4Common 27.1.0
+ [BUMP] To CDP4Common 27.2.0
README.md
latest
diff --git a/CDP4Web/CDP4Web.csproj b/CDP4Web/CDP4Web.csproj
index cb66ec5b..9a70060a 100644
--- a/CDP4Web/CDP4Web.csproj
+++ b/CDP4Web/CDP4Web.csproj
@@ -5,7 +5,7 @@
latest
Starion Group S.A.
CDP4Web Community Edition
- 27.1.0
+ 27.2.0
CDP4Web Dedicated Sdk for CDPServicesDal
Copyright © Starion Group S.A.
Sam, Alex, Alexander, Nathanael, Antoine, Omar, Jaime
@@ -21,7 +21,7 @@
CDP COMET ECSS-E-TM-10-25
LGPL-3.0-only
- [BUMP] To CDP4Common 27.1.0
+ [BUMP] To CDP4Common 27.2.0
README.md
diff --git a/CDP4WspDal/CDP4WspDal.csproj b/CDP4WspDal/CDP4WspDal.csproj
index 1f24232d..bea2a923 100644
--- a/CDP4WspDal/CDP4WspDal.csproj
+++ b/CDP4WspDal/CDP4WspDal.csproj
@@ -4,7 +4,7 @@
net48;netstandard2.0
Starion Group S.A.
CDP4WspDal Community Edition
- 27.1.0
+ 27.2.0
CDP4 WSP Dal Plugin
Copyright © Starion Group S.A.
Sam, Merlin, Alex, Naron, Alexander, Yevhen, Nathanael
@@ -20,7 +20,7 @@
CDP COMET ECSS-E-TM-10-25
LGPL-3.0-only
- [BUMP] To CDP4Common 27.1.0
+ [BUMP] To CDP4Common 27.2.0
README.md