Mercurial > lada > lada-server
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 } |