Check user and group rights for a specific page

Last modified by Simpel on 2026/06/02 17:54

cogWith this snippet you can check the effective user and group rights for a specific page.
TypeSnippet
CategoryOther
Developed by

Simpel

Rating
0 Votes
LicenseGNU 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}}

Get Connected