Mercurial > lada > lada-server
changeset 772:46e0523bbd80
Authorize messungen with status and not the "fertig"-flag.
author | Raimund Renkert <raimund.renkert@intevation.de> |
---|---|
date | Thu, 12 Nov 2015 12:14:46 +0100 |
parents | 244c54d16957 |
children | c151b09af33b |
files | src/main/java/de/intevation/lada/util/auth/HeaderAuthorization.java |
diffstat | 1 files changed, 60 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/main/java/de/intevation/lada/util/auth/HeaderAuthorization.java Thu Nov 12 12:13:39 2015 +0100 +++ b/src/main/java/de/intevation/lada/util/auth/HeaderAuthorization.java Thu Nov 12 12:14:46 2015 +0100 @@ -21,7 +21,9 @@ import de.intevation.lada.model.land.LMessung; import de.intevation.lada.model.land.LProbe; +import de.intevation.lada.model.land.LStatusProtokoll; import de.intevation.lada.model.stamm.Auth; +import de.intevation.lada.model.stamm.AuthLstUmw; import de.intevation.lada.util.annotation.AuthorizationConfig; import de.intevation.lada.util.annotation.RepositoryConfig; import de.intevation.lada.util.data.QueryBuilder; @@ -236,17 +238,25 @@ List<Auth> auth = (List<Auth>)response.getData(); List<String> netzbetreiber = new ArrayList<String>(); List<String> messstellen = new ArrayList<String>(); + List<Integer> funktionen = new ArrayList<Integer>(); for (Auth a : auth) { - if (a.getNetzBetreiber() != null) { - netzbetreiber.add(a.getNetzBetreiber()); + if (a.getNetzbetreiberId() != null) { + netzbetreiber.add(a.getNetzbetreiberId()); } - if (a.getMessStelle() != null) { - messstellen.add(a.getMessStelle()); + if (a.getMstId() != null) { + messstellen.add(a.getMstId()); + } + if (a.getLaborMstId() != null) { + messstellen.add(a.getLaborMstId()); + } + if (a.getFunktionId() != null) { + funktionen.add(a.getFunktionId()); } } UserInfo userInfo = new UserInfo(); userInfo.setNetzbetreiber(netzbetreiber); userInfo.setMessstellen(messstellen); + userInfo.setFunktionen(funktionen); return userInfo; } @@ -509,7 +519,42 @@ else { messung.setOwner(false); } - messung.setReadonly(messung.getFertig()); + if (messung.getStatus() == null) { + messung.setReadonly(false); + } + else { + LStatusProtokoll status = repository.getByIdPlain( + LStatusProtokoll.class, + messung.getStatus(), + "land"); + messung.setReadonly( + status.getStatusWert() != 0 && status.getStatusWert() != 4); + } + + boolean statusEdit = false; + if (userInfo.getFunktionen().contains(3)) { + QueryBuilder<AuthLstUmw> lstFilter = new QueryBuilder<AuthLstUmw>( + repository.entityManager("stamm"), + AuthLstUmw.class); + lstFilter.or("lstId", userInfo.getMessstellen()); + List<AuthLstUmw> lsts = + repository.filterPlain(lstFilter.getQuery(), "stamm"); + for (int i = 0; i < lsts.size(); i++) { + if (lsts.get(i).getUmwId().equals(probe.getUmwId())) { + statusEdit = true; + } + } + } + else if (userInfo.getFunktionen().contains(2) && + userInfo.getNetzbetreiber().contains(probe.getNetzbetreiberId())) { + statusEdit = true; + } + else if (userInfo.getFunktionen().contains(1) && + userInfo.getMessstellen().contains(probe.getMstId())) { + statusEdit = true; + } + messung.setStatusEdit(statusEdit); + return messung; } @@ -527,14 +572,20 @@ manager, LMessung.class); builder.and("probeId", probeId); - builder.and("fertig", true); Response response = repository.filter(builder.getQuery(), "land"); @SuppressWarnings("unchecked") List<LMessung> messungen = (List<LMessung>) response.getData(); - if (messungen.isEmpty()) { - return false; + for (int i = 0; i < messungen.size(); i++) { + if (messungen.get(i).getStatus() == null) { + return false; + } + LStatusProtokoll status = repository.getByIdPlain( + LStatusProtokoll.class, messungen.get(i).getStatus(), "land"); + if (status.getStatusWert() != 0 && status.getStatusWert() != 4) { + return true; + } } - return true; + return false; } /**