Author: enorman
Date: Sun Feb 28 19:44:54 2010
New Revision: 917278
URL: http://svn.apache.org/viewvc?rev=917278&view=rev
Log:
SLING-1413 - In Jackrabbit 2.0, Privileges can now be denied for Groups. The
ModifyAceServlet and security ContentLoader should allow it as well.
Modified:
sling/trunk/bundles/jcr/base/src/main/java/org/apache/sling/jcr/base/util/AccessControlUtil.java
sling/trunk/launchpad/content/src/main/resources/content/apps/sling/servlet/default/ace.html.esp
sling/trunk/launchpad/testing/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/accessManager/ModifyAceTest.java
Modified:
sling/trunk/bundles/jcr/base/src/main/java/org/apache/sling/jcr/base/util/AccessControlUtil.java
URL:
http://svn.apache.org/viewvc/sling/trunk/bundles/jcr/base/src/main/java/org/apache/sling/jcr/base/util/AccessControlUtil.java?rev=917278&r1=917277&r2=917278&view=diff
==============================================================================
---
sling/trunk/bundles/jcr/base/src/main/java/org/apache/sling/jcr/base/util/AccessControlUtil.java
(original)
+++
sling/trunk/bundles/jcr/base/src/main/java/org/apache/sling/jcr/base/util/AccessControlUtil.java
Sun Feb 28 19:44:54 2010
@@ -316,20 +316,18 @@
acl.addAccessControlEntry(principal,
grantedPrivilegeList.toArray(new Privilege[grantedPrivilegeList.size()]));
}
- //if the authorizable is a user (not a group) process any denied
privileges
+ //process any denied privileges
UserManager userManager = getUserManager(session);
Authorizable authorizable = userManager.getAuthorizable(principal);
- if (!authorizable.isGroup()) {
- //add a fresh ACE with the denied privileges
- List<Privilege> deniedPrivilegeList = new
ArrayList<Privilege>();
- for (String name : newDeniedPrivilegeNames) {
- Privilege privilege =
accessControlManager.privilegeFromName(name);
- deniedPrivilegeList.add(privilege);
- }
- if (deniedPrivilegeList.size() > 0) {
- addEntry(acl, principal,
deniedPrivilegeList.toArray(new Privilege[deniedPrivilegeList.size()]), false);
- }
- }
+ //add a fresh ACE with the denied privileges
+ List<Privilege> deniedPrivilegeList = new
ArrayList<Privilege>();
+ for (String name : newDeniedPrivilegeNames) {
+ Privilege privilege =
accessControlManager.privilegeFromName(name);
+ deniedPrivilegeList.add(privilege);
+ }
+ if (deniedPrivilegeList.size() > 0) {
+ addEntry(acl, principal,
deniedPrivilegeList.toArray(new Privilege[deniedPrivilegeList.size()]), false);
+ }
accessControlManager.setPolicy(resourcePath, acl);
if (log.isDebugEnabled()) {
Modified:
sling/trunk/launchpad/content/src/main/resources/content/apps/sling/servlet/default/ace.html.esp
URL:
http://svn.apache.org/viewvc/sling/trunk/launchpad/content/src/main/resources/content/apps/sling/servlet/default/ace.html.esp?rev=917278&r1=917277&r2=917278&view=diff
==============================================================================
---
sling/trunk/launchpad/content/src/main/resources/content/apps/sling/servlet/default/ace.html.esp
(original)
+++
sling/trunk/launchpad/content/src/main/resources/content/apps/sling/servlet/default/ace.html.esp
Sun Feb 28 19:44:54 2010
@@ -5,14 +5,12 @@
response.sendError(404);
} else {
var principalId = request.getParameter("pid");
- var isUser = false;
var isValidPrincipal = false;
if (principalId != null && principalId != "") {
var userManager =
Packages.org.apache.sling.jcr.base.util.AccessControlUtil.getUserManager(currentNode.session);
if (userManager != null) {
var authorizable = userManager.getAuthorizable(principalId);
if (authorizable != null) {
- isUser = !authorizable.isGroup();
isValidPrincipal = true;
} else {
//no user/group matches the supplied principal id
@@ -72,12 +70,10 @@
<table width="100%">
<thead>
<tr>
- <th align="left" width="<%=isUser ? '70%' :
'55%'%>">Privilege</th>
+ <th align="left" width="55%">Privilege</th>
<th align="center" width="15%">Ignored</th>
<th align="center" width="15%">Granted</th>
- <% if (isUser) { %>
<th align="center" width="15%">Denied</th>
- <% } %>
</tr>
</thead>
<tbody>
@@ -86,12 +82,10 @@
var p = supported[i];
%>
<tr>
- <td align="left" width="<%=isUser ? '70%' :
'55%'%>"><%=p.getName()%></td>
+ <td align="left" width="55%"><%=p.getName()%></td>
<td align="center" width="15%"><input type="radio"
name="privilege@<%=p.getName()%>" value="none" <%=granted.contains(p) ||
denied.contains(p) ? "" : "checked"%> /></td>
<td align="center" width="15%"><input type="radio"
name="privilege@<%=p.getName()%>" value="granted" <%=granted.contains(p) ?
"checked" : ""%> /></td>
- <% if (isUser) { %>
<td align="center" width="15%"><input type="radio"
name="privilege@<%=p.getName()%>" value="denied" <%=denied.contains(p) ?
"checked" : ""%> /></td>
- <% } %>
</tr>
<%
}
@@ -99,7 +93,7 @@
</tbody>
<tfoot>
<tr>
- <td colspan="<%=isUser ? '3' : '2'%>"></td>
+ <td colspan="3"></td>
<td align="center" width="15%">
<button accesskey="a" id="applyButton"
class="form-button" type="submit">Apply</button>
</td>
Modified:
sling/trunk/launchpad/testing/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/accessManager/ModifyAceTest.java
URL:
http://svn.apache.org/viewvc/sling/trunk/launchpad/testing/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/accessManager/ModifyAceTest.java?rev=917278&r1=917277&r2=917278&view=diff
==============================================================================
---
sling/trunk/launchpad/testing/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/accessManager/ModifyAceTest.java
(original)
+++
sling/trunk/launchpad/testing/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/accessManager/ModifyAceTest.java
Sun Feb 28 19:44:54 2010
@@ -141,8 +141,9 @@
assertEquals(1, grantedArray.length());
assertEquals("jcr:read", grantedArray.getString(0));
- //denied rights are not applied for groups, so make sure it is
not there
- assertTrue(aceObject.isNull("denied"));
+ JSONArray deniedArray = aceObject.getJSONArray("denied");
+ assertNotNull(deniedArray);
+ assertEquals("jcr:write", deniedArray.getString(0));
}
/**