All Downloads are FREE. Search and download functionalities are using the official Maven repository.

edu.stanford.protege.webprotege.permissions.ProjectPermissionsManagerImpl Maven / Gradle / Ivy

The newest version!
package edu.stanford.protege.webprotege.permissions;

import edu.stanford.protege.webprotege.access.AccessManager;
import edu.stanford.protege.webprotege.authorization.Resource;
import edu.stanford.protege.webprotege.ipc.ExecutionContext;
import edu.stanford.protege.webprotege.project.ProjectDetails;
import edu.stanford.protege.webprotege.project.ProjectDetailsRepository;

import javax.annotation.Nonnull;
import javax.inject.Inject;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import static edu.stanford.protege.webprotege.access.BuiltInAction.VIEW_PROJECT;
import static edu.stanford.protege.webprotege.authorization.Subject.forUser;

/**
 * Matthew Horridge Stanford Center for Biomedical Informatics Research 06/02/15
 */
public class ProjectPermissionsManagerImpl implements ProjectPermissionsManager {

    private final AccessManager accessManager;

    private final ProjectDetailsRepository projectDetailsRepository;


    @Inject
    public ProjectPermissionsManagerImpl(@Nonnull AccessManager accessManager,
                                         @Nonnull ProjectDetailsRepository projectDetailsRepository) {
        this.accessManager = accessManager;
        this.projectDetailsRepository = projectDetailsRepository;
    }

    @Override
    public List getReadableProjects(ExecutionContext executionContext) {
        Set result = new HashSet<>();
        accessManager.getResourcesAccessibleToSubject(forUser(executionContext.userId()), VIEW_PROJECT.getActionId(), new ExecutionContext(executionContext.userId(), executionContext.jwt()))
                     .stream()
                     .filter(Resource::isProject)
                     .forEach(
                             resource ->
                                     resource.getProjectId().ifPresent(
                                             projectId -> projectDetailsRepository
                                                     .findOne(projectId)
                                                     .ifPresent(result::add)));
        // Always add owned in case permissions are screwed up - yes?
        // It will be obvious that the permissions are screwed up because the
        // user won't be able to open their own project.
        result.addAll(projectDetailsRepository.findByOwner(executionContext.userId()));
        return new ArrayList<>(result);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy