<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//UR1//DTD docbookAllegeEsup//FR"
"http://www.esup-portail.org/consortium/espace/docbook/xxe/dtd/docbook_allege_esup.dtd">
<article lang="FR">
  <title>ESUP WebDAV server V4 (and 3.5)</title>

  <subtitle>User guide</subtitle>

  <section>
    <title>Introduction</title>

    <para>The purpose of this document is to explain how to use the ESUP
    WebDAV server V4 (and 3.5). In particular it focuses on the administration
    tool : <literal>ESUPWDServerManager</literal>. The user guide is exactly
    the same for the V4 and V3.5 versions of the server.</para>
  </section>

  <section>
    <title>Important notes</title>

    <para>Note that some actions done by the administration tool are resource
    consuming. These actions are identified by the <acronym>[RC]</acronym> tag
    in this document.</para>

    <para>Do not forget that the <varname>DAV:quota-available-bytes</varname>
    metadata represents the space left on a folder and not the quota. The
    quota is the sum of the <varname>DAV:quota-used-bytes</varname> and
    <varname>DAV:quota-available-bytes</varname> metadata.</para>

    <para>You are adviced of reading the <ulink
    url="media/ESUPWebDAV-eunis2006-extended-abstract.pdf">paper submitted to
    EUNIS 2006</ulink> to understand how quota are implemented on the ESUP
    WebDAV server.</para>

    <important>
      <para>About the ESUP storage channel : the v4.2 storage channel requires
      to use the ESUP WebDAV server V3.5 or higher and to have specific
      permissions and metadata set on homedirs. Please read carefully the
      section dealing with this topic both in this documentation and in the
      ESUP storage channel user guide.</para>
    </important>
  </section>

  <section>
    <title>Main new features and improvements</title>

    <para><literal>ESUPWDServerManager</literal> is new and replaces the
    former administration tools.</para>
  </section>

  <section>
    <title>Components</title>

    <itemizedlist>
      <listitem>
        <para>the <literal>ESUPWDServerManager</literal> tool :-)</para>
      </listitem>
    </itemizedlist>
  </section>

  <section>
    <title>Pre-requisite</title>

    <itemizedlist>
      <listitem>
        <para>an ESUP WebDAV server V4 deployed and running</para>
      </listitem>
    </itemizedlist>
  </section>

  <section>
    <title>Naming conventions</title>

    <para>Please see the <ulink
    url="ESUPWDServerV4_installation.html">installation</ulink> page.</para>
  </section>

  <section>
    <title>User guide</title>

    <section>
      <title>Deploying and configuring the tool</title>

      <para><literal>ESUPWDServerManager</literal> is automatically deployed
      and configured with the ESUP WebDAV server.</para>

      <formalpara>
        <title>folders</title>

        <para><itemizedlist>
            <listitem>
              <para><varname>source</varname> : Java source files</para>
            </listitem>

            <listitem>
              <para><varname>properties</varname> : properties files, sample
              input file and space manager sample pattern file</para>
            </listitem>

            <listitem>
              <para><varname>lib</varname> : libraries</para>
            </listitem>

            <listitem>
              <para><varname>dist</varname> : package directory</para>
            </listitem>

            <listitem>
              <para><varname>build</varname> : execution directory</para>
            </listitem>
          </itemizedlist></para>
      </formalpara>
    </section>

    <section>
      <title>Changing the configuration</title>

      <section>
        <title>Recommended method</title>

        <para>Modify the
        <filename>[package.home]/esup-serveur-WebDav-4.0beta/build.properties</filename>
        files and execute the init ANT target. Note that this action can
        <emphasis>also modify the server configuration</emphasis>. These
        parameters are marked with the <acronym>[S]</acronym> flag in the
        following list.</para>

        <formalpara>
          <title>build.properties file parameters involving
          ESUPWDServerManager</title>

          <para><itemizedlist>
              <listitem>
                <para>webdavServer.url</para>
              </listitem>

              <listitem>
                <para>slide.ldap.Url : <acronym>[S]</acronym></para>
              </listitem>

              <listitem>
                <para>slide.ldap.Port : <acronym>[S]</acronym></para>
              </listitem>

              <listitem>
                <para>slide.ldap.Scope : <acronym>[S]</acronym></para>
              </listitem>

              <listitem>
                <para>slide.ldap.Principal : <acronym>[S]</acronym></para>
              </listitem>

              <listitem>
                <para>slide.ldap.Credential : <acronym>[S]</acronym></para>
              </listitem>

              <listitem>
                <para>slide.ldap.MaxResults : <acronym>[S]</acronym></para>
              </listitem>

              <listitem>
                <para>slide.ldap.BaseDn : <acronym>[S]</acronym></para>
              </listitem>

              <listitem>
                <para>slide.quotaListener.WebServiceUrl</para>
              </listitem>

              <listitem>
                <para>slide.rootUser : <acronym>[S]</acronym></para>
              </listitem>

              <listitem>
                <para>slide.trustedFilter.password :
                <acronym>[S]</acronym></para>
              </listitem>
            </itemizedlist></para>
        </formalpara>
      </section>

      <section>
        <title>Alternate method</title>

        <para>Modify the
        <filename>[deploy.home]/properties/configuration.xml</filename> file.
        Note that if you execute the init ANT target
        (<varname>[package.home]/esup-serveur-WebDav-4.0beta</varname>
        directory), your modifications will be lost.</para>
      </section>
    </section>

    <section>
      <title>Running the tool</title>

      <section>
        <title>Execution modes</title>

        <para><literal>ESUPWDServerManager</literal> can be either runned in
        interactive mode (like an Unix shell) or provinding an input command
        file.</para>

        <para>It is planned to develop a graphic mode.</para>

        <important>
          <para>Edit the <filename>run.bat</filename> or
          <filename>run.sh</filename> scripts (to specify paths).</para>
        </important>

        <para></para>

        <note>
          <para>The run scripts copy (and overwrite) the
          <varname>[deploy.home]/ESUPWDServerManager-1.0/properties</varname>
          directory and the <filename>log4j.xml</filename> file in the
          execution directory
          (<varname>[deploy.home]/ESUPWDServerManager-1.0/build</varname>).</para>
        </note>
      </section>

      <section>
        <title>Interactive mode</title>

        <para>Execute the <filename>run.sh</filename> or
        <filename>run.bat</filename> script in the
        <varname>[deploy.home]/esup-serveur-WebDav-4.0beta/ESUPWDServerManager-1.0</varname>
        directory :</para>

        <para><userinput>./run.sh</userinput></para>
      </section>

      <section>
        <title>Input command file mode</title>

        <para>Execute the <filename>run.sh</filename> or
        <filename>run.bat</filename> script in the
        <varname>[deploy.home]/esup-serveur-WebDav-4.0beta/ESUPWDServerManager-1.0/build</varname>
        directory followed by the input file path:</para>

        <para><userinput>./run.sh
        /data/ESUPStuff/commands.txt</userinput></para>

        <para>You will find a sample command file in the
        <varname>[deploy.home]/esup-serveur-WebDav-4.0beta/ESUPWDServerManager-1.0/properties</varname>
        directory :</para>

        <programlisting>#
