annotate src/main/java/de/intevation/lada/util/auth/MessprogrammIdAuthorizer.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 588f6deae24a
children
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.util.rest.RequestMethod;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
17 import de.intevation.lada.util.rest.Response;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
18
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
19 public class MessprogrammIdAuthorizer extends BaseAuthorizer {
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 @Override
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
22 public <T> boolean isAuthorized(
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
23 Object data,
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
24 RequestMethod method,
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
25 UserInfo userInfo,
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
26 Class<T> clazz
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
27 ) {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
28 Method m;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
29 try {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
30 m = clazz.getMethod("getMessprogrammId");
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
31 } catch (NoSuchMethodException | SecurityException e1) {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
32 return false;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
33 }
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
34 Integer id;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
35 try {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
36 id = (Integer) m.invoke(data);
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
37 } catch (IllegalAccessException |
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
38 IllegalArgumentException |
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
39 InvocationTargetException e
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
40 ) {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
41 return false;
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 Messprogramm messprogramm =
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
44 repository.getByIdPlain(Messprogramm.class, id, "land");
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
45 if (userInfo.getMessstellen().contains(messprogramm.getMstId())) {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
46 return true;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
47 }
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
48 return false;
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
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
51 @SuppressWarnings("unchecked")
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
52 @Override
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
53 public <T> Response filter(
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
54 Response data,
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
55 UserInfo userInfo,
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
56 Class<T> clazz
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
57 ) {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
58 if (data.getData() instanceof List<?>) {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
59 List<Object> objects = new ArrayList<Object>();
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
60 for (Object object :(List<Object>)data.getData()) {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
61 objects.add(setAuthData(userInfo, object, clazz));
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
62 }
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
63 data.setData(objects);
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 else {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
66 Object object = data.getData();
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
67 data.setData(setAuthData(userInfo, object, clazz));
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
68 }
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
69 return data;
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 /**
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
72 * 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
73 *
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
74 * @param userInfo The user information.
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
75 * @param data The Response object containing the data.
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
76 * @param clazz The data object class.
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
77 * @return A Response object containing the data.
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
78 */
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
79 private <T> Object setAuthData(
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
80 UserInfo userInfo,
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
81 Object data,
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
82 Class<T> clazz
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
83 ) {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
84 try {
1288
d73cfd90ffc0 Fixed authorization for messprogramm ortszuordnung.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1265
diff changeset
85 Method getMessprogrammId = clazz.getMethod("getMessprogrammId");
1265
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
86 Integer id = null;
1288
d73cfd90ffc0 Fixed authorization for messprogramm ortszuordnung.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1265
diff changeset
87 if (getMessprogrammId != null) {
d73cfd90ffc0 Fixed authorization for messprogramm ortszuordnung.
Raimund Renkert <raimund.renkert@intevation.de>
parents: 1265
diff changeset
88 id = (Integer) getMessprogrammId.invoke(data);
1265
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
89 }
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
90 else {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
91 return null;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
92 }
1292
588f6deae24a Fix authorization for OrtszuordnungMp and friends.
Tom Gottfried <tom@intevation.de>
parents: 1288
diff changeset
93 Messprogramm messprogramm = repository.getByIdPlain(
588f6deae24a Fix authorization for OrtszuordnungMp and friends.
Tom Gottfried <tom@intevation.de>
parents: 1288
diff changeset
94 Messprogramm.class, id, "land");
1265
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
95
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
96 boolean owner = false;
1292
588f6deae24a Fix authorization for OrtszuordnungMp and friends.
Tom Gottfried <tom@intevation.de>
parents: 1288
diff changeset
97 if (userInfo.belongsTo(
588f6deae24a Fix authorization for OrtszuordnungMp and friends.
Tom Gottfried <tom@intevation.de>
parents: 1288
diff changeset
98 messprogramm.getMstId(),
588f6deae24a Fix authorization for OrtszuordnungMp and friends.
Tom Gottfried <tom@intevation.de>
parents: 1288
diff changeset
99 messprogramm.getLaborMstId())
588f6deae24a Fix authorization for OrtszuordnungMp and friends.
Tom Gottfried <tom@intevation.de>
parents: 1288
diff changeset
100 ) {
588f6deae24a Fix authorization for OrtszuordnungMp and friends.
Tom Gottfried <tom@intevation.de>
parents: 1288
diff changeset
101 owner = true;
1265
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
102 }
1292
588f6deae24a Fix authorization for OrtszuordnungMp and friends.
Tom Gottfried <tom@intevation.de>
parents: 1288
diff changeset
103 boolean readOnly = !owner;
1265
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
104
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
105 Method setOwner = clazz.getMethod("setOwner", boolean.class);
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
106 Method setReadonly = clazz.getMethod("setReadonly", boolean.class);
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
107 setOwner.invoke(data, owner);
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
108 setReadonly.invoke(data, readOnly);
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
109 } catch (NoSuchMethodException | SecurityException
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
110 | IllegalAccessException | IllegalArgumentException
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
111 | InvocationTargetException e) {
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
112 return null;
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
113 }
a1323ef2c330 Changed ortszuordnungs model in messprogramm.
Raimund Renkert <raimund.renkert@intevation.de>
parents:
diff changeset
114 return data;
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 }
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)