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:
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)
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()
}
Hey Terje,
In ScriptRunner for Confluence we have a built-in script that allows you to do just this! If you navigate to "Space Tools > Advanced Space Functionality > Inherit Restrictions for Pages" and you can select which pages and spaces you would like to have child pages inherit root parent permissions.
The documentation for this feature is available from here.
I hope this helps!
Steve
Hello Stephen,
The solution works for pages created after running the script. We're interested in inheriting edit rights for old pages as well. Will this be possible in future releases?
Thanks
Hosam
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I have exactly the same question. As it is, this feature is not worth much. Users expect some consistency, so permissions inheritance would have to work in all cases:
We'd definitely buy ScriptRunner if this would be implemented.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.