view src/main/java/de/intevation/lada/util/auth/MessprogrammAuthorizer.java @ 1345:883ab3a6f525 tip

changed version to 2.7-SNAPSHOT after release2.6.2 for default branch
author Marco Lechner, Bundesamt fuer Strahlenschutz, SW 2.1 <mlechner@bfs.de>
date Fri, 07 Apr 2017 11:14:37 +0200
parents 65ed13ff9945
children
line wrap: on
line source
/* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
 * Software engineering by Intevation GmbH
 *
 * This file is Free Software under the GNU GPL (v>=3)
 * and comes with ABSOLUTELY NO WARRANTY! Check out
 * the documentation coming with IMIS-Labordaten-Application for details.
 */
package de.intevation.lada.util.auth;

import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;

import de.intevation.lada.model.land.Messprogramm;
import de.intevation.lada.model.land.MessprogrammMmt;
import de.intevation.lada.model.stammdaten.MessStelle;
import de.intevation.lada.util.annotation.RepositoryConfig;
import de.intevation.lada.util.data.Repository;
import de.intevation.lada.util.data.RepositoryType;
import de.intevation.lada.util.rest.RequestMethod;
import de.intevation.lada.util.rest.Response;

public class MessprogrammAuthorizer implements Authorizer {

    @Inject
    @RepositoryConfig(type=RepositoryType.RO)
    private Repository repository;

    @Override
    public <T> boolean isAuthorized(
        Object data,
        RequestMethod method,
        UserInfo userInfo,
        Class<T> clazz
    ) {
        if (method == RequestMethod.GET) {
            // Allow read access to everybody
            return true;
        }
        Messprogramm messprogramm = null;
        if (data instanceof Messprogramm) {
            messprogramm = (Messprogramm)data;
        }
        else if (data instanceof MessprogrammMmt) {
            messprogramm = repository.getByIdPlain(
                Messprogramm.class,
                ((MessprogrammMmt)data).getMessprogrammId(),
                "land");
        }
        MessStelle mst = repository.getByIdPlain(
            MessStelle.class, messprogramm.getMstId(), "stamm");
        if (userInfo.getFunktionenForNetzbetreiber(
                mst.getNetzbetreiberId()).contains(4)) {
            return true;
        }
        return false;
    }

    @Override
    public <T> Response filter(
        Response data,
        UserInfo userInfo,
        Class<T> clazz
    ) {
        if (data.getData() instanceof List<?> &&
            !clazz.getSimpleName().equals("MessprogrammMmt")) {
            List<Messprogramm> messprogramme = new ArrayList<Messprogramm>();
            for (Messprogramm messprogramm :(List<Messprogramm>)data.getData()) {
                messprogramme.add(setAuthData(userInfo, messprogramm));
            }
            data.setData(messprogramme);
        }
        else if (data.getData() instanceof Messprogramm) {
            Messprogramm messprogramm = (Messprogramm)data.getData();
            data.setData(setAuthData(userInfo, messprogramm));
        }
        return data;
    }

    /**
     * Set authorization data for the current probe object.
     *
     * @param userInfo  The user information.
     * @param probe     The probe object.
     * @return The probe.
     */
    private Messprogramm setAuthData(UserInfo userInfo, Messprogramm messprogramm) {
        MessStelle mst = repository.getByIdPlain(MessStelle.class, messprogramm.getMstId(), "stamm");
        if (userInfo.getFunktionenForNetzbetreiber(
                mst.getNetzbetreiberId()).contains(4)) {
            messprogramm.setReadonly(false);
            return messprogramm;
        }
        else {
            messprogramm.setReadonly(true);
        }
        return messprogramm;
    }
}
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)