This is an automated email from the ASF dual-hosted git repository.
mridulpathak pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git
The following commit(s) were added to refs/heads/trunk by this push:
new 72f5ae7dcd Fixed: updateContentPermission grants UPDATE via ancestor
ownership without an ownership change request (OFBIZ-13592)
72f5ae7dcd is described below
commit 72f5ae7dcd1a81099592a95ab53bc255c99cf04c
Author: Mridul Pathak <[email protected]>
AuthorDate: Tue Sep 15 12:55:55 2026 +0530
Fixed: updateContentPermission grants UPDATE via ancestor ownership without
an ownership change request (OFBIZ-13592)
The minilang-to-Groovy conversion of updateContentPermission moved the
ancestor parent-walk block that checks ownership of a content's owner chain out
of the conditional block that verifies an explicit ownership reassignment is
being requested, making it run unconditionally whenever checkOwnership failed
on the content's current owner. This let a user who owns any ancestor in the
ownership chain update content they don't own and aren't reassigning ownership
of, bypassing the intended [...]
---
.../permission/ContentPermissionServices.groovy | 28 +++++++++++-----------
1 file changed, 14 insertions(+), 14 deletions(-)
diff --git
a/applications/content/src/main/groovy/org/apache/ofbiz/content/permission/ContentPermissionServices.groovy
b/applications/content/src/main/groovy/org/apache/ofbiz/content/permission/ContentPermissionServices.groovy
index 6934bd65aa..1e217ec2d9 100644
---
a/applications/content/src/main/groovy/org/apache/ofbiz/content/permission/ContentPermissionServices.groovy
+++
b/applications/content/src/main/groovy/org/apache/ofbiz/content/permission/ContentPermissionServices.groovy
@@ -289,20 +289,20 @@ Map updateContentPermission(Boolean hasPermission, String
contentId, String owne
parameters.checkId = checkId
Map serviceResultCO = run service: 'checkOwnership', with:
parameters
hasPermission = serviceResultCO.hasPermission ?: false
- }
- if (!hasPermission) {
- // no permission on this parent; check the parent's parent(s)
- while (!hasPermission && checkId) {
- // iterate until either we have permission or there are no
more parents
- GenericValue currentContent =
from('Content').where(contentId: checkId).cache().queryOne()
- if (currentContent?.ownerContentId) {
- checkId = currentContent.ownerContentId
- parameters.checkId = checkId
- Map serviceResCO = run service: 'checkOwnership',
with: parameters
- hasPermission = serviceResCO.hasPermission ?: false
- } else {
- // no parent record found; time to stop recursion
- checkId = null
+ if (!hasPermission) {
+ // no permission on this parent; check the parent's
parent(s)
+ while (!hasPermission && checkId) {
+ // iterate until either we have permission or there
are no more parents
+ GenericValue currentContent =
from('Content').where(contentId: checkId).cache().queryOne()
+ if (currentContent?.ownerContentId) {
+ checkId = currentContent.ownerContentId
+ parameters.checkId = checkId
+ Map serviceResCO = run service: 'checkOwnership',
with: parameters
+ hasPermission = serviceResCO.hasPermission ?: false
+ } else {
+ // no parent record found; time to stop recursion
+ checkId = null
+ }
}
}
}