added controller for editing roles and permissions
This commit is contained in:
@ -22,4 +22,8 @@ public class AccountException extends Exception {
|
|||||||
public AccountException(String msg) {
|
public AccountException(String msg) {
|
||||||
super(msg);
|
super(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AccountException(String entity_updated__deleted_please_reload, boolean b) {
|
||||||
|
throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,70 @@
|
|||||||
|
package de.muehlencord.shared.account.business.account;
|
||||||
|
|
||||||
|
import de.muehlencord.shared.account.entity.ApplicationPermissionEntity;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import javax.ejb.Stateless;
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
import javax.persistence.PersistenceContext;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import javax.persistence.OptimisticLockException;
|
||||||
|
import javax.persistence.Query;
|
||||||
|
import javax.transaction.Transactional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Joern Muehlencord <joern at muehlencord.de>
|
||||||
|
*/
|
||||||
|
@Stateless
|
||||||
|
public class ApplicationPermissionControl implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -3761100587901739481L;
|
||||||
|
|
||||||
|
@PersistenceContext
|
||||||
|
EntityManager em;
|
||||||
|
|
||||||
|
public List getApplicationPermissions() {
|
||||||
|
List<ApplicationPermissionEntity> permissionList = em.createNamedQuery("ApplicationPermissionEntity.findAll").getResultList();
|
||||||
|
if (permissionList == null) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
} else {
|
||||||
|
return permissionList;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public void createOrUpdate(String name, String description) {
|
||||||
|
ApplicationPermissionEntity permission = findByName(name);
|
||||||
|
if (permission == null) {
|
||||||
|
permission = new ApplicationPermissionEntity(name, description);
|
||||||
|
em.persist(permission);
|
||||||
|
} else {
|
||||||
|
permission.setPermissionDescription(description);
|
||||||
|
em.merge(permission);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void delete(ApplicationPermissionEntity permission) throws AccountException {
|
||||||
|
ApplicationPermissionEntity existingPermission = attach(permission);
|
||||||
|
em.remove(existingPermission);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ApplicationPermissionEntity attach(ApplicationPermissionEntity permission) throws AccountException {
|
||||||
|
try {
|
||||||
|
return em.merge(permission);
|
||||||
|
} catch (OptimisticLockException ex) {
|
||||||
|
throw new AccountException("Entity updated / deleted, please reload", true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private ApplicationPermissionEntity findByName(String name) {
|
||||||
|
Query query = em.createNamedQuery("ApplicationPermissionEntity.findByPermissionName");
|
||||||
|
query.setParameter("permissionName", name);
|
||||||
|
List<ApplicationPermissionEntity> permissions = query.getResultList();
|
||||||
|
if ((permissions == null) || (permissions.isEmpty())) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return permissions.get(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,135 @@
|
|||||||
|
/*
|
||||||
|
* To change this license header, choose License Headers in Project Properties.
|
||||||
|
* To change this template file, choose Tools | Templates
|
||||||
|
* and open the template in the editor.
|
||||||
|
*/
|
||||||
|
package de.muehlencord.shared.account.business.account;
|
||||||
|
|
||||||
|
import de.muehlencord.shared.account.entity.ApplicationPermissionEntity;
|
||||||
|
import de.muehlencord.shared.account.entity.ApplicationRoleEntity;
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import javax.ejb.EJB;
|
||||||
|
import javax.ejb.Stateless;
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
import javax.persistence.OptimisticLockException;
|
||||||
|
import javax.persistence.PersistenceContext;
|
||||||
|
import javax.persistence.Query;
|
||||||
|
import javax.transaction.Transactional;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Joern Muehlencord <joern at muehlencord.de>
|
||||||
|
*/
|
||||||
|
@Stateless
|
||||||
|
public class ApplicationRoleControl implements Serializable {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = 5962478269550134748L;
|
||||||
|
private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationRoleControl.class);
|
||||||
|
|
||||||
|
@EJB
|
||||||
|
ApplicationPermissionControl applicationPermissionControl;
|
||||||
|
|
||||||
|
@PersistenceContext
|
||||||
|
EntityManager em;
|
||||||
|
|
||||||
|
public List<ApplicationRoleEntity> getAllRoles() {
|
||||||
|
Query query = em.createNamedQuery("ApplicationRoleEntity.findAll");
|
||||||
|
|
||||||
|
List<ApplicationRoleEntity> roles = query.getResultList();
|
||||||
|
if (roles == null) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
} else {
|
||||||
|
return roles;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public void createOrUpdate(String name, String description) {
|
||||||
|
ApplicationRoleEntity role = findByName(name);
|
||||||
|
if (role == null) {
|
||||||
|
role = new ApplicationRoleEntity(name, description);
|
||||||
|
em.persist(role);
|
||||||
|
} else {
|
||||||
|
role.setRoleDescription(description);
|
||||||
|
em.merge(role);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void delete(ApplicationRoleEntity permission) throws AccountException {
|
||||||
|
ApplicationRoleEntity existingPermission = attach(permission);
|
||||||
|
em.remove(existingPermission);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ApplicationRoleEntity attach(ApplicationRoleEntity permission) throws AccountException {
|
||||||
|
try {
|
||||||
|
return em.merge(permission);
|
||||||
|
} catch (OptimisticLockException ex) {
|
||||||
|
throw new AccountException("Entity updated / deleted, please reload", true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private ApplicationRoleEntity findByName(String name) {
|
||||||
|
Query query = em.createNamedQuery("ApplicationRoleEntity.findByRoleName");
|
||||||
|
query.setParameter("roleName", name);
|
||||||
|
List<ApplicationRoleEntity> permissions = query.getResultList();
|
||||||
|
if ((permissions == null) || (permissions.isEmpty())) {
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return permissions.get(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ApplicationPermissionEntity> getRolePermissions(ApplicationRoleEntity role) throws AccountException {
|
||||||
|
ApplicationRoleEntity existingRole = em.find(ApplicationRoleEntity.class, role.getId());
|
||||||
|
List<ApplicationPermissionEntity> permissions = existingRole.getApplicationPermissionList();
|
||||||
|
permissions.size(); // force list to load
|
||||||
|
return permissions;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ApplicationPermissionEntity> getNotAssignedApplicationPermissions(ApplicationRoleEntity role) {
|
||||||
|
try {
|
||||||
|
List<ApplicationPermissionEntity> rolePermissions = getRolePermissions(role);
|
||||||
|
List<ApplicationPermissionEntity> allPermssions = applicationPermissionControl.getApplicationPermissions();
|
||||||
|
|
||||||
|
List<ApplicationPermissionEntity> missingPermissions = new ArrayList<>();
|
||||||
|
allPermssions.stream().filter((perm) -> (!rolePermissions.contains(perm))).forEachOrdered((perm) -> {
|
||||||
|
missingPermissions.add(perm);
|
||||||
|
});
|
||||||
|
return missingPermissions;
|
||||||
|
} catch (AccountException ex) {
|
||||||
|
if (LOGGER.isDebugEnabled()) {
|
||||||
|
LOGGER.debug(ex.toString(), ex);
|
||||||
|
} else {
|
||||||
|
LOGGER.debug(ex.toString());
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public void addPermission(ApplicationRoleEntity role, ApplicationPermissionEntity permission) throws AccountException {
|
||||||
|
ApplicationRoleEntity existingRole = attach(role);
|
||||||
|
if (existingRole.getApplicationPermissionList() == null) {
|
||||||
|
existingRole.setApplicationPermissionList(new ArrayList<>());
|
||||||
|
}
|
||||||
|
existingRole.getApplicationPermissionList().add(permission);
|
||||||
|
em.merge(role);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional
|
||||||
|
public void removePermission(ApplicationRoleEntity role, ApplicationPermissionEntity permission) throws AccountException {
|
||||||
|
ApplicationRoleEntity existingRole = attach(role);
|
||||||
|
if ((existingRole.getApplicationPermissionList() != null) && (existingRole.getApplicationPermissionList().contains(permission))) {
|
||||||
|
existingRole.getApplicationPermissionList().remove(permission);
|
||||||
|
}
|
||||||
|
em.merge(role);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -8,7 +8,6 @@ import javax.persistence.Column;
|
|||||||
import javax.persistence.Entity;
|
import javax.persistence.Entity;
|
||||||
import javax.persistence.GeneratedValue;
|
import javax.persistence.GeneratedValue;
|
||||||
import javax.persistence.Id;
|
import javax.persistence.Id;
|
||||||
import javax.persistence.Lob;
|
|
||||||
import javax.persistence.ManyToMany;
|
import javax.persistence.ManyToMany;
|
||||||
import javax.persistence.NamedQueries;
|
import javax.persistence.NamedQueries;
|
||||||
import javax.persistence.NamedQuery;
|
import javax.persistence.NamedQuery;
|
||||||
@ -28,7 +27,8 @@ import org.hibernate.annotations.Type;
|
|||||||
@Table(name = "application_permission")
|
@Table(name = "application_permission")
|
||||||
@XmlRootElement
|
@XmlRootElement
|
||||||
@NamedQueries({
|
@NamedQueries({
|
||||||
@NamedQuery(name = "ApplicationPermissionEntity.findAll", query = "SELECT a FROM ApplicationPermissionEntity a"),
|
@NamedQuery(name = "ApplicationPermissionEntity.findAll", query = "SELECT a FROM ApplicationPermissionEntity a order by a.permissionName"),
|
||||||
|
@NamedQuery(name = "ApplicationPermissionEntity.findNotAssigned", query = "SELECT a FROM ApplicationPermissionEntity a LEFT OUTER JOIN a.applicationRoleList r WHERE r NOT IN :permissions"),
|
||||||
@NamedQuery(name = "ApplicationPermissionEntity.findByPermissionName", query = "SELECT a FROM ApplicationPermissionEntity a WHERE a.permissionName = :permissionName"),
|
@NamedQuery(name = "ApplicationPermissionEntity.findByPermissionName", query = "SELECT a FROM ApplicationPermissionEntity a WHERE a.permissionName = :permissionName"),
|
||||||
@NamedQuery(name = "ApplicationPermissionEntity.findByPermissionDescription", query = "SELECT a FROM ApplicationPermissionEntity a WHERE a.permissionDescription = :permissionDescription")})
|
@NamedQuery(name = "ApplicationPermissionEntity.findByPermissionDescription", query = "SELECT a FROM ApplicationPermissionEntity a WHERE a.permissionDescription = :permissionDescription")})
|
||||||
public class ApplicationPermissionEntity implements Serializable {
|
public class ApplicationPermissionEntity implements Serializable {
|
||||||
@ -63,6 +63,12 @@ public class ApplicationPermissionEntity implements Serializable {
|
|||||||
this.id = id;
|
this.id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ApplicationPermissionEntity(String permissionName, String permissionDescription) {
|
||||||
|
this.id = null;
|
||||||
|
this.permissionName = permissionName;
|
||||||
|
this.permissionDescription = permissionDescription;
|
||||||
|
}
|
||||||
|
|
||||||
public ApplicationPermissionEntity(UUID id, String permissionName, String permissionDescription) {
|
public ApplicationPermissionEntity(UUID id, String permissionName, String permissionDescription) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.permissionName = permissionName;
|
this.permissionName = permissionName;
|
||||||
|
|||||||
@ -10,7 +10,6 @@ import javax.persistence.GeneratedValue;
|
|||||||
import javax.persistence.Id;
|
import javax.persistence.Id;
|
||||||
import javax.persistence.JoinColumn;
|
import javax.persistence.JoinColumn;
|
||||||
import javax.persistence.JoinTable;
|
import javax.persistence.JoinTable;
|
||||||
import javax.persistence.Lob;
|
|
||||||
import javax.persistence.ManyToMany;
|
import javax.persistence.ManyToMany;
|
||||||
import javax.persistence.NamedQueries;
|
import javax.persistence.NamedQueries;
|
||||||
import javax.persistence.NamedQuery;
|
import javax.persistence.NamedQuery;
|
||||||
@ -30,14 +29,14 @@ import org.hibernate.annotations.Type;
|
|||||||
@Table(name = "application_role")
|
@Table(name = "application_role")
|
||||||
@XmlRootElement
|
@XmlRootElement
|
||||||
@NamedQueries({
|
@NamedQueries({
|
||||||
@NamedQuery(name = "ApplicationRoleEntity.findAll", query = "SELECT a FROM ApplicationRoleEntity a"),
|
@NamedQuery(name = "ApplicationRoleEntity.findAll", query = "SELECT a FROM ApplicationRoleEntity a ORDER BY a.roleName")
|
||||||
@NamedQuery(name = "ApplicationRoleEntity.findByRoleName", query = "SELECT a FROM ApplicationRoleEntity a WHERE a.roleName = :roleName"),
|
, @NamedQuery(name = "ApplicationRoleEntity.findByRoleName", query = "SELECT a FROM ApplicationRoleEntity a WHERE a.roleName = :roleName")
|
||||||
@NamedQuery(name = "ApplicationRoleEntity.findByRoleDescription", query = "SELECT a FROM ApplicationRoleEntity a WHERE a.roleDescription = :roleDescription")})
|
, @NamedQuery(name = "ApplicationRoleEntity.findByRoleDescription", query = "SELECT a FROM ApplicationRoleEntity a WHERE a.roleDescription = :roleDescription")})
|
||||||
|
|
||||||
public class ApplicationRoleEntity implements Serializable {
|
public class ApplicationRoleEntity implements Serializable {
|
||||||
|
|
||||||
private static final long serialVersionUID = -8324054525780893823L;
|
private static final long serialVersionUID = -8324054525780893823L;
|
||||||
|
|
||||||
|
|
||||||
@Id
|
@Id
|
||||||
@Basic(optional = false)
|
@Basic(optional = false)
|
||||||
@NotNull
|
@NotNull
|
||||||
@ -71,6 +70,12 @@ public class ApplicationRoleEntity implements Serializable {
|
|||||||
this.id = id;
|
this.id = id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ApplicationRoleEntity(String roleName, String roleDescription) {
|
||||||
|
this.id = null;
|
||||||
|
this.roleName = roleName;
|
||||||
|
this.roleDescription = roleDescription;
|
||||||
|
}
|
||||||
|
|
||||||
public ApplicationRoleEntity(UUID id, String roleName, String roleDescription) {
|
public ApplicationRoleEntity(UUID id, String roleName, String roleDescription) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.roleName = roleName;
|
this.roleName = roleName;
|
||||||
|
|||||||
Reference in New Issue
Block a user