package fi.otavanopisto.pyramus.security.impl; import java.util.List; import javax.annotation.PostConstruct; import javax.ejb.Singleton; import javax.ejb.Startup; import javax.enterprise.inject.Any; import javax.enterprise.inject.Instance; import javax.inject.Inject; import fi.otavanopisto.pyramus.dao.security.EnvironmentRolePermissionDAO; import fi.otavanopisto.pyramus.dao.security.PermissionDAO; import fi.otavanopisto.pyramus.domainmodel.security.EnvironmentRolePermission; import fi.otavanopisto.pyramus.domainmodel.security.Permission; import fi.otavanopisto.pyramus.domainmodel.users.Role; @Singleton @Startup public class PermissionCollector { @Inject @Any private Instance<PyramusPermissionCollection> permissionCollections; @Inject private PermissionDAO permissionDAO; @Inject private EnvironmentRolePermissionDAO environmentRolePermissionDAO; public void resetRoles(Role role) { // Remove current permissions List<EnvironmentRolePermission> currentPermissions = environmentRolePermissionDAO.listByUserRole(role); for (EnvironmentRolePermission currentPermission : currentPermissions) { environmentRolePermissionDAO.delete(currentPermission); } // Insert new permissions try { for (PyramusPermissionCollection collection : permissionCollections) { List<String> permissions = collection.listPermissions(); for (String permissionName : permissions) { Permission permission = permissionDAO.findByName(permissionName); String permissionScope = collection.getPermissionScope(permissionName); if (PermissionScope.ENVIRONMENT.equals(permissionScope)) { String[] defaultRoles = collection.getDefaultRoles(permissionName); if (defaultRoles != null) { for (int i = 0; i < defaultRoles.length; i++) { String defaultRoleName = defaultRoles[i]; Role defaultRole = Role.valueOf(defaultRoleName); if (defaultRole.equals(role)) { environmentRolePermissionDAO.create(role, permission); } } } } } } } catch (Exception e) { e.printStackTrace(); } } @PostConstruct private void collectPermissions() { for (PyramusPermissionCollection collection : permissionCollections) { List<String> permissions = collection.listPermissions(); for (String permissionName : permissions) { Permission permission = permissionDAO.findByName(permissionName); if (permission == null) { try { String permissionScope = collection.getPermissionScope(permissionName); permission = permissionDAO.create(permissionName, permissionScope); String[] defaultRoles = collection.getDefaultRoles(permissionName); if (defaultRoles != null) { switch (permissionScope) { case PermissionScope.ENVIRONMENT: for (int i = 0; i < defaultRoles.length; i++) { String roleName = defaultRoles[i]; Role role = Role.valueOf(roleName); environmentRolePermissionDAO.create(role, permission); } break; // case PermissionScope.WORKSPACE: // List<WorkspaceEntity> workspaces = workspaceEntityDAO.listAll(); // WorkspaceSettingsTemplate workspaceSettingsTemplate = workspaceSettingsTemplateDAO.findById(1l); // // for (int i = 0; i < defaultRoles.length; i++) { // String roleName = defaultRoles[i]; // RoleEntity roleEntity = roleEntityDAO.findByName(roleName); // // workspaceSettingsTemplateRolePermissionDAO.create(workspaceSettingsTemplate, roleEntity, permission); // // // TODO Workspace creation & templates - is this necessary and bulletproof? // for (WorkspaceEntity workspace: workspaces) { // workspaceRolePermissionDAO.create(workspace, roleEntity, permission); // } // } // break; // // case PermissionScope.USERGROUP: // List<UserGroup> userGroups = userGroupDAO.listAll(); // // for (int i = 0; i < defaultRoles.length; i++) { // String roleName = defaultRoles[i]; // RoleEntity roleEntity = roleEntityDAO.findByName(roleName); // // // TODO Workspace creation & templates - is this necessary and bulletproof? // for (UserGroup userGroup: userGroups) { // userGroupRolePermissionDAO.create(userGroup, roleEntity, permission); // } // } // break; } } } catch (Exception e) { e.printStackTrace(); } } } } } }