Hellooo,
I'm trying to write a script that applies all the edit-permission of one page onto all of it's descendants.
I have 2 problems when running my script:
- The permissions get applied only to the lowest level of pages in the hierarchy
- When removing a permission from the original page after running the script I'm unable to save the change and after a while the page get's corrupted and I can no longer view it. I only receive the following error:
Cause
org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.atlassian.confluence.security.ContentPermission#31391756]
at org.hibernate.boot.internal.StandardEntityNotFoundDelegate.handleEntityNotFound(StandardEntityNotFoundDelegate.java:28)
Stack Trace:[hide]
org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.atlassian.confluence.security.ContentPermission#31391756]
at org.hibernate.boot.internal.StandardEntityNotFoundDelegate.handleEntityNotFound(StandardEntityNotFoundDelegate.java:28)
at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:227)
at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:262)
at org.hibernate.event.internal.DefaultLoadEventListener.doOnLoad(DefaultLoadEventListener.java:121)
...
Following is my code:
import com.atlassian.confluence.core.ContentPermissionManager
import com.atlassian.confluence.pages.Page
import com.atlassian.confluence.pages.PageManager
import com.atlassian.confluence.security.ContentPermission
import com.atlassian.sal.api.component.ComponentLocator
import com.onresolve.scriptrunner.runner.rest.common.CustomEndpointDelegate
import groovy.json.JsonOutput
import groovy.transform.BaseScript
import javax.ws.rs.core.MultivaluedMap
import javax.ws.rs.core.Response
@BaseScript CustomEndpointDelegate delegate
copyRestrictionsToDescendants() { MultivaluedMap queryParams, String body ->
def pageId = queryParams.getFirst("pageId") as long// use the pageId to retrieve this page
def pageManager = ComponentLocator.getComponent(PageManager)
def permissionManager = ComponentLocator.getComponent(ContentPermissionManager)
def currentPage = pageManager.getPage(pageId)
def editPermissions = currentPage.getContentPermissionSet(ContentPermission.EDIT_PERMISSION)
def addPermissions
addPermissions = { List<Page> pages ->
for (Page child : pages) {
for (ContentPermission permission in editPermissions) {
permissionManager.addContentPermission(permission, child)
}
addPermissions(child.children)
}
}
addPermissions(currentPage.children)
def flag = [
type : 'success',
title: "Requirement bar added",
close: 'auto',
body : "The requirement bar has been added."
]
Response.ok(JsonOutput.toJson(flag)).build()
}