modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerBean.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
New commits: commit af0936f97b11698157731942134e181db6e11af6 Author: Jirka Kremser jkremser@redhat.com Date: Fri Feb 1 14:02:40 2013 +0100
[BZ 858282 - Globally uncaught exception when creating duplicate role] RoleManager now explicitly checks whether the role with the same name already exists (without trying to create the role first and then catching the exception like it was done before)
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerBean.java index 3abb7df..b59ca8b 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/authz/RoleManagerBean.java @@ -28,6 +28,7 @@ import java.util.Set; import javax.ejb.EJB; import javax.ejb.Stateless; import javax.interceptor.ExcludeDefaultInterceptors; +import javax.persistence.EntityExistsException; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.Query; @@ -136,7 +137,13 @@ public class RoleManagerBean implements RoleManagerLocal, RoleManagerRemote { */ @RequiredPermission(Permission.MANAGE_SECURITY) public Role createRole(Subject whoami, Role newRole) { - // TODO (ips): Do we want to enforce uniqueness of the Role name? + // Make sure there's not an existing role with the same name. + RoleCriteria criteria = new RoleCriteria(); + criteria.addFilterName(newRole.getName()); + PageList<Role> roles = findRolesByCriteria(whoami, criteria); + if (!roles.isEmpty()) { + throw new EntityExistsException("A user role [" + newRole.getName() + "] already exists."); + }
Boolean isSystemRole = newRole.getFsystem(); if (isSystemRole) {
rhq-commits@lists.fedorahosted.org