# ESUP WebDAV server manager command file
#
# you can add comment like this
//or like this
/*
  or like this
*/
# --&gt; modifying some parameters
setConfig connectUserName="tbellemb"
setConfig connectPassword="trusted"
# --&gt; connecting to the server
connect
# --&gt; deleting the test tree
rmdir -f /files/quotas
# --&gt; trying an impossible action (for test)
mkdir /files/repQuiExistePas/newRep
# --&gt; building a new test tree
mkdir /files/quotas
mkdir /files/quotas/goodGuys
mkdir /files/quotas/goodGuys/jedi
mkdir /files/quotas/goodGuys/jedi/yoda
mkdir /files/quotas/goodGuys/jedi/quiGonJin
mkdir /files/quotas/badGuys
mkdir /files/quotas/badGuys/sith
mkdir /files/quotas/badGuys/sith/darkVador
mkdir /files/quotas/badGuys/sith/darkMaul
mkdir /files/quotas/badGuys/sith/darkMaul/babyDarkMaul
mkdir /files/quotas/badGuys/sith/darkMaul/doggyDarkMaul
# --&gt; setting up quotas
setquota "/files/quotas" 0 7000 false
//for goodGuys badGuys
setquota "/files/quotas" 1 5000 false
//for yoda quiGonJin darkVador darkMaul
setquota "/files/quotas" 3 2000 false
setquota "/files/quotas/badGuys/sith/darkMaul/babyDarkMaul" 0 2000 true
//darkMaul is a VR
setVR "/files/quotas/badGuys/sith/darkMaul" true
# --&gt; creating spaces with metadata
createSpace -path="/files/quotas" -ldap="(&amp;(&amp;(ur1typeentree=pers)(departmentNumber=57SI*))(uid=b*))" -ldapAttribute="uid"
            -templateFile="properties/folderManager_pattern.xml" -regexp="^(.).*:^(..).*:^(.*)" -regexpSeparator=":"
