RoleService.java
6.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
package net.ziemers.swxercise.lg.user.service;
import net.ziemers.swxercise.db.dao.user.RoleDao;
import net.ziemers.swxercise.lg.model.user.Role;
import net.ziemers.swxercise.lg.model.user.User;
import net.ziemers.swxercise.lg.user.dto.RoleDto;
import net.ziemers.swxercise.lg.user.enums.RightState;
import javax.ejb.Stateless;
import javax.inject.Inject;
import java.util.Collection;
/**
* Diese Klasse stellt alle Dienste im Kontext einer Rollen- und Rechteverwaltung zur Verfügung.
*
* Copyright (c) 2017 Dipl.-Inform. Thomas Ziemer
*
* This file is part of swXercise.
*
* swXercise is free software: you can redistribute it and/or modify it under the terms of the
* GNU General Public License as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version.
*
* swXercise is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with swXercise.
* If not, see <http://www.gnu.org/licenses/>.
*/
@Stateless
public class RoleService {
@Inject
private RoleDao dao;
@Inject
private SessionContext sessionContext;
/**
* Findet alle existierenden Rollen.
*
* @return alle Rollen, oder eine leere Collection, falls keine existieren.
*/
public Collection<Role> findAllRoles() {
return dao.findAll(Role.class);
}
/**
* Findet die Rolle mit der übergebenen Id.
*
* @param id die Id der gesuchten Rolle.
* @return die gesuchte Rolle, oder <code>null</code>, falls eine solche nicht existiert.
*/
public Role findRole(final Long id) {
return dao.findById(id);
}
/**
* Findet die Rolle des zurzeit angemeldeten Benutzers.
*
* @return die gesuchte Rolle, oder <code>null</code>, falls eine solche nicht existiert.
*/
public Role findRole() {
final User user = sessionContext.getUser();
if (user != null && user.getProfile() != null) {
return user.getProfile().getRole();
}
return null;
}
/**
* Erstellt eine neue Rolle, sofern noch keine mit dem selben Namen existiert.
* Zwischen der Groß- und Kleinschreibung wird nicht unterschieden.
*
* @param dto das {@link RoleDto} enthält die Eigenschaften der zu erstellenden Rolle
* @return die Id der neuen Rolle, wenn die Erstellung erfolgreich war.
*/
public Long createRole(final RoleDto dto) {
Role role = dao.findByName(dto.getName());
if (role == null) {
role = new Role(dto.getName(), dto.getRight());
return dao.save(role);
}
return null;
}
/**
* Aktualisiert die Rolle mit der übergebenen Id.
*
* @param id die Id der zu aktualisierenden Rolle
* @param dto das {@link RoleDto} enthält die Eigenschaften der zu aktualisierenden Rolle
* @return <code>true</code>, wenn das Aktualisieren der Rolle erfolgreich war.
*/
public boolean updateRole(final Long id, final RoleDto dto) {
final Role role = dao.findById(id);
if (role != null) {
// TODO noch zu implementieren
return false;
}
return false;
}
/**
* Aktualisiert die Rolle des zurzeit angemeldeten Benutzers.
*
* @param dto das {@link RoleDto} enthält die Eigenschaften der zu aktualisierenden Rolle
* @return <code>true</code>, wenn das Aktualisieren der Rolle erfolgreich war.
*/
public boolean updateRole(final RoleDto dto) {
// ist zurzeit ein Benutzer angemeldet, können wir dessen Rolle aktualisieren
final User user = sessionContext.getUser();
if (user != null) {
// TODO noch zu implementieren
return false;
}
return false;
}
/**
* Löscht die Rolle mit der übergebenen Id.
*
* @param id die Id der zu löschenden Rolle.
*/
public Role deleteRole(final Long id) {
return dao.remove(Role.class, id);
}
/**
* Löscht die Rolle des zurzeit angemeldeten Benutzers.
*
* @return <code>true</code>, wenn das Löschen der Rolle des angemeldeten Benutzers erfolgreich war.
*/
public boolean deleteRole() {
// ist zurzeit ein Benutzer angemeldet, können wir dessen Rolle löschen
final User user = sessionContext.getUser();
if (user != null && user.getProfile() != null) {
final Role role = user.getProfile().getRole();
if (role != null) {
user.getProfile().setRole(null);
dao.save(user);
dao.remove(Role.class, role.getId());
return true;
}
}
return false;
}
/**
* Verknüpft zwei Rollen in einer Vater-/Kindbeziehung.
*
* @param childName der Name der gewünschten Kindrolle
* @param parentName der Name der gewünschten Vaterrolle
* @return <code>true</code>, wenn die Verknüpfung erfolgreich durchgeführt werden konnte.
*/
public boolean linkRoles(final String childName, final String parentName) {
final Role childRole = dao.findByName(childName);
if (childRole != null) {
final Role parentRole = dao.findByName(parentName);
if (parentRole != null) {
childRole.setParent(parentRole);
return dao.saveOrUpdate(childRole) != null;
}
}
return false;
}
/**
* Fügt einer Rolle ein neues Recht hinzu.
*
* @param id die Id der gewünschten Rolle
* @param rightName der Name des gewünschten Rechts
* @return <code>true</code>, wenn das Hinzufügen erfolgreich durchgeführt werden konnte.
*/
public boolean addRight(final Long id, final String rightName) {
final Role role = dao.findById(id);
if (role != null) {
final RightState right = RightState.getByName(rightName);
if (right != null) {
return role.addRight(right);
}
}
return false;
}
}