added application support for permissions
This commit is contained in:
@ -2,12 +2,15 @@ package de.muehlencord.shared.account.business.account.boundary;
|
||||
|
||||
import de.muehlencord.shared.account.business.account.entity.AccountException;
|
||||
import de.muehlencord.shared.account.business.account.entity.ApplicationPermissionEntity;
|
||||
import de.muehlencord.shared.account.business.application.boundary.ApplicationService;
|
||||
import de.muehlencord.shared.account.business.application.entity.ApplicationEntity;
|
||||
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.ejb.EJB;
|
||||
import javax.persistence.OptimisticLockException;
|
||||
import javax.persistence.Query;
|
||||
import javax.transaction.Transactional;
|
||||
@ -21,11 +24,16 @@ public class ApplicationPermissionControl implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -3761100587901739481L;
|
||||
|
||||
@EJB
|
||||
ApplicationService applicationService;
|
||||
|
||||
@PersistenceContext
|
||||
EntityManager em;
|
||||
|
||||
public List getApplicationPermissions() {
|
||||
List<ApplicationPermissionEntity> permissionList = em.createNamedQuery("ApplicationPermissionEntity.findAll").getResultList();
|
||||
public List<ApplicationPermissionEntity> getApplicationPermissions(ApplicationEntity application) {
|
||||
Query query = em.createNamedQuery("ApplicationPermissionEntity.findAll");
|
||||
query.setParameter("application", application);
|
||||
List<ApplicationPermissionEntity> permissionList = query.getResultList();
|
||||
if (permissionList == null) {
|
||||
return new ArrayList<>();
|
||||
} else {
|
||||
@ -33,15 +41,29 @@ public class ApplicationPermissionControl implements Serializable {
|
||||
}
|
||||
}
|
||||
|
||||
public ApplicationPermissionEntity findPermissionByName(ApplicationEntity application, String permissionName) {
|
||||
Query query = em.createNamedQuery("ApplicationPermissionEntity.findByPermissionName");
|
||||
query.setParameter("application", application);
|
||||
query.setParameter("permissionName", permissionName);
|
||||
List<ApplicationPermissionEntity> resultList = query.getResultList();
|
||||
if ((resultList == null) || (resultList.isEmpty())) {
|
||||
return null;
|
||||
} else {
|
||||
return resultList.get(0);
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void create(String name, String description) {
|
||||
ApplicationPermissionEntity permission = new ApplicationPermissionEntity(name, description);
|
||||
public void create(String applicationName, String name, String description) {
|
||||
ApplicationEntity application = applicationService.findByApplicationName(applicationName);
|
||||
// TODO add error handling if not found
|
||||
ApplicationPermissionEntity permission = new ApplicationPermissionEntity(application, name, description);
|
||||
em.persist(permission);
|
||||
}
|
||||
|
||||
|
||||
@Transactional
|
||||
public void update (ApplicationPermissionEntity permission) throws AccountException {
|
||||
ApplicationPermissionEntity existing = attach(permission);
|
||||
public void update(ApplicationPermissionEntity permission) throws AccountException {
|
||||
ApplicationPermissionEntity existing = attach(permission);
|
||||
em.merge(existing);
|
||||
}
|
||||
|
||||
|
||||
@ -94,7 +94,7 @@ public class ApplicationRoleControl implements Serializable {
|
||||
public List<ApplicationPermissionEntity> getNotAssignedApplicationPermissions(ApplicationRoleEntity role) {
|
||||
try {
|
||||
List<ApplicationPermissionEntity> rolePermissions = getRolePermissions(role);
|
||||
List<ApplicationPermissionEntity> allPermssions = applicationPermissionControl.getApplicationPermissions();
|
||||
List<ApplicationPermissionEntity> allPermssions = applicationPermissionControl.getApplicationPermissions(role.getApplication());
|
||||
|
||||
List<ApplicationPermissionEntity> missingPermissions = new ArrayList<>();
|
||||
allPermssions.stream().filter((perm) -> (!rolePermissions.contains(perm))).forEachOrdered((perm) -> {
|
||||
|
||||
@ -1,136 +1,158 @@
|
||||
package de.muehlencord.shared.account.business.account.entity;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import javax.persistence.Basic;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.ManyToMany;
|
||||
import javax.persistence.NamedQueries;
|
||||
import javax.persistence.NamedQuery;
|
||||
import javax.persistence.Table;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Size;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import javax.xml.bind.annotation.XmlTransient;
|
||||
import org.hibernate.annotations.GenericGenerator;
|
||||
import org.hibernate.annotations.Type;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author joern.muehlencord
|
||||
*/
|
||||
@Entity
|
||||
@Table(name = "application_permission")
|
||||
@XmlRootElement
|
||||
@NamedQueries({
|
||||
@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.findByPermissionDescription", query = "SELECT a FROM ApplicationPermissionEntity a WHERE a.permissionDescription = :permissionDescription")})
|
||||
public class ApplicationPermissionEntity implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -8985982754544829534L;
|
||||
|
||||
@Id
|
||||
@Basic(optional = false)
|
||||
@NotNull
|
||||
@Column(name = "id")
|
||||
@GeneratedValue(generator = "uuid2")
|
||||
@GenericGenerator(name = "uuid2", strategy = "uuid2")
|
||||
@Type(type = "pg-uuid")
|
||||
private UUID id;
|
||||
@Basic(optional = false)
|
||||
@NotNull
|
||||
@Size(min = 1, max = 80)
|
||||
@Column(name = "permission_name")
|
||||
private String permissionName;
|
||||
@Basic(optional = false)
|
||||
@NotNull
|
||||
@Size(min = 1, max = 200)
|
||||
@Column(name = "permission_description")
|
||||
private String permissionDescription;
|
||||
@ManyToMany(mappedBy = "applicationPermissionList")
|
||||
private List<ApplicationRoleEntity> applicationRoleList;
|
||||
|
||||
public ApplicationPermissionEntity() {
|
||||
}
|
||||
|
||||
public ApplicationPermissionEntity(UUID 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) {
|
||||
this.id = id;
|
||||
this.permissionName = permissionName;
|
||||
this.permissionDescription = permissionDescription;
|
||||
}
|
||||
|
||||
public UUID getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(UUID id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getPermissionName() {
|
||||
return permissionName;
|
||||
}
|
||||
|
||||
public void setPermissionName(String permissionName) {
|
||||
this.permissionName = permissionName;
|
||||
}
|
||||
|
||||
public String getPermissionDescription() {
|
||||
return permissionDescription;
|
||||
}
|
||||
|
||||
public void setPermissionDescription(String permissionDescription) {
|
||||
this.permissionDescription = permissionDescription;
|
||||
}
|
||||
|
||||
@XmlTransient
|
||||
public List<ApplicationRoleEntity> getApplicationRoleList() {
|
||||
return applicationRoleList;
|
||||
}
|
||||
|
||||
public void setApplicationRoleList(List<ApplicationRoleEntity> applicationRoleList) {
|
||||
this.applicationRoleList = applicationRoleList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 0;
|
||||
hash += (id != null ? id.hashCode() : 0);
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object object) {
|
||||
// TODO: Warning - this method won't work in the case the id fields are not set
|
||||
if (!(object instanceof ApplicationPermissionEntity)) {
|
||||
return false;
|
||||
}
|
||||
ApplicationPermissionEntity other = (ApplicationPermissionEntity) object;
|
||||
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "de.muehlencord.shared.account.entity.ApplicationPermission[ id=" + id + " ]";
|
||||
}
|
||||
|
||||
}
|
||||
package de.muehlencord.shared.account.business.account.entity;
|
||||
|
||||
import de.muehlencord.shared.account.business.application.entity.ApplicationEntity;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import javax.persistence.Basic;
|
||||
import javax.persistence.Column;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.GeneratedValue;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.JoinColumn;
|
||||
import javax.persistence.ManyToMany;
|
||||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.NamedQueries;
|
||||
import javax.persistence.NamedQuery;
|
||||
import javax.persistence.Table;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import javax.validation.constraints.Size;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import javax.xml.bind.annotation.XmlTransient;
|
||||
import org.hibernate.annotations.GenericGenerator;
|
||||
import org.hibernate.annotations.Type;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author joern.muehlencord
|
||||
*/
|
||||
@Entity
|
||||
@Table(name = "application_permission")
|
||||
@XmlRootElement
|
||||
@NamedQueries({
|
||||
@NamedQuery(name = "ApplicationPermissionEntity.findAll", query = "SELECT a FROM ApplicationPermissionEntity a WHERE a.application=:application order by a.permissionName"),
|
||||
@NamedQuery(name = "ApplicationPermissionEntity.findNotAssigned", query = "SELECT a FROM ApplicationPermissionEntity a LEFT OUTER JOIN a.applicationRoles r WHERE a.application=:application AND r NOT IN :permissions"),
|
||||
@NamedQuery(name = "ApplicationPermissionEntity.findByPermissionName", query = "SELECT a FROM ApplicationPermissionEntity a WHERE a.application=:application AND a.permissionName = :permissionName"),
|
||||
@NamedQuery(name = "ApplicationPermissionEntity.findByPermissionDescription", query = "SELECT a FROM ApplicationPermissionEntity a WHERE a.application=:application AND a.permissionDescription = :permissionDescription")})
|
||||
public class ApplicationPermissionEntity implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -8985982754544829534L;
|
||||
|
||||
@Id
|
||||
@Basic(optional = false)
|
||||
@NotNull
|
||||
@Column(name = "id")
|
||||
@GeneratedValue(generator = "uuid2")
|
||||
@GenericGenerator(name = "uuid2", strategy = "uuid2")
|
||||
@Type(type = "pg-uuid")
|
||||
private UUID id;
|
||||
@Basic(optional = false)
|
||||
@NotNull
|
||||
@Size(min = 1, max = 80)
|
||||
@Column(name = "permission_name")
|
||||
private String permissionName;
|
||||
@Basic(optional = false)
|
||||
@NotNull
|
||||
@Size(min = 1, max = 200)
|
||||
@Column(name = "permission_description")
|
||||
private String permissionDescription;
|
||||
@JoinColumn(name = "application", referencedColumnName = "id")
|
||||
@ManyToOne(optional = false)
|
||||
private ApplicationEntity application;
|
||||
@ManyToMany(mappedBy = "applicationPermissionList")
|
||||
private List<ApplicationRoleEntity> applicationRoles;
|
||||
|
||||
public ApplicationPermissionEntity() {
|
||||
}
|
||||
|
||||
public ApplicationPermissionEntity(UUID id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public ApplicationPermissionEntity(String permissionName, String permissionDescription) {
|
||||
this.id = null;
|
||||
this.permissionName = permissionName;
|
||||
this.permissionDescription = permissionDescription;
|
||||
}
|
||||
|
||||
public ApplicationPermissionEntity(ApplicationEntity application, String permissionName, String permissionDescription) {
|
||||
this.id = null;
|
||||
this.application = application;
|
||||
this.permissionName = permissionName;
|
||||
this.permissionDescription = permissionDescription;
|
||||
}
|
||||
|
||||
public ApplicationPermissionEntity(UUID id, ApplicationEntity application, String permissionName, String permissionDescription) {
|
||||
this.id = id;
|
||||
this.application = application;
|
||||
this.permissionName = permissionName;
|
||||
this.permissionDescription = permissionDescription;
|
||||
}
|
||||
|
||||
public UUID getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(UUID id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getPermissionName() {
|
||||
return permissionName;
|
||||
}
|
||||
|
||||
public void setPermissionName(String permissionName) {
|
||||
this.permissionName = permissionName;
|
||||
}
|
||||
|
||||
public String getPermissionDescription() {
|
||||
return permissionDescription;
|
||||
}
|
||||
|
||||
public void setPermissionDescription(String permissionDescription) {
|
||||
this.permissionDescription = permissionDescription;
|
||||
}
|
||||
|
||||
@XmlTransient
|
||||
public List<ApplicationRoleEntity> getApplicationRoles() {
|
||||
return applicationRoles;
|
||||
}
|
||||
|
||||
public void setApplicationRoles(List<ApplicationRoleEntity> applicationRoles) {
|
||||
this.applicationRoles = applicationRoles;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int hash = 0;
|
||||
hash += (id != null ? id.hashCode() : 0);
|
||||
return hash;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object object) {
|
||||
// TODO: Warning - this method won't work in the case the id fields are not set
|
||||
if (!(object instanceof ApplicationPermissionEntity)) {
|
||||
return false;
|
||||
}
|
||||
ApplicationPermissionEntity other = (ApplicationPermissionEntity) object;
|
||||
if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "de.muehlencord.shared.account.entity.ApplicationPermission[ id=" + id + " ]";
|
||||
}
|
||||
|
||||
public ApplicationEntity getApplication() {
|
||||
return application;
|
||||
}
|
||||
|
||||
public void setApplication(ApplicationEntity application) {
|
||||
this.application = application;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -46,14 +46,14 @@ public class ApplicationService implements Serializable {
|
||||
ApplicationEntity returnValue = findByApplicationName(app.getApplicationName());
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
LOGGER.debug("Application {} created", app.getApplicationName());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return returnValue;
|
||||
} else {
|
||||
ApplicationEntity returnValue = em.merge(app);
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
LOGGER.debug("Applicateion {} updated", app.getApplicationName());
|
||||
}
|
||||
LOGGER.debug("Applicateion {} updated", app.getApplicationName());
|
||||
}
|
||||
return returnValue;
|
||||
}
|
||||
}
|
||||
@ -70,4 +70,13 @@ public class ApplicationService implements Serializable {
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
public void delete(ApplicationEntity app) {
|
||||
ApplicationEntity attachedApp = em.find(ApplicationEntity.class, app.getId());
|
||||
em.remove(attachedApp);
|
||||
if (LOGGER.isDebugEnabled()) {
|
||||
LOGGER.debug("Application {} deleted", app.getApplicationName());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package de.muehlencord.shared.account.business.application.entity;
|
||||
|
||||
import de.muehlencord.shared.account.business.account.entity.ApplicationPermissionEntity;
|
||||
import de.muehlencord.shared.account.business.account.entity.ApplicationRoleEntity;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
@ -50,6 +51,8 @@ public class ApplicationEntity implements Serializable {
|
||||
private String applicationName;
|
||||
@OneToMany(cascade = CascadeType.ALL, mappedBy = "application")
|
||||
private List<ApplicationRoleEntity> applicationRoleEntityList;
|
||||
@OneToMany(cascade = CascadeType.ALL, mappedBy = "application")
|
||||
private List<ApplicationPermissionEntity> applicationPermissions;
|
||||
|
||||
public ApplicationEntity() {
|
||||
}
|
||||
@ -104,4 +107,13 @@ public class ApplicationEntity implements Serializable {
|
||||
return "de.muehlencord.shared.account.business.application.entity.ApplicationEntity[ id=" + id + " ]";
|
||||
}
|
||||
|
||||
@XmlTransient
|
||||
public List<ApplicationPermissionEntity> getApplicationPermissions() {
|
||||
return applicationPermissions;
|
||||
}
|
||||
|
||||
public void setApplicationPermissions(List<ApplicationPermissionEntity> applicationPermissions) {
|
||||
this.applicationPermissions = applicationPermissions;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user