You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by it...@apache.org on 2011/01/17 11:39:09 UTC
svn commit: r1059856 - in
/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main:
java/org/apache/clerezza/platform/usermanager/webinterface/
resources/org/apache/clerezza/platform/usermanage...
Author: ito
Date: Mon Jan 17 10:39:09 2011
New Revision: 1059856
URL: http://svn.apache.org/viewvc?rev=1059856&view=rev
Log:
CLEREZZA-397: access permissions for usermanager implemented
Added:
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/java/org/apache/clerezza/platform/usermanager/webinterface/PermissionManagerAccessPermission.java
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/java/org/apache/clerezza/platform/usermanager/webinterface/UserManagerAccessPermission.java
Modified:
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/java/org/apache/clerezza/platform/usermanager/webinterface/UserManagerWeb.java
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/resources/org/apache/clerezza/platform/usermanager/webinterface/add-user-template.xhtml
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/resources/org/apache/clerezza/platform/usermanager/webinterface/role-permission-template.xhtml
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/resources/org/apache/clerezza/platform/usermanager/webinterface/update-user-template.xhtml
incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/resources/org/apache/clerezza/platform/usermanager/webinterface/user-permission-template.xhtml
Added: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/java/org/apache/clerezza/platform/usermanager/webinterface/PermissionManagerAccessPermission.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/java/org/apache/clerezza/platform/usermanager/webinterface/PermissionManagerAccessPermission.java?rev=1059856&view=auto
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/java/org/apache/clerezza/platform/usermanager/webinterface/PermissionManagerAccessPermission.java (added)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/java/org/apache/clerezza/platform/usermanager/webinterface/PermissionManagerAccessPermission.java Mon Jan 17 10:39:09 2011
@@ -0,0 +1,66 @@
+/*
+ * 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.
+ */
+
+package org.apache.clerezza.platform.usermanager.webinterface;
+
+import java.security.Permission;
+import org.apache.clerezza.permissiondescriptions.PermissionInfo;
+
+/**
+ * Permission to use the Permission-Manager page. Note that the user
+ * additionally needs read/write permission from the system graph and getPolicy permission
+ *
+ * @author tio
+ */
+@PermissionInfo(value="Permission Manager Access Permission", description="Grants access " +
+ "to the Permission Manager")
+public class PermissionManagerAccessPermission extends Permission{
+
+ public PermissionManagerAccessPermission() {
+ super("Permission Manager permission");
+ }
+ /**
+ *
+ * @param target ignored
+ * @param action ignored
+ */
+ public PermissionManagerAccessPermission(String target, String actions) {
+ super("Permission Manager permission");
+ }
+
+ @Override
+ public boolean implies(Permission permission) {
+ return equals(permission);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ return getClass().equals(obj.getClass());
+ }
+
+ @Override
+ public int hashCode() {
+ return 77987 + "Permission Manager permission".hashCode();
+ }
+
+ @Override
+ public String getActions() {
+ return "";
+ }
+}
Added: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/java/org/apache/clerezza/platform/usermanager/webinterface/UserManagerAccessPermission.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/java/org/apache/clerezza/platform/usermanager/webinterface/UserManagerAccessPermission.java?rev=1059856&view=auto
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/java/org/apache/clerezza/platform/usermanager/webinterface/UserManagerAccessPermission.java (added)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/java/org/apache/clerezza/platform/usermanager/webinterface/UserManagerAccessPermission.java Mon Jan 17 10:39:09 2011
@@ -0,0 +1,66 @@
+/*
+ * 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.
+ */
+
+package org.apache.clerezza.platform.usermanager.webinterface;
+
+import java.security.Permission;
+import org.apache.clerezza.permissiondescriptions.PermissionInfo;
+
+/**
+ * Permission to use the User-Manager page. Note that the user
+ * additionally needs read/write permission from the system graph.
+ *
+ * @author tio
+ */
+@PermissionInfo(value="User Manager Access Permission", description="Grants access " +
+ "to the User Manager")
+public class UserManagerAccessPermission extends Permission{
+
+ public UserManagerAccessPermission() {
+ super("User Manager permission");
+ }
+ /**
+ *
+ * @param target ignored
+ * @param action ignored
+ */
+ public UserManagerAccessPermission(String target, String actions) {
+ super("User Manager permission");
+ }
+
+ @Override
+ public boolean implies(Permission permission) {
+ return equals(permission);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ return getClass().equals(obj.getClass());
+ }
+
+ @Override
+ public int hashCode() {
+ return 55784 + "User Manager permission".hashCode();
+ }
+
+ @Override
+ public String getActions() {
+ return "";
+ }
+}
Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/java/org/apache/clerezza/platform/usermanager/webinterface/UserManagerWeb.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/java/org/apache/clerezza/platform/usermanager/webinterface/UserManagerWeb.java?rev=1059856&r1=1059855&r2=1059856&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/java/org/apache/clerezza/platform/usermanager/webinterface/UserManagerWeb.java (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/java/org/apache/clerezza/platform/usermanager/webinterface/UserManagerWeb.java Mon Jan 17 10:39:09 2011
@@ -24,8 +24,11 @@ import java.io.UnsupportedEncodingExcept
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLEncoder;
+import java.security.AccessControlContext;
import java.security.AccessControlException;
import java.security.AccessController;
+import java.security.Principal;
+import java.security.PrivilegedAction;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
@@ -35,6 +38,7 @@ import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.concurrent.locks.Lock;
+import javax.security.auth.Subject;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
@@ -139,6 +143,8 @@ public class UserManagerWeb implements G
private final Logger logger = LoggerFactory.getLogger(getClass());
private FileServer fileServer;
+ private final static String ALL_PERMISSION_ENTRY_STRING = "(java.security.AllPermission \"\" \"\")";
+
protected void activate(final ComponentContext context) throws IOException,
URISyntaxException {
Bundle bundle = context.getBundleContext().getBundle();
@@ -197,6 +203,7 @@ public class UserManagerWeb implements G
@GET
public Response userMgmtHome(@Context UriInfo uriInfo) {
+ AccessController.checkPermission(new UserManagerAccessPermission());
if (uriInfo.getAbsolutePath().toString().endsWith("/")) {
return RedirectUtil.createSeeOtherResponse("list-users", uriInfo);
}
@@ -208,6 +215,7 @@ public class UserManagerWeb implements G
@Path("list-users")
public GraphNode listUsers(@QueryParam(value = "from") Integer from,
@QueryParam(value = "to") Integer to, @Context UriInfo uriInfo) {
+ AccessController.checkPermission(new UserManagerAccessPermission());
TrailingSlash.enforceNotPresent(uriInfo);
MGraph resultGraph = new SimpleMGraph();
@@ -280,7 +288,7 @@ public class UserManagerWeb implements G
@GET
@Path("add-user")
public GraphNode addUser(@Context UriInfo uriInfo) {
-
+ AccessController.checkPermission(new UserManagerAccessPermission());
TrailingSlash.enforceNotPresent(uriInfo);
MGraph resultGraph = new SimpleMGraph();
@@ -315,17 +323,29 @@ public class UserManagerWeb implements G
@Consumes("multipart/form")
@Path("add-user")
public Response addUser(MultiPartBody form, @Context UriInfo uriInfo) {
-
+ AccessController.checkPermission(new UserManagerAccessPermission());
String userName = form.getTextParameterValues("userName")[0];
String email = form.getTextParameterValues("email")[0];
String pathPrefix = form.getTextParameterValues("pathPrefix")[0];
String psw = form.getTextParameterValues("psw")[0];
String[] userRole = form.getTextParameterValues("userRoles");
- List<String> userRoles = new ArrayList<String>();
- for (int i = 0; i < userRole.length; i++) {
- userRoles.add(userRole[i]);
+ List<String> userRoles = Arrays.asList(userRole);
+
+ String currentUserName = getCurrentUserName();
+ //Checks if logged in user has all permissions.
+ Set<String> availablePermissionEntries = retrieveAllPermissionEntriesFromUser(currentUserName);
+ boolean currentUserHasAllPermission = availablePermissionEntries.contains(ALL_PERMISSION_ENTRY_STRING);
+
+ Set<String> currentUserRoleTitles = retrieveRoleTitlesOfUser(getCurrentUserName());
+ //Current user is not associated with the following roles.
+ Set<String> remainingRoles = new HashSet<String>(userRoles);
+ remainingRoles.removeAll(currentUserRoleTitles);
+ if(!currentUserHasAllPermission && remainingRoles.size() > 0) {
+ return Response.status(Status.FORBIDDEN).entity("You don't have the "
+ + "permissions to add these roles to a user.").build();
}
+
StringWriter writer = new StringWriter();
checkParamLength(writer, userName, "Username");
checkQuote(writer, userName, "Username");
@@ -356,6 +376,25 @@ public class UserManagerWeb implements G
return RedirectUtil.createSeeOtherResponse("list-users", uriInfo);
}
+ private Set<String> retrieveRoleTitlesOfUser(String userName) {
+ NonLiteral user = userManager.getUserByName(userName);
+ Iterator<NonLiteral> roles = userManager.getRolesOfUser(user);
+ Set<String> userRoleTitles = new HashSet<String>();
+ Lock lock = systemGraph.getLock().readLock();
+ lock.lock();
+ try {
+ while(roles.hasNext()) {
+ Iterator<Triple> titles = systemGraph.filter(roles.next(), DC.title, null);
+ if(titles.hasNext()) {
+ userRoleTitles.add(((Literal) titles.next().getObject()).getLexicalForm());
+ }
+ }
+ } finally {
+ lock.unlock();
+ }
+ return userRoleTitles;
+ }
+
private void saveCustomUserInformation(LockableMGraph contentGraph,
String userName, List<String> roles, MultiPartBody form) {
NonLiteral user = getCustomUser(contentGraph, userName);
@@ -418,6 +457,7 @@ public class UserManagerWeb implements G
@QueryParam(value = "roles") String roles,
@QueryParam(value = "user") String userName,
@Context UriInfo uriInfo) throws ParseException {
+ AccessController.checkPermission(new UserManagerAccessPermission());
LockableMGraph contentGraph = (LockableMGraph) cgProvider.getContentGraph();
MGraph resultGraph = new SimpleMGraph();
NonLiteral node = new BNode();
@@ -500,6 +540,7 @@ public class UserManagerWeb implements G
public Response deleteUser(@FormParam(value = "userName") String userName,
@Context UriInfo uriInfo) {
+ AccessController.checkPermission(new UserManagerAccessPermission());
checkUserParam(userName);
userManager.deleteUser(userName);
LockableMGraph contentGraph = (LockableMGraph) cgProvider.getContentGraph();
@@ -539,6 +580,8 @@ public class UserManagerWeb implements G
@QueryParam(value = "userName") String userName,
@Context UriInfo uriInfo) {
+ AccessController.checkPermission(new UserManagerAccessPermission());
+ AccessController.checkPermission(new PermissionManagerAccessPermission());
TrailingSlash.enforceNotPresent(uriInfo);
MGraph resultGraph = new SimpleMGraph();
@@ -588,13 +631,92 @@ public class UserManagerWeb implements G
@FormParam(value = "name") String userName,
@FormParam(value = "permEntries") List<String> permissionEntries,
@Context UriInfo uriInfo) {
+ AccessController.checkPermission(new UserManagerAccessPermission());
+ AccessController.checkPermission(new PermissionManagerAccessPermission());
checkUserParam(userName);
+
+ //Retrieves permissions of the current user.
+ Set<String> availablePermissionEntries = retrieveAllPermissionEntriesFromUser(getCurrentUserName());
+ boolean currentUserHasAllPermission = availablePermissionEntries.contains(ALL_PERMISSION_ENTRY_STRING);
+
+ //Retrieves the current permissions of the specified user
+ Iterator<NonLiteral> permissions = userManager.getPermissionsOfUser(userManager.getUserByName(userName));
+ Set<String> oldPermissionEntries = new HashSet<String>();
+ retrievePermissionEntries(oldPermissionEntries, permissions);
+
+ //Permission, which are already assigned to the specified user.
+ Set<String> addedEntries = new HashSet<String>(oldPermissionEntries);
+ addedEntries.retainAll(permissionEntries);
+ availablePermissionEntries.addAll(addedEntries);
+ //Permissions, which should be removed.
+ Set<String> removedEntries = new HashSet<String>(oldPermissionEntries);
+ removedEntries.removeAll(permissionEntries);
+ boolean containsRemovedEntries = availablePermissionEntries.containsAll(removedEntries);
+ if(!currentUserHasAllPermission && (!availablePermissionEntries.containsAll(
+ permissionEntries) || !containsRemovedEntries)) {
+ return Response.status(Status.FORBIDDEN).entity("You are not allowed to assign "
+ + "the specified permissions to the user " + userName + ".").build();
+ }
+
userManager.deleteAllPermissionsOfUser(userName);
userManager.assignPermissionsToUser(userName, permissionEntries);
return Response.status(Status.CREATED).build();
}
+ private String getCurrentUserName() {
+ final AccessControlContext userContext = AccessController.getContext();
+ Subject subject = AccessController.doPrivileged(
+ new PrivilegedAction<Subject> (){
+ @Override
+ public Subject run() {
+ return Subject.getSubject(userContext);
+ }
+ });
+ if (subject == null) {
+ return null;
+ }
+ Iterator<Principal> iter = subject.getPrincipals().iterator();
+ String name = null;
+
+ if (iter.hasNext()) {
+ name = iter.next().getName();
+ }
+ return name;
+ }
+
+ private Set<String> retrieveAllPermissionEntriesFromUser(String userName) {
+ Set<String> permissionEntries = new HashSet<String>();
+ NonLiteral currentUser = (NonLiteral) userManager.getUserInSystemGraph(userName).getNode();
+ Iterator<NonLiteral> roles = userManager.getRolesOfUser(currentUser);
+ while(roles.hasNext()) {
+ Iterator<NonLiteral> permissions = userManager.getPermissionsOfRole(roles.next());
+ retrievePermissionEntries(permissionEntries, permissions);
+ }
+
+ Iterator<NonLiteral> permissions = userManager.getPermissionsOfUser(currentUser);
+ retrievePermissionEntries(permissionEntries, permissions);
+ return permissionEntries;
+ }
+
+ private void retrievePermissionEntries(Set<String> permissionEntries, Iterator<NonLiteral> permissions) {
+ while(permissions.hasNext()) {
+ NonLiteral permission = permissions.next();
+ Lock lock = systemGraph.getLock().readLock();
+ lock.lock();
+ try {
+ Iterator<Triple> triples = systemGraph.filter(permission, PERMISSION.javaPermissionEntry, null);
+ if(triples.hasNext()) {
+ Literal entry = (Literal) triples.next().getObject();
+ permissionEntries.add(entry.getLexicalForm());
+ }
+ } finally {
+ lock.unlock();
+ }
+ }
+ }
+
+
/**
* add user permissionEntries
*/
@@ -604,7 +726,19 @@ public class UserManagerWeb implements G
@FormParam(value = "name") String userName,
@FormParam(value = "permEntries") List<String> permissionEntries,
@Context UriInfo uriInfo) {
+
+ AccessController.checkPermission(new UserManagerAccessPermission());
+ AccessController.checkPermission(new PermissionManagerAccessPermission());
checkUserParam(userName);
+
+ //Retrieves permissions from current user.
+ Set<String> availablePermissionEntries = retrieveAllPermissionEntriesFromUser(getCurrentUserName());
+ boolean currentUserHasAllPermission = availablePermissionEntries.contains(ALL_PERMISSION_ENTRY_STRING);
+ if(!currentUserHasAllPermission && !availablePermissionEntries.containsAll(permissionEntries)) {
+ return Response.status(Status.FORBIDDEN).entity("You are not allowed to assign "
+ + "the specified permissions to the user " + userName + ".").build();
+ }
+
userManager.assignPermissionsToUser(userName, permissionEntries);
try {
return RedirectUtil.createSeeOtherResponse(
@@ -624,7 +758,18 @@ public class UserManagerWeb implements G
@FormParam(value = "name") String userName,
@FormParam(value = "permEntries") List<String> permissionEntries,
@Context UriInfo uriInfo) {
+
+ AccessController.checkPermission(new UserManagerAccessPermission());
+ AccessController.checkPermission(new PermissionManagerAccessPermission());
checkUserParam(userName);
+
+ Set<String> availablePermissionEntries = retrieveAllPermissionEntriesFromUser(getCurrentUserName());
+ boolean currentUserHasAllPermission = availablePermissionEntries.contains(ALL_PERMISSION_ENTRY_STRING);
+ if(!currentUserHasAllPermission && !availablePermissionEntries.containsAll(permissionEntries)) {
+ return Response.status(Status.FORBIDDEN).entity("You are not allowed to delete "
+ + "the specified permissions from the user " + userName + ". Refresh the page to get the correct permissions.").build();
+ }
+
userManager.deletePermissionsOfUser(userName, permissionEntries);
try {
return RedirectUtil.createSeeOtherResponse(
@@ -640,6 +785,7 @@ public class UserManagerWeb implements G
public GraphNode updateUser(
@QueryParam(value = "userName") String userName,
@Context UriInfo uriInfo) {
+ AccessController.checkPermission(new UserManagerAccessPermission());
TrailingSlash.enforceNotPresent(uriInfo);
NonLiteral user = userManager.getUserByName(userName);
@@ -701,16 +847,43 @@ public class UserManagerWeb implements G
public Response updateUser(MultiPartBody form, @Context UriInfo uriInfo)
throws UnsupportedEncodingException {
+ AccessController.checkPermission(new UserManagerAccessPermission());
String userName = getTextParamValueOfForm(form, 0, "userName");
String pathPrefix = getTextParamValueOfForm(form, 0, "pathPrefix");
String[] userRole = form.getTextParameterValues("userRoles");
List<String> userRoleList = Arrays.asList(userRole);
String email = getTextParamValueOfForm(form, 0, "email");
+
if (email != null) {
email = email.replaceAll("mailto:", "");
}
NonLiteral user = (NonLiteral) userManager.getUserInSystemGraph(userName).getNode();
if (user != null) {
+
+ //Check if the currently logged in user has the all permissions
+ String currentUserName = getCurrentUserName();
+ Set<String> availablePermissionEntries = retrieveAllPermissionEntriesFromUser(currentUserName);
+ boolean currentUserHasAllPermission = availablePermissionEntries.contains(ALL_PERMISSION_ENTRY_STRING);
+
+ //Retrieve all currently assigned roles of the specified user
+ Set<String> oldRoles = retrieveRoleTitlesOfUser(userName);
+ Set<String> currentUserRoleTitles = retrieveRoleTitlesOfUser(getCurrentUserName());
+
+ //Roles, which are already assigned
+ Set<String> alreadyAssignedRoles = new HashSet<String>(oldRoles);
+ alreadyAssignedRoles.retainAll(userRoleList);
+ currentUserRoleTitles.addAll(alreadyAssignedRoles);
+
+ //Roles, which are currently assigned but removed after the update.
+ Set<String> removedRoles = new HashSet<String>(oldRoles);
+ removedRoles.removeAll(userRoleList);
+ boolean containsRemovedRoles = currentUserRoleTitles.containsAll(removedRoles);
+
+ if(!currentUserHasAllPermission && (!currentUserRoleTitles.containsAll(userRoleList)
+ || !containsRemovedRoles)) {
+ return Response.status(Status.FORBIDDEN).entity("You don't have the "
+ + "permission to assign these permissions to the user.").build();
+ }
userManager.updateUser(userName, email, null, userRoleList,
pathPrefix);
LockableMGraph contentGraph = (LockableMGraph) cgProvider.getContentGraph();
@@ -730,6 +903,7 @@ public class UserManagerWeb implements G
@GET
@Path("list-roles")
public GraphNode listRoles(@Context UriInfo uriInfo) {
+ AccessController.checkPermission(new UserManagerAccessPermission());
TrailingSlash.enforceNotPresent(uriInfo);
MGraph resultGraph = new SimpleMGraph();
@@ -761,6 +935,7 @@ public class UserManagerWeb implements G
public Response addRole(@FormParam(value = "roleTitle") String title,
@Context UriInfo uriInfo) {
+ AccessController.checkPermission(new UserManagerAccessPermission());
StringWriter writer = new StringWriter();
checkParamLength(writer, title, "Role title");
checkQuote(writer, title, "Role title");
@@ -788,6 +963,7 @@ public class UserManagerWeb implements G
public Response deleteRole(@FormParam(value = "roleTitle") String title,
@Context UriInfo uriInfo) {
+ AccessController.checkPermission(new UserManagerAccessPermission());
checkRoleParam(title);
userManager.deleteRole(title);
return RedirectUtil.createSeeOtherResponse("list-roles", uriInfo);
@@ -812,6 +988,9 @@ public class UserManagerWeb implements G
public GraphNode manageRolePermissions(
@QueryParam(value = "roleTitle") String title,
@Context UriInfo uriInfo) {
+
+ AccessController.checkPermission(new UserManagerAccessPermission());
+ AccessController.checkPermission(new PermissionManagerAccessPermission());
TrailingSlash.enforceNotPresent(uriInfo);
MGraph resultGraph = new SimpleMGraph();
@@ -858,7 +1037,17 @@ public class UserManagerWeb implements G
@FormParam(value = "permEntries") List<String> permissionEntries,
@Context UriInfo uriInfo) {
+ AccessController.checkPermission(new UserManagerAccessPermission());
+ AccessController.checkPermission(new PermissionManagerAccessPermission());
checkRoleParam(title);
+ //Retrieves permissions from current user
+ Set<String> availablePermissionEntries = retrieveAllPermissionEntriesFromUser(getCurrentUserName());
+ boolean currentUserHasAllPermission = availablePermissionEntries.contains(ALL_PERMISSION_ENTRY_STRING);
+ if(!currentUserHasAllPermission && !availablePermissionEntries.containsAll(permissionEntries)) {
+ return Response.status(Status.FORBIDDEN).entity("You are not allowed to assign "
+ + "the specified permissions to the role " + title + ".").build();
+ }
+
userManager.assignPermissionsToRole(title, permissionEntries);
try {
return RedirectUtil.createSeeOtherResponse(
@@ -879,7 +1068,17 @@ public class UserManagerWeb implements G
@FormParam(value = "permEntries") List<String> permissionEntries,
@Context UriInfo uriInfo) {
+ AccessController.checkPermission(new UserManagerAccessPermission());
+ AccessController.checkPermission(new PermissionManagerAccessPermission());
checkRoleParam(title);
+
+ Set<String> availablePermissionEntries = retrieveAllPermissionEntriesFromUser(getCurrentUserName());
+ boolean currentUserHasAllPermission = availablePermissionEntries.contains(ALL_PERMISSION_ENTRY_STRING);
+ if(!currentUserHasAllPermission && !availablePermissionEntries.containsAll(permissionEntries)) {
+ return Response.status(Status.FORBIDDEN).entity("You are not allowed to delete "
+ + "the specified permissions from the role " + title + ".").build();
+ }
+
userManager.deletePermissionsOfRole(title, permissionEntries);
try {
return RedirectUtil.createSeeOtherResponse(
@@ -900,7 +1099,30 @@ public class UserManagerWeb implements G
@FormParam(value = "permEntries") List<String> permissionEntries,
@Context UriInfo uriInfo) {
+ AccessController.checkPermission(new UserManagerAccessPermission());
+ AccessController.checkPermission(new PermissionManagerAccessPermission());
checkRoleParam(title);
+
+ Set<String> availablePermissionEntries = retrieveAllPermissionEntriesFromUser(getCurrentUserName());
+ boolean currentUserHasAllPermission = availablePermissionEntries.contains(ALL_PERMISSION_ENTRY_STRING);
+ Iterator<NonLiteral> permissions = userManager.getPermissionsOfRole(
+ userManager.getRoleByTitle(title));
+
+ Set<String> oldPermissionEntries = new HashSet<String>();
+ retrievePermissionEntries(oldPermissionEntries, permissions);
+
+ Set<String> addEntries = new HashSet<String>(oldPermissionEntries);
+ addEntries.retainAll(permissionEntries);
+ availablePermissionEntries.addAll(addEntries);
+ Set<String> removedEntries = new HashSet<String>(oldPermissionEntries);
+ removedEntries.removeAll(permissionEntries);
+ boolean containsRemovedEntries = availablePermissionEntries.containsAll(removedEntries);
+ if(!currentUserHasAllPermission && (!availablePermissionEntries.containsAll(
+ permissionEntries) || !containsRemovedEntries)) {
+ return Response.status(Status.FORBIDDEN).entity("You are not allowed to assign "
+ + "the specified permissions to the role " + title + ".").build();
+ }
+
userManager.deleteAllPermissionsOfRole(title);
userManager.assignPermissionsToRole(title, permissionEntries);
@@ -913,6 +1135,8 @@ public class UserManagerWeb implements G
@Path("add-property")
public GraphNode getAddSinglePropertyPage(
@QueryParam(value = "roleTitle") String role) {
+
+ AccessController.checkPermission(new UserManagerAccessPermission());
MGraph resultGraph = new SimpleMGraph();
NonLiteral node = new BNode();
resultGraph.add(new TripleImpl(node, RDF.type,
@@ -934,6 +1158,7 @@ public class UserManagerWeb implements G
@FormParam(value = "property") String property,
@FormParam(value = "length") int length, @Context UriInfo uriInfo) {
UriRef propertyUri = new UriRef(property);
+ AccessController.checkPermission(new UserManagerAccessPermission());
customPropertyManager.addSingleCustomField(PERMISSION.Role, title,
label, propertyUri, length, 1);
return RedirectUtil.createSeeOtherResponse("manage-custom-properties?role=" + title, uriInfo);
@@ -949,6 +1174,8 @@ public class UserManagerWeb implements G
@FormParam(value = "multiselect") String multiselect,
@FormParam(value = "selectablevalues") String selectablevalues,
@Context UriInfo uriInfo) {
+
+ AccessController.checkPermission(new UserManagerAccessPermission());
UriRef propertyUri = new UriRef(property);
customPropertyManager.addMultipleCustomField(PERMISSION.Role, title,
label, propertyUri, multiselect, selectablevalues, 1);
@@ -962,6 +1189,8 @@ public class UserManagerWeb implements G
@FormParam(value = "role") String role,
@FormParam(value = "property") String property,
@Context UriInfo uriInfo) {
+
+ AccessController.checkPermission(new UserManagerAccessPermission());
UriRef propertyUri = new UriRef(property);
if (customPropertyManager.deleteCustomField(PERMISSION.Role, role,
propertyUri)) {
@@ -977,6 +1206,8 @@ public class UserManagerWeb implements G
public GraphNode manageCustomProperties(
@QueryParam(value = "role") String role, @Context UriInfo uriInfo) {
TrailingSlash.enforceNotPresent(uriInfo);
+
+ AccessController.checkPermission(new UserManagerAccessPermission());
MGraph contentGraph = cgProvider.getContentGraph();
MGraph resultGraph = new SimpleMGraph();
NonLiteral propertyManagementPage = new BNode();
@@ -1017,6 +1248,7 @@ public class UserManagerWeb implements G
try {
AccessController.checkPermission(new TcPermission(
SystemConfig.SYSTEM_GRAPH_URI.getUnicodeString(), "readwrite"));
+ AccessController.checkPermission(new UserManagerAccessPermission());
} catch (AccessControlException e) {
return items;
}
Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/resources/org/apache/clerezza/platform/usermanager/webinterface/add-user-template.xhtml
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/resources/org/apache/clerezza/platform/usermanager/webinterface/add-user-template.xhtml?rev=1059856&r1=1059855&r2=1059856&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/resources/org/apache/clerezza/platform/usermanager/webinterface/add-user-template.xhtml (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/resources/org/apache/clerezza/platform/usermanager/webinterface/add-user-template.xhtml Mon Jan 17 10:39:09 2011
@@ -1,4 +1,8 @@
+def permission(s: Any) = new UriRef("http://clerezza.org/2008/10/permission#" + s)
def umr(s: Any) = new UriRef("http://clerezza.org/2009/05/usermanager#" + s)
+def platform(s: Any) = new UriRef("http://clerezza.org/2009/08/platform#" + s)
+def dct(s: Any) = new UriRef("http://purl.org/dc/terms/" + s)
+def sioc(s: Any) = new UriRef("http://rdfs.org/sioc/ns#" + s)
def dc(s: Any) = new UriRef("http://purl.org/dc/elements/1.1/" + s)
resultDocModifier.addScriptReference("/scripts/alert-message.js");
@@ -14,6 +18,22 @@ resultDocModifier.addNodes2Elem("tx-modu
resultDocModifier.addNodes2Elem("tx-contextual-buttons-ol", <li><a id="editButton" class="tx-button tx-button-generic" href="list-users">Back to Overview</a></li>);
resultDocModifier.addNodes2Elem("tx-contextual-buttons-ol", <li><a id="addButton" class="tx-button tx-button-create" href="javascript:saveUser()">Save</a></li>);
+
+var roleTitles = "";
+var allAvailablePermissions = "";
+for (perm <- (context/platform("user")/permission("hasPermission"))) {
+ allAvailablePermissions = allAvailablePermissions + "," + (perm/permission("javaPermissionEntry")*)
+}
+
+for(role <- (context/platform("user")/sioc("has_function"))) {
+ roleTitles = roleTitles + "," + (role/dc("title")*)
+ for (perm <- (role/permission("hasPermission"))) {
+ allAvailablePermissions = allAvailablePermissions + "," + (perm/permission("javaPermissionEntry")*)
+ }
+}
+
+val userHasAllPermissions = allAvailablePermissions.contains("(java.security.AllPermission \"\" \"\")");
+
<div id="tx-content">
<script type="text/javascript">
@@ -68,7 +88,10 @@ resultDocModifier.addNodes2Elem("tx-cont
<span class="tx-item">
<select name="userRoles" id="userRoles" size="3" multiple="multiple">
{for (role <- (res/umr("role"))) yield {
- <option>{role/dc("title")*}</option>
+ val title = (role/dc("title")*);
+ ifx(userHasAllPermissions || roleTitles.contains("," + title)) {
+ <option>{title}</option>
+ }
}
}
</select>
Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/resources/org/apache/clerezza/platform/usermanager/webinterface/role-permission-template.xhtml
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/resources/org/apache/clerezza/platform/usermanager/webinterface/role-permission-template.xhtml?rev=1059856&r1=1059855&r2=1059856&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/resources/org/apache/clerezza/platform/usermanager/webinterface/role-permission-template.xhtml (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/resources/org/apache/clerezza/platform/usermanager/webinterface/role-permission-template.xhtml Mon Jan 17 10:39:09 2011
@@ -2,6 +2,15 @@ def dc(s: Any) = new UriRef("http://purl
def permission(s: Any) = new UriRef("http://clerezza.org/2008/10/permission#" + s)
def umr(s: Any) = new UriRef("http://clerezza.org/2009/05/usermanager#" + s)
def dct(s: Any) = new UriRef("http://purl.org/dc/terms/" + s)
+def platform(s: Any) = new UriRef("http://clerezza.org/2009/08/platform#" + s)
+def sioc(s: Any) = new UriRef("http://rdfs.org/sioc/ns#" + s)
+
+resultDocModifier.addStyleSheet("/yui/2/container/assets/container-core.css");
+
+resultDocModifier.addScriptReference("/yui/2/yahoo-dom-event/yahoo-dom-event.js");
+resultDocModifier.addScriptReference("/yui/2/element/element-min.js");
+resultDocModifier.addScriptReference("/yui/2/container/container-min.js");
+resultDocModifier.addScriptReference("/yui/2/resize/resize-min.js")
resultDocModifier.addScriptReference("/scripts/alert-message.js");
resultDocModifier.addScriptReference("/scripts/ajax-options.js");
@@ -16,6 +25,18 @@ resultDocModifier.addNodes2Elem("tx-modu
resultDocModifier.addNodes2Elem("tx-contextual-buttons-ol", <li><a id="editButton" class="tx-button tx-button-generic" href="list-roles">Back to Overview</a></li>);
resultDocModifier.addNodes2Elem("tx-contextual-buttons-ol", <li><a id="saveButton" class="tx-button tx-button-create tx-inactive" href="#">Save Permissions</a></li>);
+var allAvailablePermissions = "";
+for (perm <- (context/platform("user")/permission("hasPermission"))) {
+ allAvailablePermissions = allAvailablePermissions + "," + (perm/permission("javaPermissionEntry")*)
+}
+
+for(role <- (context/platform("user")/sioc("has_function"))) {
+ for (perm <- (role/permission("hasPermission"))) {
+ allAvailablePermissions = allAvailablePermissions + "," + (perm/permission("javaPermissionEntry")*)
+ }
+}
+val userHasAllPermissions = allAvailablePermissions.contains("(java.security.AllPermission \"\" \"\")");
+
var allRolePermissions = "";
for (perm <- (res/umr("role")/permission("hasPermission"))) {
allRolePermissions = allRolePermissions + "," + (perm/permission("javaPermissionEntry")*)
@@ -44,9 +65,18 @@ for (perm <- (res/umr("role")/permission
<td>{
if(allRolePermissions.contains(javaPermission)) {
allRolePermissions = allRolePermissions.replace("," + javaPermission, "")
- <input type="checkbox" checked="checked" name="permEntries" value={javaPermission} />
+ if(userHasAllPermissions || allAvailablePermissions.contains(javaPermission)) {
+ <input type="checkbox" checked="checked" name="permEntries" value={javaPermission} />
+ } else {
+ <input type="checkbox" checked="checked" disabled="disabled" value={javaPermission} />
+ <input type="hidden" name="permEntries" value={javaPermission} />
+ }
} else {
- <input type="checkbox" name="permEntries" value={javaPermission} />
+ if(userHasAllPermissions || allAvailablePermissions.contains(javaPermission)) {
+ <input type="checkbox" name="permEntries" value={javaPermission} />
+ } else {
+ <input type="checkbox" disabled="disabled" value={javaPermission} />
+ }
}
}
@@ -62,12 +92,23 @@ for (perm <- (res/umr("role")/permission
val otherRolePermissions = allRolePermissions.split(",")
for(perm <- otherRolePermissions) yield {
ifx(!perm.equals("")) {
+ if(userHasAllPermissions || allAvailablePermissions.contains(perm)) {
<tr>
<td><input type="checkbox" checked="checked" name="permEntries" value={perm} /></td>
<td><span style="line-height: 1.5em;"></span></td>
<td><span style="line-height: 1.5em;"></span></td>
<td><span style="line-height: 1.5em;">{perm}</span></td>
</tr>
+ } else {
+ <tr>
+ <td><input type="checkbox" checked="checked" disabled="disabled" value={perm} />
+ <input type="hidden" name="permEntries" value={perm} />
+ </td>
+ <td><span style="line-height: 1.5em;"></span></td>
+ <td><span style="line-height: 1.5em;"></span></td>
+ <td><span style="line-height: 1.5em;">{perm}</span></td>
+ </tr>
+ }
}
}
}
Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/resources/org/apache/clerezza/platform/usermanager/webinterface/update-user-template.xhtml
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/resources/org/apache/clerezza/platform/usermanager/webinterface/update-user-template.xhtml?rev=1059856&r1=1059855&r2=1059856&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/resources/org/apache/clerezza/platform/usermanager/webinterface/update-user-template.xhtml (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/resources/org/apache/clerezza/platform/usermanager/webinterface/update-user-template.xhtml Mon Jan 17 10:39:09 2011
@@ -19,20 +19,31 @@ resultDocModifier.addNodes2Elem("tx-modu
resultDocModifier.addNodes2Elem("tx-contextual-buttons-ol", <li><a id="deleteButton" class="tx-button tx-button-generic" href="list-users">Back to Overview</a></li>);
resultDocModifier.addNodes2Elem("tx-contextual-buttons-ol", <li><a id="addButton" class="tx-button tx-button-create" href="javascript:saveUser()">Save</a></li>);
+var roleTitles = "";
+var allAvailablePermissions = "";
+for (perm <- (context/platform("user")/permission("hasPermission"))) {
+ allAvailablePermissions = allAvailablePermissions + "," + (perm/permission("javaPermissionEntry")*)
+}
+
+for(role <- (context/platform("user")/sioc("has_function"))) {
+ roleTitles = roleTitles + "," + (role/dc("title")*)
+ for (perm <- (role/permission("hasPermission"))) {
+ allAvailablePermissions = allAvailablePermissions + "," + (perm/permission("javaPermissionEntry")*)
+ }
+}
+
+var selectedTitles = "";
+for (funct <- (res/umr("user")/sioc("has_function"))) yield {
+ selectedTitles = selectedTitles + "," + (funct/dc("title")*);
+}
+
+
+val userHasAllPermissions = allAvailablePermissions.contains("(java.security.AllPermission \"\" \"\")");
+
<div id="tx-content">
<script type="text/javascript">
- var userRoles = new Array();
- {
- var titles = "";
- for (user <- (res/umr("user"))) yield {
- for (funct <- (user/sioc("has_function"))) yield {
- "userRoles.push('" + {funct/dc("title")*} +"');"
- }
- }
- }
$(document).ready(function() {{
- $('#userRoles').val(userRoles);
refreshCustomInformation({"'" + (res/umr("user")/platform("userName")*) + "'"});
@@ -77,10 +88,27 @@ resultDocModifier.addNodes2Elem("tx-cont
<span class="tx-item">
<select name="userRoles" id="userRoles" size="3" multiple="multiple">
{for (role <- (res/umr("role"))) yield {
- <option value={role/dc("title")*}>{role/dc("title")*}</option>
+ val title = (role/dc("title")*);
+ ifx(userHasAllPermissions || roleTitles.contains("," + title)) {
+
+ if(selectedTitles.contains("," + title)) {
+ <option value={title} selected="selected">{title}</option>
+ } else {
+ <option value={title}>{title}</option>
+ }
+ }
}
}
</select>
+ <div>
+ {for (role <- (res/umr("role"))) yield {
+ val title = (role/dc("title")*);
+ ifx(selectedTitles.contains("," + title) && !userHasAllPermissions && !roleTitles.contains("," + title)) {
+ <input type="hidden" value={title} name="userRoles"/>
+ }
+ }
+ }
+ </div>
</span>
</li>
<div id="custominfos"></div>
Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/resources/org/apache/clerezza/platform/usermanager/webinterface/user-permission-template.xhtml
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/resources/org/apache/clerezza/platform/usermanager/webinterface/user-permission-template.xhtml?rev=1059856&r1=1059855&r2=1059856&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/resources/org/apache/clerezza/platform/usermanager/webinterface/user-permission-template.xhtml (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform.usermanager.webinterface/src/main/resources/org/apache/clerezza/platform/usermanager/webinterface/user-permission-template.xhtml Mon Jan 17 10:39:09 2011
@@ -4,6 +4,13 @@ def platform(s: Any) = new UriRef("http:
def dct(s: Any) = new UriRef("http://purl.org/dc/terms/" + s)
def sioc(s: Any) = new UriRef("http://rdfs.org/sioc/ns#" + s)
+resultDocModifier.addStyleSheet("/yui/2/container/assets/container-core.css");
+
+resultDocModifier.addScriptReference("/yui/2/yahoo-dom-event/yahoo-dom-event.js");
+resultDocModifier.addScriptReference("/yui/2/element/element-min.js");
+resultDocModifier.addScriptReference("/yui/2/container/container-min.js");
+resultDocModifier.addScriptReference("/yui/2/resize/resize-min.js")
+
resultDocModifier.addScriptReference("/scripts/alert-message.js");
resultDocModifier.addScriptReference("/scripts/ajax-options.js");
resultDocModifier.addScriptReference("js/usermanager-user-permission.js");
@@ -17,6 +24,19 @@ resultDocModifier.addNodes2Elem("tx-modu
resultDocModifier.addNodes2Elem("tx-contextual-buttons-ol", <li><a id="backButton" class="tx-button tx-button-generic" href="list-users">Back to Overview</a></li>);
resultDocModifier.addNodes2Elem("tx-contextual-buttons-ol", <li><a id="saveButton" class="tx-button tx-button-create tx-inactive" href="#">Save Permissions</a></li>);
+var allAvailablePermissions = "";
+for (perm <- (context/platform("user")/permission("hasPermission"))) {
+ allAvailablePermissions = allAvailablePermissions + "," + (perm/permission("javaPermissionEntry")*)
+}
+
+for(role <- (context/platform("user")/sioc("has_function"))) {
+ for (perm <- (role/permission("hasPermission"))) {
+ allAvailablePermissions = allAvailablePermissions + "," + (perm/permission("javaPermissionEntry")*)
+ }
+}
+
+val userHasAllPermissions = allAvailablePermissions.contains("(java.security.AllPermission \"\" \"\")");
+
var allUserPermissions = "";
for (perm <- (res/umr("user")/permission("hasPermission"))) {
allUserPermissions = allUserPermissions + "," + (perm/permission("javaPermissionEntry")*)
@@ -57,9 +77,18 @@ for (role <- (res/umr("user")/sioc("has_
} else {
if(allUserPermissions.contains(javaPermission)) {
allUserPermissions = allUserPermissions.replace("," + javaPermission, "")
- <input type="checkbox" checked="checked" name="permEntries" value={javaPermission} />
+ if(userHasAllPermissions || allAvailablePermissions.contains(javaPermission)) {
+ <input type="checkbox" checked="checked" name="permEntries" value={javaPermission} />
+ } else {
+ <input type="checkbox" checked="checked" disabled="disabled" value={javaPermission} />
+ <input type="hidden" name="permEntries" value={javaPermission} />
+ }
} else {
- <input type="checkbox" name="permEntries" value={javaPermission} />
+ if(userHasAllPermissions || allAvailablePermissions.contains(javaPermission)) {
+ <input type="checkbox" name="permEntries" value={javaPermission} />
+ } else {
+ <input type="checkbox" disabled="disabled" value={javaPermission} />
+ }
}
}
}
@@ -75,12 +104,23 @@ for (role <- (res/umr("user")/sioc("has_
val otherUserPermissions = allUserPermissions.split(",")
for(perm <- otherUserPermissions) yield {
ifx(!perm.equals("")) {
+ if(userHasAllPermissions || allAvailablePermissions.contains(perm)) {
<tr>
<td><input type="checkbox" checked="checked" name="permEntries" value={perm} /></td>
<td><span style="line-height: 1.5em;"></span></td>
<td><span style="line-height: 1.5em;"></span></td>
<td><span style="line-height: 1.5em;">{perm}</span></td>
</tr>
+ } else {
+ <tr>
+ <td><input type="checkbox" checked="checked" disabled="disabled" value={perm} />
+ <input type="hidden" name="permEntries" value={perm} />
+ </td>
+ <td><span style="line-height: 1.5em;"></span></td>
+ <td><span style="line-height: 1.5em;"></span></td>
+ <td><span style="line-height: 1.5em;">{perm}</span></td>
+ </tr>
+ }
}
}
}
@@ -89,7 +129,7 @@ for (role <- (res/umr("user")/sioc("has_
for(perm <- otherRolePermissions) yield {
ifx(!perm.equals("")) {
<tr>
- <td><input type="checkbox" checked="checked" disabled="disabled" name="permEntries" value={perm} /></td>
+ <td><input type="checkbox" checked="checked" disabled="disabled" value={perm} /></td>
<td><span style="line-height: 1.5em;"></span></td>
<td><span style="line-height: 1.5em;"></span></td>
<td><span style="line-height: 1.5em;">{perm}</span></td>