Commit bb6de6b9cd3ca7552a06384aa94c5736cf74faca
1 parent
5e5b7c79
feature: RoleService fortgesetzt (WIP)
Showing
7 changed files
with
149 additions
and
32 deletions
README.md
@@ -28,9 +28,9 @@ Unter Windows muss der Git-Installer aus dem Internet heruntergeladen und instal | @@ -28,9 +28,9 @@ Unter Windows muss der Git-Installer aus dem Internet heruntergeladen und instal | ||
28 | 28 | ||
29 | In einem beliebigen Verzeichnis ausführen: | 29 | In einem beliebigen Verzeichnis ausführen: |
30 | 30 | ||
31 | -> git clone https://git.ziemers.de/edu/swXercise.git | 31 | +> git -c http.sslVerify=false clone https://git.ziemers.de/edu/swXercise.git |
32 | 32 | ||
33 | -Es wird hierbei ein neues Verzeichnis namens "swXercise" erstellt, in dem sich nun das Projekt befindet. | 33 | +Es wird hierbei ein neues Verzeichnis namens "swXercise" erstellt, in dem sich nun das Projekt befindet. Beim Klonen werden etwaige Zertifikatsfehler ignoriert (dies tritt trotz korrekten Zertifikats gelegentlich unter Windows auf). |
34 | 34 | ||
35 | ## Projekt in die Entwicklungsumgebung integrieren | 35 | ## Projekt in die Entwicklungsumgebung integrieren |
36 | 36 | ||
@@ -200,3 +200,7 @@ Quelle: https://tools.jboss.org/downloads/jbosstools/neon/4.4.3.Final.html | @@ -200,3 +200,7 @@ Quelle: https://tools.jboss.org/downloads/jbosstools/neon/4.4.3.Final.html | ||
200 | - Reiter "Server" und den zuvor bekanntgemachten JBoss-Server wählen | 200 | - Reiter "Server" und den zuvor bekanntgemachten JBoss-Server wählen |
201 | - Reiter "Deployment" | 201 | - Reiter "Deployment" |
202 | - Selected artifacts will be deployed at server startup -> das gewünschte Maven-Artefakt "swXercise" auswählen, und zwar das mit "exploded" markierte; deployt als ausgepackte Ordnerstruktur und nicht als "WAR-Datei" (vorteilhaft beim Hot-Deployment) | 202 | - Selected artifacts will be deployed at server startup -> das gewünschte Maven-Artefakt "swXercise" auswählen, und zwar das mit "exploded" markierte; deployt als ausgepackte Ordnerstruktur und nicht als "WAR-Datei" (vorteilhaft beim Hot-Deployment) |
203 | + | ||
204 | +## Projekt verwenden | ||
205 | + | ||
206 | +Beim Deployen des Projekts auf den Application Server wird automatisch der Benutzer "admin" mit dem Kennwort "admin" erstellt und diesem die Rolle "Adminrolle" zugewiesen. Mit ihm kann man sich anmelden und erste Übungen vornehmen. | ||
203 | \ No newline at end of file | 207 | \ No newline at end of file |
src/main/java/net/ziemers/swxercise/db/dao/user/RoleDao.java
@@ -14,6 +14,26 @@ import javax.ejb.Stateless; | @@ -14,6 +14,26 @@ import javax.ejb.Stateless; | ||
14 | public class RoleDao extends GenericDao { | 14 | public class RoleDao extends GenericDao { |
15 | 15 | ||
16 | /** | 16 | /** |
17 | + * Findet eine {@link Role} aufgrund ihrer Id. | ||
18 | + * | ||
19 | + * @param id die Id der gewünschten Rolle | ||
20 | + * @return die Rolle oder <code>null</code>, falls es keine gibt. | ||
21 | + */ | ||
22 | + public Role findById(final Long id) { | ||
23 | + Role role = null; | ||
24 | + | ||
25 | + try { | ||
26 | + // ermittelt den ersten Datensatz mit der gesuchten Id, auch wenn | ||
27 | + // er sich nicht im Persistence Context befindet | ||
28 | + role = (Role) entityManager.createNamedQuery("Role.findById") | ||
29 | + .setParameter("id", id).getSingleResult(); | ||
30 | + } catch (Exception e) { | ||
31 | + /* nix */ | ||
32 | + } | ||
33 | + return role; | ||
34 | + } | ||
35 | + | ||
36 | + /** | ||
17 | * Findet eine {@link Role} aufgrund ihres Rollennamens. | 37 | * Findet eine {@link Role} aufgrund ihres Rollennamens. |
18 | * | 38 | * |
19 | * @param name der name der gewünschten Rolle | 39 | * @param name der name der gewünschten Rolle |
src/main/java/net/ziemers/swxercise/lg/model/user/Role.java
@@ -13,7 +13,9 @@ import java.util.HashSet; | @@ -13,7 +13,9 @@ import java.util.HashSet; | ||
13 | * Eine Rolle kann von einer Vaterrolle erben. Somit umfasst diese Rolle auch alle Rechte der Vaterrolle. | 13 | * Eine Rolle kann von einer Vaterrolle erben. Somit umfasst diese Rolle auch alle Rechte der Vaterrolle. |
14 | */ | 14 | */ |
15 | @Entity | 15 | @Entity |
16 | -@NamedQuery(name = "Role.findByName", query = "SELECT r FROM Role r WHERE lower(r.name) = lower(:name)") | 16 | +@NamedQueries({ |
17 | + @NamedQuery(name = "Role.findById", query = "SELECT r FROM Role r WHERE r.id = :id"), | ||
18 | + @NamedQuery(name = "Role.findByName", query = "SELECT r FROM Role r WHERE lower(r.name) = lower(:name)")}) | ||
17 | public class Role extends BaseEntity { | 19 | public class Role extends BaseEntity { |
18 | 20 | ||
19 | @NotNull | 21 | @NotNull |
src/main/java/net/ziemers/swxercise/lg/user/service/RoleService.java
@@ -2,6 +2,7 @@ package net.ziemers.swxercise.lg.user.service; | @@ -2,6 +2,7 @@ package net.ziemers.swxercise.lg.user.service; | ||
2 | 2 | ||
3 | import net.ziemers.swxercise.db.dao.user.RoleDao; | 3 | import net.ziemers.swxercise.db.dao.user.RoleDao; |
4 | import net.ziemers.swxercise.lg.model.user.Role; | 4 | import net.ziemers.swxercise.lg.model.user.Role; |
5 | +import net.ziemers.swxercise.lg.model.user.User; | ||
5 | import net.ziemers.swxercise.lg.user.dto.RoleDto; | 6 | import net.ziemers.swxercise.lg.user.dto.RoleDto; |
6 | 7 | ||
7 | import javax.ejb.Stateless; | 8 | import javax.ejb.Stateless; |
@@ -17,6 +18,9 @@ public class RoleService { | @@ -17,6 +18,9 @@ public class RoleService { | ||
17 | @Inject | 18 | @Inject |
18 | private RoleDao dao; | 19 | private RoleDao dao; |
19 | 20 | ||
21 | + @Inject | ||
22 | + private SessionContext sessionContext; | ||
23 | + | ||
20 | /** | 24 | /** |
21 | * Findet alle existierenden Rollen. | 25 | * Findet alle existierenden Rollen. |
22 | * | 26 | * |
@@ -25,6 +29,29 @@ public class RoleService { | @@ -25,6 +29,29 @@ public class RoleService { | ||
25 | public Collection<Role> findAllRoles() { return dao.findAll(Role.class); } | 29 | public Collection<Role> findAllRoles() { return dao.findAll(Role.class); } |
26 | 30 | ||
27 | /** | 31 | /** |
32 | + * Findet die Rolle mit der übergebenen Id. | ||
33 | + * | ||
34 | + * @param id die Id der gesuchten Rolle. | ||
35 | + * @return die gesuchte Rolle, oder <code>null</code>, falls eine solche nicht existiert. | ||
36 | + */ | ||
37 | + public Role findRole(final Long id) { | ||
38 | + return dao.findById(id); | ||
39 | + } | ||
40 | + | ||
41 | + /** | ||
42 | + * Findet die Rolle des zurzeit angemeldeten Benutzers. | ||
43 | + * | ||
44 | + * @return die gesuchte Rolle, oder <code>null</code>, falls eine solche nicht existiert. | ||
45 | + */ | ||
46 | + public Role findRole() { | ||
47 | + final User user = sessionContext.getUser(); | ||
48 | + if (user != null && user.getProfile() != null) { | ||
49 | + return user.getProfile().getRole(); | ||
50 | + } | ||
51 | + return null; | ||
52 | + } | ||
53 | + | ||
54 | + /** | ||
28 | * Erstellt eine neue Rolle, sofern noch keine mit dem selben Namen existiert. | 55 | * Erstellt eine neue Rolle, sofern noch keine mit dem selben Namen existiert. |
29 | * Zwischen der Groß- und Kleinschreibung wird nicht unterschieden. | 56 | * Zwischen der Groß- und Kleinschreibung wird nicht unterschieden. |
30 | * | 57 | * |
@@ -41,4 +68,65 @@ public class RoleService { | @@ -41,4 +68,65 @@ public class RoleService { | ||
41 | return null; | 68 | return null; |
42 | } | 69 | } |
43 | 70 | ||
71 | + /** | ||
72 | + * Aktualisiert die Rolle mit der übergebenen Id. | ||
73 | + * | ||
74 | + * @param id die Id der zu aktualisierenden Rolle | ||
75 | + * @param dto das {@link RoleDto} enthält die Eigenschaften der zu aktualisierenden Rolle | ||
76 | + * @return <code>true</code>, wenn das Aktualisieren der Rolle erfolgreich war. | ||
77 | + */ | ||
78 | + public boolean updateRole(final Long id, final RoleDto dto) { | ||
79 | + final Role role = dao.findById(id); | ||
80 | + if (role != null) { | ||
81 | + // TODO noch zu implementieren | ||
82 | + return false; | ||
83 | + } | ||
84 | + return false; | ||
85 | + } | ||
86 | + | ||
87 | + /** | ||
88 | + * Aktualisiert die Rolle des zurzeit angemeldeten Benutzers. | ||
89 | + * | ||
90 | + * @param dto das {@link RoleDto} enthält die Eigenschaften der zu aktualisierenden Rolle | ||
91 | + * @return <code>true</code>, wenn das Aktualisieren der Rolle erfolgreich war. | ||
92 | + */ | ||
93 | + public boolean updateRole(final RoleDto dto) { | ||
94 | + // ist zurzeit ein Benutzer angemeldet, können wir dessen Rolle aktualisieren | ||
95 | + final User user = sessionContext.getUser(); | ||
96 | + if (user != null) { | ||
97 | + // TODO noch zu implementieren | ||
98 | + return false; | ||
99 | + } | ||
100 | + return false; | ||
101 | + } | ||
102 | + | ||
103 | + /** | ||
104 | + * Löscht die Rolle mit der übergebenen Id. | ||
105 | + * | ||
106 | + * @param id die Id der zu löschenden Rolle. | ||
107 | + */ | ||
108 | + public Role deleteRole(final Long id) { | ||
109 | + return dao.remove(Role.class, id); | ||
110 | + } | ||
111 | + | ||
112 | + /** | ||
113 | + * Löscht die Rolle des zurzeit angemeldeten Benutzers. | ||
114 | + * | ||
115 | + * @return <code>true</code>, wenn das Löschen der Rolle des angemeldeten Benutzers erfolgreich war. | ||
116 | + */ | ||
117 | + public boolean deleteRole() { | ||
118 | + // ist zurzeit ein Benutzer angemeldet, können wir dessen Rolle löschen | ||
119 | + final User user = sessionContext.getUser(); | ||
120 | + if (user != null && user.getProfile() != null) { | ||
121 | + final Role role = user.getProfile().getRole(); | ||
122 | + if (role != null) { | ||
123 | + user.getProfile().setRole(null); | ||
124 | + dao.save(user); | ||
125 | + dao.remove(Role.class, role.getId()); | ||
126 | + return true; | ||
127 | + } | ||
128 | + } | ||
129 | + return false; | ||
130 | + } | ||
131 | + | ||
44 | } | 132 | } |
src/main/java/net/ziemers/swxercise/lg/user/service/UserService.java
@@ -60,13 +60,7 @@ public class UserService { | @@ -60,13 +60,7 @@ public class UserService { | ||
60 | * | 60 | * |
61 | * @return den gesuchten Benutzer, oder <code>null</code>, falls ein solcher nicht existiert. | 61 | * @return den gesuchten Benutzer, oder <code>null</code>, falls ein solcher nicht existiert. |
62 | */ | 62 | */ |
63 | - public User findUser() { | ||
64 | - final User user = sessionContext.getUser(); | ||
65 | - if (user != null) { | ||
66 | - return dao.findById(user.getId()); | ||
67 | - } | ||
68 | - return null; | ||
69 | - } | 63 | + public User findUser() { return sessionContext.getUser(); } |
70 | 64 | ||
71 | /** | 65 | /** |
72 | * Findet alle existierenden Benutzer. | 66 | * Findet alle existierenden Benutzer. |
src/main/java/net/ziemers/swxercise/ui/RoleViewController.java
@@ -54,10 +54,8 @@ public class RoleViewController { | @@ -54,10 +54,8 @@ public class RoleViewController { | ||
54 | @Path("v1/role/{id}") | 54 | @Path("v1/role/{id}") |
55 | @Produces(MediaType.APPLICATION_JSON) | 55 | @Produces(MediaType.APPLICATION_JSON) |
56 | @RolesAllowed(RightState.Constants.ADMIN) | 56 | @RolesAllowed(RightState.Constants.ADMIN) |
57 | - public User getRole(@PathParam("id") Long id) { | ||
58 | - // TODO noch zu implementieren | ||
59 | - //return roleService.findRole(id); | ||
60 | - return null; | 57 | + public Role getRole(@PathParam("id") Long id) { |
58 | + return roleService.findRole(id); | ||
61 | } | 59 | } |
62 | 60 | ||
63 | /** | 61 | /** |
@@ -72,10 +70,8 @@ public class RoleViewController { | @@ -72,10 +70,8 @@ public class RoleViewController { | ||
72 | @Path("v1/role") | 70 | @Path("v1/role") |
73 | @Produces(MediaType.APPLICATION_JSON) | 71 | @Produces(MediaType.APPLICATION_JSON) |
74 | @RolesAllowed(RightState.Constants.LOGGED_IN) | 72 | @RolesAllowed(RightState.Constants.LOGGED_IN) |
75 | - public User getRole() { | ||
76 | - // TODO noch zu implmentieren | ||
77 | - //return userService.findUser(); | ||
78 | - return null; | 73 | + public Role getRole() { |
74 | + return roleService.findRole(); | ||
79 | } | 75 | } |
80 | 76 | ||
81 | /** | 77 | /** |
@@ -118,10 +114,9 @@ public class RoleViewController { | @@ -118,10 +114,9 @@ public class RoleViewController { | ||
118 | @Produces(MediaType.APPLICATION_JSON) | 114 | @Produces(MediaType.APPLICATION_JSON) |
119 | @RolesAllowed(RightState.Constants.ADMIN) | 115 | @RolesAllowed(RightState.Constants.ADMIN) |
120 | public RestResponse updateRole(@PathParam("id") Long id, RoleDto dto) { | 116 | public RestResponse updateRole(@PathParam("id") Long id, RoleDto dto) { |
121 | - // TODO noch zu implementieren | ||
122 | - //if (roleService.updateRole(id, dto)) { | ||
123 | - // return new RestResponse(); | ||
124 | - //} | 117 | + if (roleService.updateRole(id, dto)) { |
118 | + return new RestResponse(); | ||
119 | + } | ||
125 | return new RestResponse(ResponseState.FAILED); | 120 | return new RestResponse(ResponseState.FAILED); |
126 | } | 121 | } |
127 | 122 | ||
@@ -143,10 +138,9 @@ public class RoleViewController { | @@ -143,10 +138,9 @@ public class RoleViewController { | ||
143 | @Produces(MediaType.APPLICATION_JSON) | 138 | @Produces(MediaType.APPLICATION_JSON) |
144 | @RolesAllowed(RightState.Constants.LOGGED_IN) | 139 | @RolesAllowed(RightState.Constants.LOGGED_IN) |
145 | public RestResponse updateRole(RoleDto dto) { | 140 | public RestResponse updateRole(RoleDto dto) { |
146 | - // TODO noch zu implementieren | ||
147 | - //if (roleService.updateRole(dto)) { | ||
148 | - // return new RestResponse(); | ||
149 | - //} | 141 | + if (roleService.updateRole(dto)) { |
142 | + return new RestResponse(); | ||
143 | + } | ||
150 | return new RestResponse(ResponseState.FAILED); | 144 | return new RestResponse(ResponseState.FAILED); |
151 | } | 145 | } |
152 | 146 | ||
@@ -164,8 +158,7 @@ public class RoleViewController { | @@ -164,8 +158,7 @@ public class RoleViewController { | ||
164 | @Produces(MediaType.APPLICATION_JSON) | 158 | @Produces(MediaType.APPLICATION_JSON) |
165 | @RolesAllowed(RightState.Constants.ADMIN) | 159 | @RolesAllowed(RightState.Constants.ADMIN) |
166 | public RestResponse deletetRole(@PathParam("id") Long id) { | 160 | public RestResponse deletetRole(@PathParam("id") Long id) { |
167 | - // TODO noch zu implementieren | ||
168 | - //roleService.deleteRole(id); | 161 | + roleService.deleteRole(id); |
169 | return new RestResponse(); | 162 | return new RestResponse(); |
170 | } | 163 | } |
171 | 164 | ||
@@ -182,10 +175,9 @@ public class RoleViewController { | @@ -182,10 +175,9 @@ public class RoleViewController { | ||
182 | @Produces(MediaType.APPLICATION_JSON) | 175 | @Produces(MediaType.APPLICATION_JSON) |
183 | @RolesAllowed(RightState.Constants.LOGGED_IN) | 176 | @RolesAllowed(RightState.Constants.LOGGED_IN) |
184 | public RestResponse deleteRole() { | 177 | public RestResponse deleteRole() { |
185 | - // TODO noch zu implementieren | ||
186 | - //if (roleService.deleteRole()) { | ||
187 | - // return new RestResponse(); | ||
188 | - //} | 178 | + if (roleService.deleteRole()) { |
179 | + return new RestResponse(); | ||
180 | + } | ||
189 | return new RestResponse(ResponseState.FAILED); | 181 | return new RestResponse(ResponseState.FAILED); |
190 | } | 182 | } |
191 | 183 |
src/main/webapp/index.jsp
0 → 100644
1 | +<%-- | ||
2 | + Created by IntelliJ IDEA. | ||
3 | + User: tziemer | ||
4 | + Date: 20.06.17 | ||
5 | + Time: 17:49 | ||
6 | + To change this template use File | Settings | File Templates. | ||
7 | +--%> | ||
8 | +<%@ page contentType="text/html;charset=UTF-8" language="java" %> | ||
9 | +<html> | ||
10 | +<head> | ||
11 | + <title>swXercise Application</title> | ||
12 | +</head> | ||
13 | +<body> | ||
14 | + | ||
15 | +</body> | ||
16 | + <h2>swXercise Application is running.</h2> | ||
17 | +</html> |