incubator-sling-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From build...@apache.org
Subject svn commit: r818667 [3/18] - in /websites/staging/sling/trunk/content: ./ authentication/ documentation/ documentation/bundles/ documentation/development/ documentation/getting-started/ documentation/the-sling-engine/ documentation/the-sling-engine/aut...
Date Tue, 22 May 2012 09:41:27 GMT
Added: websites/staging/sling/trunk/content/documentation/bundles/managing-users-and-groups-jackrabbit-usermanager.html
==============================================================================
--- websites/staging/sling/trunk/content/documentation/bundles/managing-users-and-groups-jackrabbit-usermanager.html
(added)
+++ websites/staging/sling/trunk/content/documentation/bundles/managing-users-and-groups-jackrabbit-usermanager.html
Tue May 22 09:41:22 2012
@@ -0,0 +1,298 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE- 2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+  <head>
+    <title>Apache Sling - Managing users and groups (jackrabbit.usermanager)</title>
+    <link rel="stylesheet" href="/css/site.css" type="text/css" media="all">
+    <link rel="icon" href="http://sling.apache.org/site/media.data/favicon.ico">
+    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
+  </head>
+  <body>
+    <div class="title">
+      <div class="logo">
+        <a href="http://sling.apache.org/site/index.html">
+          <img border="0" alt="Apache Sling" src="http://sling.apache.org/site/media.data/logo.png">
+        </a>
+      </div>
+      <div class="header">
+        <a href="http://www.apache.org/">
+          <img border="0" alt="Apache" src="http://sling.apache.org/site/media.data/apache.png">
+        </a>
+      </div>
+    </div>
+    
+    <div class="menu"> 
+      <p><strong>Documentation</strong> <br />
+<a href="/getting-started.html">Getting Started</a> <br />
+<a href="/the-sling-engine.html">The Sling Engine</a> <br />
+<a href="/development.html">Development</a> <br />
+<a href="/bundles.html">Bundles</a> <br />
+<a href="/tutorials-how-tos.html">Tutorials &amp; How-Tos</a> <br />
+<a href="/configuration.html">Configuration</a> <br />
+<a href="http://s.apache.org/sling.wiki">Wiki</a> <br />
+<a href="http://s.apache.org/sling.faq">FAQ</a> <br />
+<a href="/sitemap.html">Site Map</a></p>
+<p><strong>API Docs</strong>  <br />
+<a href="http://sling.apache.org/apidocs/sling6/index.html">Sling 6</a> <br
/>
+<a href="http://sling.apache.org/apidocs/sling5/index.html">Sling 5</a> <br
/>
+</p>
+<p><strong>Project info</strong> <br />
+<a href="http://sling.apache.org/site/downloads.cgi">Downloads</a> <br />
+<a href="http://www.apache.org/licenses/">License</a> <br />
+<a href="/contributing.html">Contributing</a> <br />
+<a href="/news.html">News</a> <br />
+<a href="/links.html">Links</a> <br />
+<a href="/project-information.html">Project Information</a> <br />
+<a href="https://issues.apache.org/jira/browse/SLING">Issue Tracker</a> <br
/>
+<a href="http://svn.apache.org/viewvc/sling/trunk">Browse Source Repository</a>
<br />
+<a href="/security.html">Security</a> <br />
+</p>
+<p><strong>Sponsorship</strong> <br />
+<a href="http://www.apache.org/foundation/thanks.html">Thanks</a> <br />
+<a href="http://www.apache.org/foundation/sponsorship.html">Become a Sponsor</a>
<br />
+<a href="http://www.apache.org/foundation/buy_stuff.html">Buy Stuff</a> <br
/>
+</p>
+<iframe 
+    src="http://www.apache.org/ads/button.html"
+    style="border-width:0; float: left" frameborder="0" 
+    scrolling="no"
+    width="135" 
+    height="135">
+</iframe>
+    </div>
+    
+    <div class="main">
+      <div class="breadcrump" style="font-size: 80%;">
+        <a href="/">Home</a>&nbsp;&raquo&nbsp;<a href="/documentation.html">Documentation</a>&nbsp;&raquo&nbsp;<a
href="/documentation/bundles.html">Bundles</a>
+      </div>
+      <h1>Managing users and groups (jackrabbit.usermanager)</h1>
+      <p>The <code>jackrabbit-usermanager</code> bundle delivers a REST
interface to create, update and delete users and groups in the JCR. After installing the <code>jackrabbit-usermanager</code>
bundle all REST services are exposed under the path /system/userManager.</p>
+<div class="toc">
+<ul>
+<li><a href="#list-users">List users</a></li>
+<li><a href="#get-user">Get user</a></li>
+<li><a href="#create-user">Create user</a></li>
+<li><a href="#update-user">Update user</a></li>
+<li><a href="#change-password">Change password</a></li>
+<li><a href="#delete-user">Delete user</a></li>
+<li><a href="#list-groups">List groups</a></li>
+<li><a href="#get-group">Get group</a></li>
+<li><a href="#create-group">Create group</a></li>
+<li><a href="#update-group">Update group</a></li>
+<li><a href="#delete-group">Delete group</a></li>
+<li><a href="#automated-tests">Automated Tests</a></li>
+<li><a href="#permissions-checking-from-scripts">Permissions checking from scripts</a></li>
+<li><a href="#sample-user-interface-implementation">Sample User Interface Implementation</a></li>
+</ul>
+</div>
+<h2 id="list-users">List users</h2>
+<p>To list existing users a GET request to the <code>/system/userManager/user</code>
resource can be posted. Depending on the configuration of the Default GET Servlet and/or the
availability of a Servlet or Script handling the <code>sling/users</code> resource
type, a result may be delivered.</p>
+<p>Example with curl and the default JSON rendering:</p>
+<div class="codehilite"><pre><span class="nv">$</span> <span class="nv">curl</span>
<span class="n">http:</span><span class="sr">//</span><span class="n">localhost:8080</span><span
class="sr">/system/</span><span class="n">userManager</span><span
class="o">/</span><span class="n">user</span><span class="o">.</span><span
class="n">tidy</span><span class="mf">.1</span><span class="o">.</span><span
class="n">json</span>
+<span class="p">{</span>
+  <span class="s">&quot;admin&quot;</span><span class="p">:</span>
<span class="p">{</span>
+    <span class="s">&quot;memberOf&quot;</span><span class="p">:</span>
<span class="o">[]</span><span class="p">,</span>
+    <span class="s">&quot;declaredMemberOf&quot;</span><span class="p">:</span>
<span class="o">[]</span>
+  <span class="p">},</span>
+  <span class="s">&quot;anonymous&quot;</span><span class="p">:</span>
<span class="p">{</span>
+    <span class="s">&quot;memberOf&quot;</span><span class="p">:</span>
<span class="o">[]</span><span class="p">,</span>
+    <span class="s">&quot;declaredMemberOf&quot;</span><span class="p">:</span>
<span class="o">[]</span>
+  <span class="p">}</span>
+<span class="p">}</span>
+</pre></div>
+
+
+<h2 id="get-user">Get user</h2>
+<p><em>since version 2.0.8</em>
+The properties of a single user can be retrieved by sending a GET request to the user's resource
at <code>/system/userManager/user/username</code> where <em>username</em>
would be replaced with the name of the user.  Depending on the configuration of the Default
GET Servlet and/or the availability of a Servlet or Script handling the <code>sling/user</code>
resource type, a result may be delivered.</p>
+<p>Example with curl and the default JSON rendering:</p>
+<div class="codehilite"><pre><span class="nv">$</span> <span class="nv">curl</span>
<span class="n">http:</span><span class="sr">//</span><span class="n">localhost:8080</span><span
class="sr">/system/</span><span class="n">userManager</span><span
class="sr">/user/</span><span class="n">admin</span><span class="o">.</span><span
class="n">tidy</span><span class="mf">.1</span><span class="o">.</span><span
class="n">json</span>
+<span class="p">{</span>
+    <span class="s">&quot;memberOf&quot;</span><span class="p">:</span>
<span class="o">[]</span><span class="p">,</span>
+    <span class="s">&quot;declaredMemberOf&quot;</span><span class="p">:</span>
<span class="o">[]</span>
+<span class="p">}</span>
+</pre></div>
+
+
+<p>If a non-existing user is requested a 404/NOT FOUND status is sent back.</p>
+<h2 id="create-user">Create user</h2>
+<p>To create a new user POST a request to <code>/system/userManager/user.create.&lt;html
or json&gt;</code>. The following parameters are available:</p>
+<p>Responses:
+| 200 | Success, a redirect is sent to the users resource locator with HTML (or JSON) describing
status. |</p>
+<p>Example with curl:</p>
+<div class="codehilite"><pre><span class="n">curl</span> <span
class="o">-</span><span class="n">F:name</span><span class="o">=</span><span
class="n">myuser</span> <span class="o">-</span><span class="n">Fpwd</span><span
class="o">=</span><span class="n">password</span> <span class="o">-</span><span
class="n">FpwdConfirm</span><span class="o">=</span><span class="n">password</span>
<span class="o">-</span><span class="n">Fanyproperty1</span><span
class="o">=</span><span class="n">value1</span> <span class="o">\</span>
+    <span class="n">http:</span><span class="sr">//</span><span
class="n">localhost:8080</span><span class="sr">/system/</span><span
class="n">userManager</span><span class="o">/</span><span class="n">user</span><span
class="o">.</span><span class="n">create</span><span class="o">.</span><span
class="n">html</span>
+</pre></div>
+
+
+<h2 id="update-user">Update user</h2>
+<p>To update an existing user POST a request to <code>/system/userManager/user/username.update.&lt;html
or json&gt;</code>. You can NOT update the username or the password (see Change
Password below) only the additional properties are updateable through this URL. The following
parameters are available:</p>
+<p>Responses:
+| 200 | Success, a redirect is sent to the users resource locator with HTML (or JSON) describing
status. |</p>
+<p>Example</p>
+<div class="codehilite"><pre><span class="n">curl</span> <span
class="o">-</span><span class="n">Fanyproperty1</span><span class="nv">@Delete</span>
<span class="o">-</span><span class="n">Fproperty2</span><span
class="o">=</span><span class="n">value2</span> <span class="o">\</span>
+    <span class="n">http:</span><span class="sr">//</span><span
class="n">localhost:8080</span><span class="sr">/system/</span><span
class="n">userManager</span><span class="sr">/user/m</span><span class="n">yuser</span><span
class="o">.</span><span class="n">update</span><span class="o">.</span><span
class="n">html</span>
+</pre></div>
+
+
+<h2 id="change-password">Change password</h2>
+<p>To change a password of an existing user POST a request to <code>/system/userManager/user/username.changePassword.&lt;html
or json&gt;</code>. NOTE: since version 2.1.1, the oldPwd is optional if the current
user is a user administrator.  The following parameters are available:</p>
+<p>Responses:
+| 200 | Success, sent with no body. |</p>
+<p>Example</p>
+<div class="codehilite"><pre><span class="n">curl</span> <span
class="o">-</span><span class="n">FoldPwd</span><span class="o">=</span><span
class="n">oldpassword</span> <span class="o">-</span><span class="n">FnewPwd</span><span
class="o">=</span><span class="n">newpassword</span> <span class="o">=</span><span
class="n">FnewPwdConfirm</span><span class="o">=</span><span class="n">newpassword</span>
<span class="o">\</span>
+    <span class="n">http:</span><span class="sr">//</span><span
class="n">localhost:8080</span><span class="sr">/system/</span><span
class="n">userManager</span><span class="sr">/user/m</span><span class="n">yuser</span><span
class="o">.</span><span class="n">changePassword</span><span class="o">.</span><span
class="n">html</span>
+</pre></div>
+
+
+<h2 id="delete-user">Delete user</h2>
+<p>To delete an existing user POST a request to <code>/system/userManager/user/username.delete.&lt;html
or json&gt;</code>. The following parameters are available:</p>
+<p>Responses:
+| 200 | Success, sent with no body. |</p>
+<p>Example</p>
+<div class="codehilite"><pre><span class="n">curl</span> <span
class="o">-</span><span class="n">Fgo</span><span class="o">=</span><span
class="mi">1</span> <span class="n">http:</span><span class="sr">//</span><span
class="n">localhost:8080</span><span class="sr">/system/</span><span
class="n">userManager</span><span class="sr">/user/m</span><span class="n">yuser</span><span
class="o">.</span><span class="nb">delete</span><span class="o">.</span><span
class="n">html</span>
+</pre></div>
+
+
+<h2 id="list-groups">List groups</h2>
+<p>To list existing groups a GET request to the <code>/system/userManager/group</code>
resource can be sent. Depending on the configuration of the Default GET Servlet and/or the
availability of a Servlet or Script handling the <code>sling/groups</code> resource
type, a result may be delivered.</p>
+<p>Example with curl and the default JSON rendering:</p>
+<div class="codehilite"><pre><span class="nv">$</span> <span class="nv">curl</span>
<span class="n">http:</span><span class="sr">//</span><span class="n">localhost:8080</span><span
class="sr">/system/</span><span class="n">userManager</span><span
class="o">/</span><span class="n">group</span><span class="o">.</span><span
class="n">tidy</span><span class="mf">.1</span><span class="o">.</span><span
class="n">json</span>
+<span class="p">{</span>
+  <span class="s">&quot;UserAdmin&quot;</span><span class="p">:</span>
<span class="p">{</span>
+    <span class="s">&quot;members&quot;</span><span class="p">:</span>
<span class="o">[]</span><span class="p">,</span>
+    <span class="s">&quot;declaredMembers&quot;</span><span class="p">:</span>
<span class="o">[]</span><span class="p">,</span>
+    <span class="s">&quot;memberOf&quot;</span><span class="p">:</span>
<span class="o">[]</span><span class="p">,</span>
+    <span class="s">&quot;declaredMemberOf&quot;</span><span class="p">:</span>
<span class="o">[]</span>
+  <span class="p">},</span>
+  <span class="s">&quot;GroupAdmin&quot;</span><span class="p">:</span>
<span class="p">{</span>
+    <span class="s">&quot;members&quot;</span><span class="p">:</span>
<span class="o">[]</span><span class="p">,</span>
+    <span class="s">&quot;declaredMembers&quot;</span><span class="p">:</span>
<span class="o">[]</span><span class="p">,</span>
+    <span class="s">&quot;memberOf&quot;</span><span class="p">:</span>
<span class="o">[]</span><span class="p">,</span>
+    <span class="s">&quot;declaredMemberOf&quot;</span><span class="p">:</span>
<span class="o">[]</span>
+   <span class="p">},</span>
+  <span class="s">&quot;administrators&quot;</span><span class="p">:</span>
<span class="p">{</span>
+    <span class="s">&quot;members&quot;</span><span class="p">:</span>
<span class="o">[]</span><span class="p">,</span>
+    <span class="s">&quot;declaredMembers&quot;</span><span class="p">:</span>
<span class="o">[]</span><span class="p">,</span>
+    <span class="s">&quot;memberOf&quot;</span><span class="p">:</span>
<span class="o">[]</span><span class="p">,</span>
+    <span class="s">&quot;declaredMemberOf&quot;</span><span class="p">:</span>
<span class="o">[]</span>
+<span class="p">}</span>
+<span class="p">}</span>
+</pre></div>
+
+
+<h2 id="get-group">Get group</h2>
+<p>The properties of a single group can be retrieved by sending a GET request to the
group's resource at <code>/system/userManager/group/groupname</code> where <em>groupname</em>
would be replaced with the name of the group.  Depending on the configuration of the Default
GET Servlet and/or the availability of a Servlet or Script handling the <code>sling/group</code>
resource type, a result may be delivered.</p>
+<p>Example with curl and the default JSON rendering:</p>
+<div class="codehilite"><pre><span class="nv">$</span> <span class="nv">curl</span>
<span class="n">http:</span><span class="sr">//</span><span class="n">localhost:8080</span><span
class="sr">/system/</span><span class="n">userManager</span><span
class="sr">/group/</span><span class="n">administrators</span><span
class="o">.</span><span class="n">tidy</span><span class="mf">.1</span><span
class="o">.</span><span class="n">json</span>
+<span class="p">{</span>
+    <span class="s">&quot;members&quot;</span><span class="p">:</span>
<span class="o">[]</span><span class="p">,</span>
+    <span class="s">&quot;declaredMembers&quot;</span><span class="p">:</span>
<span class="o">[]</span><span class="p">,</span>
+    <span class="s">&quot;memberOf&quot;</span><span class="p">:</span>
<span class="o">[]</span><span class="p">,</span>
+    <span class="s">&quot;declaredMemberOf&quot;</span><span class="p">:</span>
<span class="o">[]</span>
+<span class="p">}</span>
+</pre></div>
+
+
+<p>If a non-existing group is requested a 404/NOT FOUND status is sent back.</p>
+<h2 id="create-group">Create group</h2>
+<p>To create a new group POST a request to <code>/system/userManager/group.create.&lt;html
or json&gt;</code>. The following parameters are available:</p>
+<p>Responses:
+| 200 | Success, a redirect is sent to the group resource locator with HTML (or JSON) describing
status. |</p>
+<p>Example with curl:</p>
+<div class="codehilite"><pre><span class="n">curl</span> <span
class="o">-</span><span class="n">F:name</span><span class="o">=</span><span
class="n">mygroup</span> <span class="o">-</span><span class="n">Fanyproperty1</span><span
class="o">=</span><span class="n">value1</span> <span class="o">\</span>
+    <span class="n">http:</span><span class="sr">//</span><span
class="n">localhost:8080</span><span class="sr">/system/</span><span
class="n">userManager</span><span class="o">/</span><span class="n">group</span><span
class="o">.</span><span class="n">create</span><span class="o">.</span><span
class="n">html</span>
+</pre></div>
+
+
+<h2 id="update-group">Update group</h2>
+<p>To update an existing group POST a request to <code>/system/userManager/group/groupname.update.&lt;html
or json&gt;</code>. You can NOT update the name of the group only the additional
properties are updateable. The following parameters are available:</p>
+<p>Responses:
+| 200 | Success, a redirect is sent to the groups resource locator with HTML (or JSON) describing
status. |</p>
+<p>Example</p>
+<div class="codehilite"><pre><span class="n">curl</span> <span
class="o">\-</span><span class="n">Fanyproperty1</span><span class="nv">@Delete</span>
<span class="o">\-</span><span class="n">Fproperty2</span><span
class="o">=</span><span class="n">value2</span> <span class="o">-</span><span
class="n">F</span> <span class="s">&quot;:member=/system/userManager/user/myuser&quot;</span>
<span class="o">\</span>
+    <span class="n">http:</span><span class="sr">//</span><span
class="n">localhost:8080</span><span class="sr">/system/</span><span
class="n">userManager</span><span class="sr">/group/m</span><span
class="n">ygroup</span><span class="o">.</span><span class="n">update</span><span
class="o">.</span><span class="n">html</span>
+</pre></div>
+
+
+<h2 id="delete-group">Delete group</h2>
+<p>To delete an existing group POST a request to <code>/system/userManager/group/groupname.delete.&lt;html
or json&gt;</code>. The following parameters are available:</p>
+<p>Responses:
+| 200 | Success, sent with no body. |</p>
+<p>Example</p>
+<div class="codehilite"><pre><span class="n">curl</span> <span
class="o">-</span><span class="n">Fgo</span><span class="o">=</span><span
class="mi">1</span> <span class="n">http:</span><span class="sr">//</span><span
class="n">localhost:8080</span><span class="sr">/system/</span><span
class="n">userManager</span><span class="sr">/group/m</span><span
class="n">ygroup</span><span class="o">.</span><span class="nb">delete</span><span
class="o">.</span><span class="n">html</span>
+</pre></div>
+
+
+<h2 id="automated-tests">Automated Tests</h2>
+<p>The <a href="">launchpad/testing</a> module contains test classes for
various operations of the <code>jackrabbit-usermanager</code>. Such tests run
as part of our continuous integration process, to demonstrate and verify the behavior of the
various operations, in a way that's guaranteed to be in sync with the actual Sling core code.
If you have an idea for additional tests, make sure to let us know!</p>
+<h2 id="permissions-checking-from-scripts">Permissions checking from scripts</h2>
+<p><em>Since Version 2.0.6</em></p>
+<p>When developing scripts that will perform user or group updates, you may want to
know what actions the current user is provisioned to do.  This information can be used to
conditionally render parts of your page differently based on the user rights.</p>
+<p>The jackrabbit.usermanager bundle provides a service (AuthorizablePrivilegesInfo)
you can utilize to do help with this permission checking.</p>
+<p>The AuthorizablePrivilegesInfo provides methods for checking the following actions
+| Method | Description |
+|--|--|
+| canAddUser(jcrSession) | Checks if the current user may add new users |
+| canAddGroup(jcrSession) | Checks if the current user may add new groups |
+| canUpdateProperties(jcrSession, principalId) | Checks if the current user may update the
properties of the specified principal |
+| canRemove(jcrSession, principalId) | Checks if the current user may remove the specified
user or group |
+| canUpdateGroupMembers(jcrSession, groupId) | Checks if the current user may modify the
membership of the specified group |</p>
+<p>Example:</p>
+<div class="codehilite"><pre><span class="cp">&lt;%</span>
+    <span class="sr">//</span> <span class="n">lookup</span> <span
class="n">the</span> <span class="n">service</span>
+    <span class="n">var</span> <span class="n">privilegesInfo</span>
<span class="o">=</span> <span class="n">sling</span><span class="o">.</span><span
class="n">getService</span><span class="p">(</span><span class="no">Packages</span><span
class="o">.</span><span class="n">org</span><span class="o">.</span><span
class="n">apache</span><span class="o">.</span><span class="n">sling</span><span
class="o">.</span><span class="n">jackrabbit</span><span class="o">.</span><span
class="n">usermanager</span><span class="o">.</span><span class="n">AuthorizablePrivilegesInfo</span><span
class="p">);</span>
+
+    <span class="k">if</span> <span class="p">(</span><span class="n">privilegesInfo</span><span
class="o">.</span><span class="n">canAddUser</span><span class="p">(</span><span
class="n">currentSession</span><span class="p">))</span> <span class="p">{</span><span
class="sr"></span>
+<span class="sr">        //TODO: render the UI that allows the user to add a user here</span>
+<span class="sr">    }</span>
+
+<span class="sr">    if (privilegesInfo.canAddGroup(currentSession)) {</span>
+<span class="sr">        /</span><span class="o">/</span><span
class="no">TODO</span><span class="p">:</span> <span class="n">render</span>
<span class="n">the</span> <span class="no">UI</span> <span class="n">that</span>
<span class="n">allows</span> <span class="n">the</span> <span
class="n">user</span> <span class="n">to</span> <span class="n">add</span>
<span class="n">a</span> <span class="n">group</span> <span class="n">here</span>
+    <span class="p">}</span>
+
+    <span class="k">if</span> <span class="p">(</span><span class="n">privilegesInfo</span><span
class="o">.</span><span class="n">canUpdateProperties</span><span
class="p">(</span><span class="n">currentSession</span><span class="p">,</span>
<span class="s2">&quot;someUserId&quot;</span><span class="p">))</span>
<span class="p">{</span><span class="sr"></span>
+<span class="sr">        //TODO: render the UI that allows the user to update the properties
of the user here</span>
+<span class="sr">    }</span>
+
+<span class="sr">    if (privilegesInfo.canRemove(currentSession, &quot;someUserId&quot;))
{</span>
+<span class="sr">        /</span><span class="o">/</span><span
class="no">TODO</span><span class="p">:</span> <span class="n">render</span>
<span class="n">the</span> <span class="no">UI</span> <span class="n">that</span>
<span class="n">allows</span> <span class="n">the</span> <span
class="n">user</span> <span class="n">to</span> <span class="n">remove</span>
<span class="n">the</span> <span class="n">user</span> <span class="n">here</span>
+    <span class="p">}</span>
+
+    <span class="k">if</span> <span class="p">(</span><span class="n">privilegesInfo</span><span
class="o">.</span><span class="n">canUpdateGroupMembers</span><span
class="p">(</span><span class="n">currentSession</span><span class="p">,</span>
<span class="s2">&quot;GroupName&quot;</span><span class="p">))</span>
<span class="p">{</span><span class="sr"></span>
+<span class="sr">        //TODO: draw your UI that allows the user to update the group
memebership here</span>
+<span class="sr">    }</span>
+<span class="cp">%&gt;</span><span class="x"></span>
+</pre></div>
+
+
+<h2 id="sample-user-interface-implementation">Sample User Interface Implementation</h2>
+<p><em>Since Version 2.1.1</em></p>
+<p>A sample implementation of ui pages for user/group management is provided @ http://svn.apache.org/viewvc/sling/trunk/samples/usermanager-ui/</p>
+      <div class="timestamp" style="margin-top: 30px; font-size: 80%; text-align: right;">
+        Rev. 1341376 by fmeschbe on Tue, 22 May 2012 09:41:06 +0000
+      </div>
+      <div class="trademarkFooter"> 
+        Apache Sling, Sling, Apache, the Apache feather logo, and the Apache Sling project
+        logo are trademarks of The Apache Software Foundation. All other marks mentioned
+        may be trademarks or registered trademarks of their respective owners.
+      </div>
+    </div>
+  </body>
+</html>



Mime
View raw message