createSpace -path="/files/quotas" -name="myNewSpace"
# --&gt; setting some properties
patchQAB "/files/quotas/badGuys/sith/darkMaul/babyDarkMaul" 2500
# --&gt; getting some properties
getQAB "/files/quotas/badGuys/sith/darkMaul/babyDarkMaul"
# --&gt; removing quota
removeQuota "/files/quotas" false
# --&gt; displaying the result
cd /files
treeinfo 5
# --&gt; leaving the program
quit</programlisting>
      </section>
    </section>

    <section>
      <title>Commands overview</title>

      <mediaobject>
        <imageobject>
          <imagedata fileref="media/commandsOverview.png"></imagedata>
        </imageobject>
      </mediaobject>

      <para><literal>ESUPWDServerManager</literal> was made to work almost
      like a Unix shell, it means that you can navigate using
      <command>ls</command> and <command>cd</command> commands and
      create/delete directories with <command>mkdir</command> and
      <command>rmdir</command> commands.</para>

      <para>Most of the commands have several syntax so that they can be use
      both with the interactive or input file mode.</para>

      <para>The first command to run is <command>connect</command> to connect
      to the ESUP WebDAV server.</para>

      <para>The <command>help full</command> command gives the list and syntax
      of every command.</para>
    </section>

    <section>
      <title>Commands details</title>

      <para>For a full command help type <command>help
      [commandName]</command>.</para>

      <para>Optional arguments are in brackets. Optional arguments have to be
      fill in with the input command file mode. In the interactive mode, if
      you do not provide the optional arguments, you will be prompted.</para>

      <section>
        <title>Basic commands</title>

        <itemizedlist>
          <listitem>
            <para><command>connect</command> : connects to the server</para>
          </listitem>

          <listitem>
            <para><command>quit</command> : leaves the program</para>
          </listitem>

          <listitem>
            <para><command>ls</command> : list current directory
            content</para>
          </listitem>

          <listitem>
            <para><command>cd</command> : changes current directory (relative
            or full path)</para>
          </listitem>

          <listitem>
            <para><command>menu</command> : displays the menu</para>
          </listitem>

          <listitem>
            <para><command>help</command> : displays the help (help full -
            help [commandName])</para>
          </listitem>
        </itemizedlist>
      </section>

      <section>
        <title>Folder creation/deletion</title>

        <itemizedlist>
          <listitem>
            <para><command>mkdir</command> : creates a directory (relative or
            full path)</para>
          </listitem>

          <listitem>
            <para><command>rmdir</command> : deletes a directory (relative or
            full path)</para>
          </listitem>
        </itemizedlist>
      </section>

      <section>
        <title>Quota commands</title>

        <itemizedlist>
          <listitem>
            <para><command>treeinfo</command> <acronym>[RC]</acronym> :
            advanced ls command showing children and quota metadata of the
            current directory up to the given depth- syntax : treeinfo
            [depth]</para>

            <mediaobject>
              <imageobject>
                <imagedata fileref="media/treeInfo.png"></imagedata>
              </imageobject>
            </mediaobject>

            <para>In the screenshot above the
            <varname>/files/quotas/samples/100k</varname> directory has a
            quota of 66500 + 33500 bytes = 100kb with 33500bytes used.</para>
          </listitem>

          <listitem>
            <para><command>getQUB</command> : displays the folder
            <varname>DAV:quota-used-bytes</varname> metadata - syntax getQUB
            ("fullPath")</para>
          </listitem>

          <listitem>
            <para><command>getQAB</command> : displays the folder
            <varname>DAV:quota-available-bytes</varname> metadata - syntax
            getQAB ("fullPath")</para>
          </listitem>

          <listitem>
            <para><command>getVR</command> : displays the folder
            <varname>ESUP:virtual-root</varname> metadata - syntax getVR
            ("fullPath")</para>
          </listitem>

          <listitem>
            <para><command>patchQUB</command> : changes the folder
            <varname>DAV:quota-used-bytes</varname> metadata - syntax patchQUB
            ("fullPath value) - You should not have to use this command given
            that when you set a quota on a folder the
            <varname>DAV:quota-used-bytes</varname> metadata can be
            automatically calculated.</para>
          </listitem>

          <listitem>
            <para><command>patchQAB</command> : changes the folder
            <varname>DAV:quota-available-bytes</varname> metadata - syntax
            patchQAB ("fullPath" value)</para>
          </listitem>

          <listitem>
            <para><command>setVR</command> <acronym>[RC]</acronym> : changes
            the folder <varname>ESUP:virtual-root</varname> metadata -
            automatically changes quota metadata of parent directories up to
            the root (or first virtual root) - syntax setVR ("fullPath"
            true|false)</para>
          </listitem>

          <listitem>
            <para><command>setQuota</command> <acronym>[RC]</acronym> :
            changes the folder quota or quota of its children at a given
            depth. Can calculate the <varname>DAV:quota-used-bytes</varname>
            metadata if directories contain data. syntax setQuota ("fullPath"
            depth quota calculateQUB) - depth=0 means that you set the quota
            of the current directory - calculateQUB=true|false</para>

            <mediaobject>
              <imageobject>
                <imagedata fileref="media/setQuota.png"></imagedata>
              </imageobject>
            </mediaobject>
          </listitem>
        </itemizedlist>
      </section>

      <section>
        <title>Space manager command</title>

        <section>
          <title>Introduction</title>

          <para>This new tool replaces the former "HomedirCreation" and
          "InjacSpacesCreation" tools.</para>

          <para>This is a generic tool to create folders and set permissions
          and metadata.</para>
        </section>

        <section>
          <title>Syntax</title>

          <para><programlisting>createSpace
    -path="spacePath"
   | -name="spaceName"
or |_-ldap="ldapFilter" -ldapAttribute="uniqueLdapAttributeToRetrieve"
   (-regexp="regexp" -regexpSeparator="regexpSeparator")
   (-templateFile="pathToTemplateFile")
   (-forceSetProperties="true|false")</programlisting></para>

          <para><varname>-path</varname></para>

          <para>Specifies the space path. This path must exist. Do not specify
          the context !</para>

          <para><varname>-name="folderName"</varname> or
          <varname>-ldap="ldapFilter"
          -ldapAttribute="uniqueLdapAttributeToRetrieve"</varname></para>

          <para>Specifies or retrieves name(s) of directory(ies) to
          create.</para>

          <para>+ Either the name is specified with the -name attribute
          (creation of only one space).</para>

          <para>+ Or they are retrieved from an LDAP with the -ldap and
          -ldapAttribute parameters. The -ldapAttribute parameter specifies
          the unique LDAP attribute used for space names.</para>

          <para><varname>-regexp="regexp"
          -regexpSeparator="regexpSeparator"</varname></para>

          <para>Optional parameters to transform the full space paths.</para>

          <para>With a regexp you can specify a hash method to create homedirs
          and then improve the server performance. All of the sub-directories
          are automatically created.</para>

          <para><varname>-templateFile="pathToTemplateFile"</varname></para>

          <para>Specifies a template file to set permissions and metadata on
          spaces. Results retrieved from the LDAP can be used in the template
          file with the <varname>{0}</varname> expression.</para>

          <para>-forceSetProperties="true|false" - default=false</para>

          <para>Specifies if properties have to be written even if space(s)
          already exist. You can use this parameter to (re)initialize
          permissions and add metadata to existing space(s).</para>

          <section>
            <title>Template file</title>

            <para>Contains two sections : permissions and properties. Remove
            one of them to put only permissions or metadata.</para>

            <para>This file has to be compliant with the
            <filename>[deploy.home]/ESUPWDServerManager1.0/properties/folderManager_pattern.dtd</filename>
            file :</para>

            <programlisting>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!ELEMENT folderPattern (properties, permissions)&gt;
&lt;!ELEMENT properties (property)+&gt;
&lt;!ELEMENT permissions (permission)+&gt;
&lt;!ELEMENT property EMPTY&gt;
&lt;!ELEMENT permission EMPTY&gt;
&lt;!ATTLIST property
name CDATA #REQUIRED
namespace CDATA #IMPLIED
value CDATA #REQUIRED
type CDATA #IMPLIED
&gt;
&lt;!ATTLIST permission
subjectUri CDATA #REQUIRED
actionUri (read | write | read-acl| write-act | all) #REQUIRED
negative (true | false) #REQUIRED
&gt;</programlisting>

            <para></para>

            <programlisting>&lt;properties&gt;
    &lt;property name="propertyName" (namespace="namespace") value="value" (type="type") /&gt;
    &lt;property ... /&gt;
...
&lt;/properties&gt;
&lt;permissions&gt;
    &lt;permission subjectUri="subjectUri" actionUri="actionUri" negative="true|false" /&gt;
    &lt;permission ... /&gt;
...
&lt;/permissions&gt;</programlisting>

            <para>The <varname>&lt;properties&gt;</varname> tag defines
            metadata :</para>

            <itemizedlist>
              <listitem>
                <para><userinput>name</userinput> : property name - use only
                not protected property names except "owner"</para>
              </listitem>

              <listitem>
                <para><userinput>namespace</userinput> : property namespace -
                by default <varname>DAV:</varname></para>
              </listitem>

              <listitem>
                <para><userinput>value</userinput> : property value</para>
              </listitem>

              <listitem>
                <para><userinput>type</userinput> : property type - by default
                null</para>
              </listitem>
            </itemizedlist>

            <para>The <varname>&lt;permissions&gt;</varname> tag defines ACL's
            :</para>

            <itemizedlist>
              <listitem>
                <para><userinput>subjectUri</userinput> : ACL principal</para>
              </listitem>

              <listitem>
                <para><userinput>actionUri</userinput> : action granted or
                denied</para>
              </listitem>

              <listitem>
                <para><userinput>negative</userinput> : if true then the
                action is denied - by default false</para>
              </listitem>
            </itemizedlist>

            <para>Possible values for the <varname>actionUri</varname> tag
            :</para>

            <programlisting>read
write
write-acl
read-acl
all</programlisting>

            <para>Possible values for the <varname>subjectUri</varname> tag
            :</para>

            <programlisting>all : all of the users
authenticated : authenticated user
unauthenticated : unauthenticated user
self : // do not use this subject
owner : user owner
/users/john : a user
/roles/admin : a group</programlisting>
          </section>

          <section>
            <title>Examples</title>

            <section>
              <title>Creating a simple space without metadata nor
              permissions</title>

              <para>Template file</para>

              <programlisting>&lt;!-- this file will not be given in argument --&gt;</programlisting>

              <para>Program call</para>

              <screen>createSpace -path="/files/ESUP_documents"
              -name="WebDAVServer_documents"</screen>
            </section>

            <section>
              <title>Creating a simple space with metadata and
              permissions</title>

              <para>Template file</para>

              <programlisting>&lt;properties&gt;
    &lt;property name="displayname" value="WebDAV_server-Rennes1" /&gt;
&lt;/properties&gt;
&lt;permissions&gt;
    &lt;permission subjectUri="/users/tbellemb" actionUri="all" negative="false" /&gt;
    &lt;permission subjectUri="/roles/ESUPGroup" actionUri="/actions/read" negative="false" /&gt;
    &lt;permission subjectUri="all" actionUri="all" negative="true" /&gt;
&lt;/permissions&gt;</programlisting>

              <para>Program call</para>

              <screen>createSpace -path="/files/ESUP_documents"
              -name="WebDAVServer_documents"
              -templateFile="/usr/local/src/templates/WebDAV_server-Rennes1_TEMPLATE.xml"</screen>
            </section>

            <section>
              <title>Creating a series of homedirs with metadata and
              permissions</title>

              <para>Template file</para>

              <programlisting>&lt;properties&gt;
    &lt;property name="owner" namespace="DAV:" value="<emphasis>{0}</emphasis>" protected=true /&gt;
&lt;/properties&gt;
&lt;permissions&gt;
    &lt;permission subjectUri="/roles/local/root" actionUri="all" negative="false" /&gt;
    &lt;permission subjectUri="<emphasis>/users/{0}</emphasis>" actionUri="all" negative="false" /&gt;
    &lt;permission subjectUri="all" actionUri="all" negative="true" /&gt;
&lt;/permissions&gt;</programlisting>

              <para>Program call</para>

              <screen>createSpace -path="/files"
              -ldap="(&amp;#124;(&amp;amp;(type=pers)(department=123))(uid=55*))"
              -ldapAttribute="uid"
              -templateFile="/usr/local/src/templates/homedirs.xml"
              -regexp="^(/files)/.*:^(.).*:^/files/(.).*:^(.).*:^/files/(..).*:^(.).*:^/files/(.*)"
              -regexpSeparator=":" -forceSetProperties="true"</screen>

              <para>Consequences of this command :</para>

              <itemizedlist>
                <listitem>
                  <para>"uid" attributes matching the given LDAP filter are
                  retrieved from the LDAP</para>
                </listitem>

                <listitem>
                  <para>The regexp is applied to each "uid" giving hashed
                  paths like "t/tb/tbellemb"</para>
                </listitem>

                <listitem>
                  <para>The "path" is appended to each hashed path giving the
                  final path like "/files/t/tb/tbellemb"</para>
                </listitem>
              </itemizedlist>

              <note>
                <para>note that if a directory already exists, the pattern
                file will be applied according to the -forceSetProperties
                parameter</para>
              </note>
            </section>

            <section>
              <title>Creating an inJAC space</title>

              <para>Template file</para>

              <programlisting>&lt;properties&gt;
    &lt;property name="managers" namespace="INJAC:" value="%3Cmanagers%3E%3Cmanager+type%3D%22user%22+key%3D%22<emphasis
                  role="bold">ycolmant</emphasis>%22+displayName%3D%22<emphasis
                  role="bold">Yohan+Colmant</emphasis>%22%2F%3E%3C%2Fmanagers%3E" type="" protected="false"&gt;
    &lt;property name="injac-type" namespace="INJAC:" value="space" type="" protected="false"&gt;
&lt;/properties&gt;
&lt;permissions&gt;
    &lt;permission subjectUri="<emphasis role="bold">/users/slide.rootUser</emphasis>" actionUri="all" negative="false" /&gt;
    &lt;permission subjectUri="all" actionUri="read" negative="false" /&gt;
    &lt;permission subjectUri="all" actionUri="all" negative="true" /&gt;
&lt;/permissions&gt;</programlisting>

              <note>
                <para>About the "manager" property : replace <emphasis
                role="bold">ycolmant</emphasis> in the example above by the
                login of the injac space administrator and <emphasis
                role="bold">Yohan+Colmant</emphasis> by his display name. Note
                that spaces have to be replaced by "+" in the display
                name.</para>

                <para><emphasis role="bold">slide.rootUser</emphasis> HAS TO
                BE the same as the one defined in the
                <filename>build.properties</filename> file of the
                package.</para>
              </note>

              <para>Program call</para>

              <para><screen>createSpace -path="/files/injac"
              -name="myInjacSpace"
              -templateFile="/usr/local/src/templates/myInjacSpace.xml"</screen></para>
            </section>
          </section>
        </section>
      </section>
    </section>

    <section>
      <title>In case of problems...</title>

      <para>Follow the installation recommandations ;-)</para>
    </section>

    <section>
      <title>The ESUP storage channel (V4.2 and higher)</title>

      <para>The v4.2 storage channel requires to set specific permissions and
      metadata on homedirs. More precisely, the channels relies on the
      <varname>owner</varname> metadata to manage permissions. Whether you
      already have or not homedirs on you WebDAV server, you can use the
      createSpace command with the <command>-forceSetProperties</command>
      parameter set to <varname>true</varname> to set right properties and
      permissions. Use the following pattern :</para>

      <programlisting>&lt;properties&gt;
    &lt;property name="<emphasis>owner</emphasis>" namespace="DAV:" value="<emphasis>{0}</emphasis>" protected=true /&gt;
&lt;/properties&gt;
&lt;permissions&gt;
    &lt;permission subjectUri="/roles/local/root" actionUri="all" negative="false" /&gt;
    &lt;permission subjectUri="<emphasis>/users/{0}</emphasis>" actionUri="all" negative="false" /&gt;
    &lt;permission subjectUri="all" actionUri="all" negative="true" /&gt;
&lt;/permissions&gt;</programlisting>
    </section>

    <section>
      <title>Links in this page</title>

      <para></para>
    </section>
  </section>
</article>