added findByName for default application
This commit is contained in:
@ -1,191 +1,196 @@
|
|||||||
/*
|
/*
|
||||||
* To change this license header, choose License Headers in Project Properties.
|
* To change this license header, choose License Headers in Project Properties.
|
||||||
* To change this template file, choose Tools | Templates
|
* To change this template file, choose Tools | Templates
|
||||||
* and open the template in the editor.
|
* and open the template in the editor.
|
||||||
*/
|
*/
|
||||||
package de.muehlencord.shared.account.business.application.control;
|
package de.muehlencord.shared.account.business.application.control;
|
||||||
|
|
||||||
import de.muehlencord.shared.account.business.account.entity.AccountException;
|
import de.muehlencord.shared.account.business.account.entity.AccountException;
|
||||||
import de.muehlencord.shared.account.business.application.entity.ApplicationEntity;
|
import de.muehlencord.shared.account.business.application.entity.ApplicationEntity;
|
||||||
import de.muehlencord.shared.account.business.application.entity.ApplicationPermissionEntity;
|
import de.muehlencord.shared.account.business.application.entity.ApplicationPermissionEntity;
|
||||||
import de.muehlencord.shared.account.business.application.entity.ApplicationRoleEntity;
|
import de.muehlencord.shared.account.business.application.entity.ApplicationRoleEntity;
|
||||||
import de.muehlencord.shared.account.util.AccountPU;
|
import de.muehlencord.shared.account.util.AccountPU;
|
||||||
import de.muehlencord.shared.account.util.Permission;
|
import de.muehlencord.shared.account.util.Permission;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import javax.ejb.EJB;
|
import javax.ejb.EJB;
|
||||||
import javax.ejb.Stateless;
|
import javax.ejb.Stateless;
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import javax.persistence.EntityManager;
|
import javax.persistence.EntityManager;
|
||||||
import javax.persistence.OptimisticLockException;
|
import javax.persistence.OptimisticLockException;
|
||||||
import javax.persistence.Query;
|
import javax.persistence.Query;
|
||||||
import javax.transaction.Transactional;
|
import javax.transaction.Transactional;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author Joern Muehlencord <joern at muehlencord.de>
|
* @author Joern Muehlencord <joern at muehlencord.de>
|
||||||
*/
|
*/
|
||||||
@Stateless
|
@Stateless
|
||||||
public class ApplicationRoleControl implements Serializable {
|
public class ApplicationRoleControl implements Serializable {
|
||||||
|
|
||||||
private static final long serialVersionUID = 5962478269550134748L;
|
private static final long serialVersionUID = 5962478269550134748L;
|
||||||
private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationRoleControl.class);
|
private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationRoleControl.class);
|
||||||
|
|
||||||
@EJB
|
@EJB
|
||||||
ApplicationPermissionControl applicationPermissionControl;
|
ApplicationPermissionControl applicationPermissionControl;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
@AccountPU
|
@AccountPU
|
||||||
EntityManager em;
|
EntityManager em;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
ApplicationEntity application;
|
ApplicationEntity application;
|
||||||
|
|
||||||
// TODO requires special role to maintain role for other allication
|
// TODO requires special role to maintain role for other allication
|
||||||
public List<ApplicationRoleEntity> getAllRoles(ApplicationEntity app) {
|
public List<ApplicationRoleEntity> getAllRoles(ApplicationEntity app) {
|
||||||
Query query = em.createNamedQuery("ApplicationRoleEntity.findAll");
|
Query query = em.createNamedQuery("ApplicationRoleEntity.findAll");
|
||||||
query.setParameter("application", app);
|
query.setParameter("application", app);
|
||||||
|
|
||||||
List<ApplicationRoleEntity> roles = query.getResultList();
|
List<ApplicationRoleEntity> roles = query.getResultList();
|
||||||
if (roles == null) {
|
if (roles == null) {
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
} else {
|
} else {
|
||||||
return roles;
|
return roles;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
// TODO requires special role to maintain role for other allication
|
// TODO requires special role to maintain role for other allication
|
||||||
public void createOrUpdate(ApplicationEntity app, String name, String description) {
|
public void createOrUpdate(ApplicationEntity app, String name, String description) {
|
||||||
ApplicationRoleEntity role = findByName(app, name);
|
ApplicationRoleEntity role = findByName(app, name);
|
||||||
if (role == null) {
|
if (role == null) {
|
||||||
role = new ApplicationRoleEntity(app, name, description);
|
role = new ApplicationRoleEntity(app, name, description);
|
||||||
em.persist(role);
|
em.persist(role);
|
||||||
} else {
|
} else {
|
||||||
role.setRoleDescription(description);
|
role.setRoleDescription(description);
|
||||||
em.merge(role);
|
em.merge(role);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
// TODO requires special role to maintain role for other allication
|
// TODO requires special role to maintain role for other allication
|
||||||
public void create(ApplicationRoleEntity role) {
|
public void create(ApplicationRoleEntity role) {
|
||||||
em.persist(role);
|
em.persist(role);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
// TODO requires special role to maintain role for other allication
|
// TODO requires special role to maintain role for other allication
|
||||||
public void update(ApplicationRoleEntity role) {
|
public void update(ApplicationRoleEntity role) {
|
||||||
em.merge(role);
|
em.merge(role);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
// TODO requires special role to maintain role for other allication
|
// TODO requires special role to maintain role for other allication
|
||||||
public void delete(ApplicationRoleEntity role) throws AccountException {
|
public void delete(ApplicationRoleEntity role) throws AccountException {
|
||||||
ApplicationRoleEntity existingRole = attach(role);
|
ApplicationRoleEntity existingRole = attach(role);
|
||||||
em.remove(existingRole);
|
em.remove(existingRole);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ApplicationRoleEntity attach(ApplicationRoleEntity role) throws AccountException {
|
public ApplicationRoleEntity attach(ApplicationRoleEntity role) throws AccountException {
|
||||||
try {
|
try {
|
||||||
return em.merge(role);
|
return em.merge(role);
|
||||||
} catch (OptimisticLockException ex) {
|
} catch (OptimisticLockException ex) {
|
||||||
throw new AccountException("Entity updated / deleted, please reload", true);
|
throw new AccountException("Entity updated / deleted, please reload", true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public ApplicationRoleEntity findByName(ApplicationEntity application, String name) {
|
public ApplicationRoleEntity findByName(String name) {
|
||||||
Query query = em.createNamedQuery("ApplicationRoleEntity.findByRoleName");
|
return findByName(application, name);
|
||||||
query.setParameter("application", application);
|
}
|
||||||
query.setParameter("roleName", name);
|
|
||||||
List<ApplicationRoleEntity> permissions = query.getResultList();
|
// TODO requires special role to maintain role for other allication
|
||||||
if ((permissions == null) || (permissions.isEmpty())) {
|
public ApplicationRoleEntity findByName(ApplicationEntity app, String name) {
|
||||||
return null;
|
Query query = em.createNamedQuery("ApplicationRoleEntity.findByRoleName");
|
||||||
} else {
|
query.setParameter("application", app);
|
||||||
return permissions.get(0);
|
query.setParameter("roleName", name);
|
||||||
}
|
List<ApplicationRoleEntity> permissions = query.getResultList();
|
||||||
}
|
if ((permissions == null) || (permissions.isEmpty())) {
|
||||||
|
return null;
|
||||||
public List<ApplicationPermissionEntity> getRolePermissions(ApplicationRoleEntity role) throws AccountException {
|
} else {
|
||||||
ApplicationRoleEntity existingRole = em.find(ApplicationRoleEntity.class, role.getId());
|
return permissions.get(0);
|
||||||
List<ApplicationPermissionEntity> permissions = existingRole.getApplicationPermissionList();
|
}
|
||||||
permissions.size(); // force list to load
|
}
|
||||||
return permissions;
|
|
||||||
}
|
public List<ApplicationPermissionEntity> getRolePermissions(ApplicationRoleEntity role) throws AccountException {
|
||||||
|
ApplicationRoleEntity existingRole = em.find(ApplicationRoleEntity.class, role.getId());
|
||||||
public List<ApplicationPermissionEntity> getNotAssignedApplicationPermissions(ApplicationRoleEntity role) {
|
List<ApplicationPermissionEntity> permissions = existingRole.getApplicationPermissionList();
|
||||||
try {
|
permissions.size(); // force list to load
|
||||||
List<ApplicationPermissionEntity> rolePermissions = getRolePermissions(role);
|
return permissions;
|
||||||
List<ApplicationPermissionEntity> allPermssions = applicationPermissionControl.getApplicationPermissions(role.getApplication());
|
}
|
||||||
|
|
||||||
List<ApplicationPermissionEntity> missingPermissions = new ArrayList<>();
|
public List<ApplicationPermissionEntity> getNotAssignedApplicationPermissions(ApplicationRoleEntity role) {
|
||||||
allPermssions.stream().filter((perm) -> (!rolePermissions.contains(perm))).forEachOrdered((perm) -> {
|
try {
|
||||||
missingPermissions.add(perm);
|
List<ApplicationPermissionEntity> rolePermissions = getRolePermissions(role);
|
||||||
});
|
List<ApplicationPermissionEntity> allPermssions = applicationPermissionControl.getApplicationPermissions(role.getApplication());
|
||||||
return missingPermissions;
|
|
||||||
} catch (AccountException ex) {
|
List<ApplicationPermissionEntity> missingPermissions = new ArrayList<>();
|
||||||
if (LOGGER.isDebugEnabled()) {
|
allPermssions.stream().filter((perm) -> (!rolePermissions.contains(perm))).forEachOrdered((perm) -> {
|
||||||
LOGGER.debug(ex.toString(), ex);
|
missingPermissions.add(perm);
|
||||||
} else {
|
});
|
||||||
LOGGER.debug(ex.toString());
|
return missingPermissions;
|
||||||
}
|
} catch (AccountException ex) {
|
||||||
return null;
|
if (LOGGER.isDebugEnabled()) {
|
||||||
}
|
LOGGER.debug(ex.toString(), ex);
|
||||||
|
} else {
|
||||||
}
|
LOGGER.debug(ex.toString());
|
||||||
|
}
|
||||||
@Transactional
|
return null;
|
||||||
// TODO requires special role to maintain role for other allication
|
}
|
||||||
public void addPermission(ApplicationRoleEntity role, ApplicationPermissionEntity permission) throws AccountException {
|
|
||||||
ApplicationRoleEntity existingRole = attach(role);
|
}
|
||||||
if (existingRole.getApplicationPermissionList() == null) {
|
|
||||||
existingRole.setApplicationPermissionList(new ArrayList<>());
|
@Transactional
|
||||||
}
|
// TODO requires special role to maintain role for other allication
|
||||||
existingRole.getApplicationPermissionList().add(permission);
|
public void addPermission(ApplicationRoleEntity role, ApplicationPermissionEntity permission) throws AccountException {
|
||||||
em.merge(role);
|
ApplicationRoleEntity existingRole = attach(role);
|
||||||
}
|
if (existingRole.getApplicationPermissionList() == null) {
|
||||||
|
existingRole.setApplicationPermissionList(new ArrayList<>());
|
||||||
@Transactional
|
}
|
||||||
// TODO requires special role to maintain role for other allication
|
existingRole.getApplicationPermissionList().add(permission);
|
||||||
public void removePermission(ApplicationRoleEntity role, ApplicationPermissionEntity permission) throws AccountException {
|
em.merge(role);
|
||||||
ApplicationRoleEntity existingRole = attach(role);
|
}
|
||||||
if ((existingRole.getApplicationPermissionList() != null) && (existingRole.getApplicationPermissionList().contains(permission))) {
|
|
||||||
existingRole.getApplicationPermissionList().remove(permission);
|
@Transactional
|
||||||
}
|
// TODO requires special role to maintain role for other allication
|
||||||
em.merge(role);
|
public void removePermission(ApplicationRoleEntity role, ApplicationPermissionEntity permission) throws AccountException {
|
||||||
}
|
ApplicationRoleEntity existingRole = attach(role);
|
||||||
|
if ((existingRole.getApplicationPermissionList() != null) && (existingRole.getApplicationPermissionList().contains(permission))) {
|
||||||
@Transactional
|
existingRole.getApplicationPermissionList().remove(permission);
|
||||||
public void setupRolePermission(List<Permission> permissions, String roleName) throws AccountException {
|
}
|
||||||
ApplicationRoleEntity role = findByName(application, roleName);
|
em.merge(role);
|
||||||
if (role == null) {
|
}
|
||||||
LOGGER.error("A role with name " + roleName + " is not defined for application " + application.getApplicationName());
|
|
||||||
} else {
|
@Transactional
|
||||||
for (Permission permission : permissions) {
|
public void setupRolePermission(List<Permission> permissions, String roleName) throws AccountException {
|
||||||
ApplicationPermissionEntity existingPermission = applicationPermissionControl.findPermissionByName(application, permission.getName());
|
ApplicationRoleEntity role = findByName(application, roleName);
|
||||||
if (existingPermission == null) {
|
if (role == null) {
|
||||||
LOGGER.error("Required permission " + permission.getName() + " of application " + application.getApplicationName() + " does not exist. Ensure to call setupPermissions first");
|
LOGGER.error("A role with name " + roleName + " is not defined for application " + application.getApplicationName());
|
||||||
} else {
|
} else {
|
||||||
if (role.getApplicationPermissionList().contains(existingPermission)) {
|
for (Permission permission : permissions) {
|
||||||
if (LOGGER.isDebugEnabled()) {
|
ApplicationPermissionEntity existingPermission = applicationPermissionControl.findPermissionByName(application, permission.getName());
|
||||||
LOGGER.debug("Permission {} already assigned to role {} of {}, skipping", permission.getName(), roleName, application.getApplicationName());
|
if (existingPermission == null) {
|
||||||
}
|
LOGGER.error("Required permission " + permission.getName() + " of application " + application.getApplicationName() + " does not exist. Ensure to call setupPermissions first");
|
||||||
} else {
|
} else {
|
||||||
if (LOGGER.isDebugEnabled()) {
|
if (role.getApplicationPermissionList().contains(existingPermission)) {
|
||||||
LOGGER.debug("Permission {} not assigned to role {} of {}", permission.getName(), roleName, application.getApplicationName());
|
if (LOGGER.isDebugEnabled()) {
|
||||||
}
|
LOGGER.debug("Permission {} already assigned to role {} of {}, skipping", permission.getName(), roleName, application.getApplicationName());
|
||||||
addPermission(role, existingPermission);
|
}
|
||||||
if (LOGGER.isDebugEnabled()) {
|
} else {
|
||||||
LOGGER.debug("Added permission {} to role {} of {}", permission.getName(), roleName, application.getApplicationName());
|
if (LOGGER.isDebugEnabled()) {
|
||||||
}
|
LOGGER.debug("Permission {} not assigned to role {} of {}", permission.getName(), roleName, application.getApplicationName());
|
||||||
}
|
}
|
||||||
}
|
addPermission(role, existingPermission);
|
||||||
}
|
if (LOGGER.isDebugEnabled()) {
|
||||||
}
|
LOGGER.debug("Added permission {} to role {} of {}", permission.getName(), roleName, application.getApplicationName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user