From 7e27c7a89a3d0f76e119ae40e44f80d365848429 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Fri, 26 Apr 2024 10:54:34 -0500 Subject: [PATCH] CE-882 add filterForWriteLockTree --- .../security/RecordSecurityLockFilters.java | 27 ++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/security/RecordSecurityLockFilters.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/security/RecordSecurityLockFilters.java index e5749087..4d5ad71b 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/security/RecordSecurityLockFilters.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/metadata/security/RecordSecurityLockFilters.java @@ -23,6 +23,7 @@ package com.kingsrook.qqq.backend.core.model.metadata.security; import java.util.List; +import java.util.Set; /******************************************************************************* @@ -50,12 +51,36 @@ public class RecordSecurityLockFilters ** filter a list of locks so that we only see the ones that apply to reads. *******************************************************************************/ public static MultiRecordSecurityLock filterForReadLockTree(List recordSecurityLocks) + { + return filterForLockTree(recordSecurityLocks, Set.of(RecordSecurityLock.LockScope.READ_AND_WRITE)); + } + + + + /******************************************************************************* + ** filter a list of locks so that we only see the ones that apply to writes. + *******************************************************************************/ + public static MultiRecordSecurityLock filterForWriteLockTree(List recordSecurityLocks) + { + return filterForLockTree(recordSecurityLocks, Set.of(RecordSecurityLock.LockScope.READ_AND_WRITE, RecordSecurityLock.LockScope.WRITE)); + } + + + + /******************************************************************************* + ** filter a list of locks so that we only see the ones that apply to any of the + ** input set of scopes. + *******************************************************************************/ + private static MultiRecordSecurityLock filterForLockTree(List recordSecurityLocks, Set allowedScopes) { if(recordSecurityLocks == null) { return (null); } + ////////////////////////////////////////////////////////////// + // at the top-level we build a multi-lock with AND operator // + ////////////////////////////////////////////////////////////// MultiRecordSecurityLock result = new MultiRecordSecurityLock(); result.setOperator(MultiRecordSecurityLock.BooleanOperator.AND); @@ -69,7 +94,7 @@ public class RecordSecurityLockFilters } else { - if(RecordSecurityLock.LockScope.READ_AND_WRITE.equals(recordSecurityLock.getLockScope())) + if(allowedScopes.contains(recordSecurityLock.getLockScope())) { result.withLock(recordSecurityLock); }