Check user and group rights for a specific page
Last modified by Simpel on 2026/06/02 17:54
| With this snippet you can check the effective user and group rights for a specific page. |
| Type | Snippet |
| Category | Other |
| Developed by | |
| Rating | |
| License | GNU Lesser General Public License 2.1 |
Table of contents
Description
With this snippet you can check user and group rights for a specific page. (Keep in mind: this snippet is created for a wiki where only global users exist. To include local sub wiki users you have to adjust that.)
{{velocity}}
## if you have a sub wiki you want to check set the name in here
#set($subwikiName = '')
{{html}}
<form class="xform" method="get" action="$doc.getURL('view')">
<dl>
<dt><label for="page">Page:</label></dt>
<dd><input type="text" name="page" id="page" value="$escapetool.xml("$!request.page")"/></dd>
<p><span class="buttonwrapper"><input class="button" type="submit" value="Check"/></span></p>
</dl>
</form>
{{/html}}
#if($request.page)
----
{{toc/}}
= Result =
#set($article = $xwiki.getDocument($request.page))
(% class="grid" id="tableid2" style="width: auto;" %)
|=Page|=Hidden|=Redirect
|[[$article>>$article]] ##
|#if($article.isHidden())$article.isHidden()#else $article.isHidden()#end ##
|#if($article.getObject('XWiki.RedirectClass'))true#else false#end
== Group rights on page ==
(% class="doOddEven filterable grid sortable" id="tableid3" style="width: fit-content;word-break: break-all;" %)
(% class="sortHeader" %)|=Group|=Subwiki|=Creator|=(% style="border-left:2px solid #888;" %)View|=Comment|=Edit|=Delete|=(% style="border-left:2px solid #888;" %)Admin|=Script|=Programming
##
## global groups
##
#set($allUser = $services.query.xwql('from doc.object("XWiki.XWikiGroups") as user order by doc.name').setWiki('xwiki').addFilter('unique').execute())
#foreach($user in $allUser)
#set($user = "xwiki:" + $user)
|[[xwiki:$user>>$user]] ##
|(% style="background-color:#ffadad;" %)false ##
|#if($article.hasAccessLevel('creator', $user))(% style="background-color:#61ff61;" %)$article.hasAccessLevel('creator', $user)#else(% style="background-color:#ffadad;" %)$article.hasAccessLevel('creator', $user)#end ##
|#if($article.hasAccessLevel('view', $user))(% style="background-color:#61ff61;border-left:2px solid #888;" %)$article.hasAccessLevel('view', $user)#else(% style="background-color:#ffadad;border-left:2px solid #888;" %)$article.hasAccessLevel('view', $user)#end ##
|#if($article.hasAccessLevel('comment', $user))(% style="background-color:#61ff61;" %)$article.hasAccessLevel('comment', $user)#else(% style="background-color:#ffadad;" %)$article.hasAccessLevel('comment', $user)#end ##
|#if($article.hasAccessLevel('edit', $user))(% style="background-color:#61ff61;" %)$article.hasAccessLevel('edit', $user)#else(% style="background-color:#ffadad;" %)$article.hasAccessLevel('edit', $user)#end ##
|#if($article.hasAccessLevel('delete', $user))(% style="background-color:#61ff61;" %)$article.hasAccessLevel('delete', $user)#else(% style="background-color:#ffadad;" %)$article.hasAccessLevel('delete', $user)#end ##
|#if($article.hasAccessLevel('admin', $user))(% style="background-color:#61ff61;border-left:2px solid #888;" %)$article.hasAccessLevel('admin', $user)#else(% style="background-color:#ffadad;border-left:2px solid #888;" %)$article.hasAccessLevel('admin', $user)#end ##
|#if($article.hasAccessLevel('script', $user))(% style="background-color:#61ff61;" %)$article.hasAccessLevel('script', $user)#else(% style="background-color:#ffadad;" %)$article.hasAccessLevel('script', $user)#end ##
|#if($article.hasAccessLevel('programming', $user))(% style="background-color:#61ff61;" %)$article.hasAccessLevel('programming', $user)#else(% style="background-color:#ffadad;" %)$article.hasAccessLevel('programming', $user)#end
#end
##
## local groups
##
#if($subwikiName != "")
#set($allUser = $services.query.xwql('from doc.object("XWiki.XWikiGroups") as user order by doc.name').setWiki("$subwikiName").addFilter('unique').execute())
#foreach($user in $allUser)
##set($user = "xwiki:" + $user)
|[[$subwikiName:$user>>$user]] ##
|(% style="background-color:#61ff61;" %)true ##
|#if($article.hasAccessLevel('creator', $user))(% style="background-color:#61ff61;" %)$article.hasAccessLevel('creator', $user)#else(% style="background-color:#ffadad;" %)$article.hasAccessLevel('creator', $user)#end ##
|#if($article.hasAccessLevel('view', $user))(% style="background-color:#61ff61;border-left:2px solid #888;" %)$article.hasAccessLevel('view', $user)#else(% style="background-color:#ffadad;border-left:2px solid #888;" %)$article.hasAccessLevel('view', $user)#end ##
|#if($article.hasAccessLevel('comment', $user))(% style="background-color:#61ff61;" %)$article.hasAccessLevel('comment', $user)#else(% style="background-color:#ffadad;" %)$article.hasAccessLevel('comment', $user)#end ##
|#if($article.hasAccessLevel('edit', $user))(% style="background-color:#61ff61;" %)$article.hasAccessLevel('edit', $user)#else(% style="background-color:#ffadad;" %)$article.hasAccessLevel('edit', $user)#end ##
|#if($article.hasAccessLevel('delete', $user))(% style="background-color:#61ff61;" %)$article.hasAccessLevel('delete', $user)#else(% style="background-color:#ffadad;" %)$article.hasAccessLevel('delete', $user)#end ##
|#if($article.hasAccessLevel('admin', $user))(% style="background-color:#61ff61;border-left:2px solid #888;" %)$article.hasAccessLevel('admin', $user)#else(% style="background-color:#ffadad;border-left:2px solid #888;" %)$article.hasAccessLevel('admin', $user)#end ##
|#if($article.hasAccessLevel('script', $user))(% style="background-color:#61ff61;" %)$article.hasAccessLevel('script', $user)#else(% style="background-color:#ffadad;" %)$article.hasAccessLevel('script', $user)#end ##
|#if($article.hasAccessLevel('programming', $user))(% style="background-color:#61ff61;" %)$article.hasAccessLevel('programming', $user)#else(% style="background-color:#ffadad;" %)$article.hasAccessLevel('programming', $user)#end
#end
#end
##
## all user
##
== user rights on page ==
(% class="doOddEven filterable grid sortable" id="tableid" style="width: fit-content;word-break: break-all;" %)
(% class="sortHeader" %)|=User|=Creator|=(% style="border-left:2px solid #888;" %)View|=Comment|=Edit|=Delete|=(% style="border-left:2px solid #888;" %)Admin|=Script|=Programming
#set($allUser = $services.query.xwql('from doc.object("XWiki.XWikiUsers") as user order by doc.name').setWiki('xwiki').addFilter('unique').execute())
#foreach($user in $allUser)
#set($user = "xwiki:" + $user)
|[[$user]] ##
|#if($article.hasAccessLevel('creator', $user))(% style="background-color:#61ff61;" %)$article.hasAccessLevel('creator', $user)#else(% style="background-color:#ffadad;" %)$article.hasAccessLevel('creator', $user)#end ##
|#if($article.hasAccessLevel('view', $user))(% style="background-color:#61ff61;border-left:2px solid #888;" %)$article.hasAccessLevel('view', $user)#else(% style="background-color:#ffadad;border-left:2px solid #888;" %)$article.hasAccessLevel('view', $user)#end ##
|#if($article.hasAccessLevel('comment', $user))(% style="background-color:#61ff61;" %)$article.hasAccessLevel('comment', $user)#else(% style="background-color:#ffadad;" %)$article.hasAccessLevel('comment', $user)#end ##
|#if($article.hasAccessLevel('edit', $user))(% style="background-color:#61ff61;" %)$article.hasAccessLevel('edit', $user)#else(% style="background-color:#ffadad;" %)$article.hasAccessLevel('edit', $user)#end ##
|#if($article.hasAccessLevel('delete', $user))(% style="background-color:#61ff61;" %)$article.hasAccessLevel('delete', $user)#else(% style="background-color:#ffadad;" %)$article.hasAccessLevel('delete', $user)#end ##
|#if($article.hasAccessLevel('admin', $user))(% style="background-color:#61ff61;border-left:2px solid #888;" %)$article.hasAccessLevel('admin', $user)#else(% style="background-color:#ffadad;border-left:2px solid #888;" %)$article.hasAccessLevel('admin', $user)#end ##
|#if($article.hasAccessLevel('script', $user))(% style="background-color:#61ff61;" %)$article.hasAccessLevel('script', $user)#else(% style="background-color:#ffadad;" %)$article.hasAccessLevel('script', $user)#end ##
|#if($article.hasAccessLevel('programming', $user))(% style="background-color:#61ff61;" %)$article.hasAccessLevel('programming', $user)#else(% style="background-color:#ffadad;" %)$article.hasAccessLevel('programming', $user)#end
#end
#end
{{/velocity}}The user table can be very long. To have the header of this table always in view I created an SXX object with this code:
/* make header always visible */
#xwikicontent {
overflow: inherit !important;
}
table: {
border-collapse: separate;
}
th {
position: sticky;
position: -webkit-sticky;
top: 0;
box-shadow: inset 0 -1px 0 #888;
}
{{/css}}