annotate src/main/java/de/intevation/lada/util/auth/MessprogrammIdAuthorizer.java @ 1265:a1323ef2c330

Changed ortszuordnungs model in messprogramm.
author Raimund Renkert <raimund.renkert@intevation.de>
date Fri, 27 Jan 2017 15:14:12 +0100
parents
children d73cfd90ffc0
rev   line source
1265
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
1 /* Copyright (C) 2013 by Bundesamt fuer Strahlenschutz
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
2 * Software engineering by Intevation GmbH
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
3 *
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
4 * This file is Free Software under the GNU GPL (v>=3)
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
6 * the documentation coming with IMIS-Labordaten-Application for details.
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
7 */
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
8 package de.intevation.lada.util.auth;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
9
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
10 import java.lang.reflect.InvocationTargetException;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
11 import java.lang.reflect.Method;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
12 import java.util.ArrayList;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
13 import java.util.List;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
14
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
15 import de.intevation.lada.model.land.Messprogramm;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
16 import de.intevation.lada.model.land.Probe;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
17 import de.intevation.lada.model.stammdaten.MessStelle;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
18 import de.intevation.lada.util.rest.RequestMethod;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
19 import de.intevation.lada.util.rest.Response;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
20
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
21 public class MessprogrammIdAuthorizer extends BaseAuthorizer {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
22
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
23 @Override
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
24 public <T> boolean isAuthorized(
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
25 Object data,
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
26 RequestMethod method,
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
27 UserInfo userInfo,
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
28 Class<T> clazz
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
29 ) {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
30 Method m;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
31 try {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
32 m = clazz.getMethod("getMessprogrammId");
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
33 } catch (NoSuchMethodException | SecurityException e1) {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
34 return false;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
35 }
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
36 Integer id;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
37 try {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
38 id = (Integer) m.invoke(data);
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
39 } catch (IllegalAccessException |
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
40 IllegalArgumentException |
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
41 InvocationTargetException e
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
42 ) {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
43 return false;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
44 }
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
45 Messprogramm messprogramm =
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
46 repository.getByIdPlain(Messprogramm.class, id, "land");
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
47 if (userInfo.getMessstellen().contains(messprogramm.getMstId())) {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
48 return true;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
49 }
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
50 return false;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
51 }
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
52
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
53 @SuppressWarnings("unchecked")
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
54 @Override
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
55 public <T> Response filter(
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
56 Response data,
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
57 UserInfo userInfo,
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
58 Class<T> clazz
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
59 ) {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
60 if (data.getData() instanceof List<?>) {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
61 List<Object> objects = new ArrayList<Object>();
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
62 for (Object object :(List<Object>)data.getData()) {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
63 objects.add(setAuthData(userInfo, object, clazz));
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
64 }
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
65 data.setData(objects);
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
66 }
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
67 else {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
68 Object object = data.getData();
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
69 data.setData(setAuthData(userInfo, object, clazz));
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
70 }
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
71 return data;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
72 }
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
73 /**
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
74 * Authorize a single data object that has a probeId Attribute.
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
75 *
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
76 * @param userInfo The user information.
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
77 * @param data The Response object containing the data.
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
78 * @param clazz The data object class.
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
79 * @return A Response object containing the data.
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
80 */
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
81 private <T> Object setAuthData(
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
82 UserInfo userInfo,
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
83 Object data,
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
84 Class<T> clazz
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
85 ) {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
86 try {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
87 Method getProbeId = clazz.getMethod("getProbeId");
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
88 Integer id = null;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
89 if (getProbeId != null) {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
90 id = (Integer) getProbeId.invoke(data);
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
91 }
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
92 else {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
93 return null;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
94 }
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
95 Probe probe =
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
96 (Probe)repository.getById(Probe.class, id, "land").getData();
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
97
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
98 boolean readOnly = true;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
99 boolean owner = false;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
100 MessStelle mst = repository.getByIdPlain(MessStelle.class, probe.getMstId(), "stamm");
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
101 if (!userInfo.getNetzbetreiber().contains(
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
102 mst.getNetzbetreiberId())) {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
103 owner = false;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
104 readOnly = true;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
105 }
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
106 else {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
107 if (userInfo.belongsTo(probe.getMstId(), probe.getLaborMstId())) {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
108 owner = true;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
109 }
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
110 else {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
111 owner = false;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
112 }
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
113 readOnly = this.isProbeReadOnly(id);
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
114 }
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
115
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
116 Method setOwner = clazz.getMethod("setOwner", boolean.class);
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
117 Method setReadonly = clazz.getMethod("setReadonly", boolean.class);
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
118 setOwner.invoke(data, owner);
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
119 setReadonly.invoke(data, readOnly);
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
120 } catch (NoSuchMethodException | SecurityException
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
121 | IllegalAccessException | IllegalArgumentException
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
122 | InvocationTargetException e) {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
123 return null;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
124 }
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
125 return data;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
126 }
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
127 }
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)