package fi.otavanopisto.muikku.security; import java.util.logging.Level; import java.util.logging.Logger; import javax.enterprise.context.RequestScoped; import javax.enterprise.inject.Any; import javax.enterprise.inject.Instance; import javax.inject.Inject; import fi.otavanopisto.muikku.dao.users.SystemRoleEntityDAO; import fi.otavanopisto.muikku.model.users.RoleEntity; import fi.otavanopisto.muikku.model.users.SystemRoleType; import fi.otavanopisto.muikku.model.users.UserEntity; import fi.otavanopisto.muikku.model.workspace.WorkspaceEntity; import fi.otavanopisto.security.ContextReference; import fi.otavanopisto.security.User; @RequestScoped public class AbstractPermissionResolver { @Inject private Logger logger; @Inject @Any private Instance<WorkspaceContextResolver> workspaceContextResolvers; @Inject @Any private Instance<UserContextResolver> userContextResolvers; @Inject private SystemRoleEntityDAO systemUserRoleDAO; /** * Uses ContextResolvers to resolve course from ContextReference * * @param contextReference * @return course if found, else null */ protected WorkspaceEntity resolveWorkspace(ContextReference contextReference) { for (WorkspaceContextResolver workspaceContextResolver : workspaceContextResolvers) { if (workspaceContextResolver.handlesContextReference(contextReference)) { WorkspaceEntity workspaceEntity = workspaceContextResolver.resolveWorkspace(contextReference); if (workspaceEntity != null) return workspaceEntity; else { if (contextReference != null) logger.log(Level.WARNING, "Resolver couldn't resolve workspace from " + contextReference.getClass().getSimpleName()); else logger.log(Level.WARNING, "Resolver couldn't resolve workspace from null"); return null; } } } if (contextReference != null) logger.log(Level.WARNING, "Couldn't find workspace resolver for " + contextReference.getClass().getSimpleName()); else logger.log(Level.WARNING, "Couldn't find workspace resolver for null contextReference"); return null; } /** * Uses ContextResolvers to resolve user from ContextReference * * @param contextReference * @return user if found, else null */ protected UserEntity resolveUser(ContextReference contextReference) { for (UserContextResolver resolver : userContextResolvers) { if (resolver.handlesContextReference(contextReference)) { UserEntity userEntity = resolver.resolveUser(contextReference); if (userEntity != null) return userEntity; else { if (contextReference != null) logger.log(Level.WARNING, "Resolver couldn't resolve user from " + contextReference.getClass().getSimpleName()); else logger.log(Level.WARNING, "Resolver couldn't resolve user from null"); return null; } } } if (contextReference != null) logger.log(Level.WARNING, "Couldn't find user resolver for " + contextReference.getClass().getSimpleName()); else logger.log(Level.WARNING, "Couldn't find user resolver for null contextReference"); return null; } protected RoleEntity getEveryoneRole() { return systemUserRoleDAO.findByRoleType(SystemRoleType.EVERYONE); } protected UserEntity getUserEntity(User user) { return (UserEntity) user; } }