summaryrefslogtreecommitdiff
path: root/src/main/java/DNPM/security/SecurityService.java
diff options
context:
space:
mode:
authorPaul-Christian Volkmer2023-04-10 16:45:58 +0200
committerGitHub2023-04-10 16:45:58 +0200
commit262ed35378a64490e335d95a46f56bb51748c10d (patch)
tree09326cbfd5e71f3db1603cef027c1968aaefedbe /src/main/java/DNPM/security/SecurityService.java
parent08082f9a7d787c813ce32301412e41ad0137e253 (diff)
parentf2dc5b014d68fa61bacd5f9928eedd0c4c882070 (diff)
Merge pull request #25 from CCC-MF/issue_24
Möglichkeit zu Berechtigungsprüfung auf Patienten- und Prozedurdaten
Diffstat (limited to 'src/main/java/DNPM/security/SecurityService.java')
-rw-r--r--src/main/java/DNPM/security/SecurityService.java60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/main/java/DNPM/security/SecurityService.java b/src/main/java/DNPM/security/SecurityService.java
new file mode 100644
index 0000000..479701f
--- /dev/null
+++ b/src/main/java/DNPM/security/SecurityService.java
@@ -0,0 +1,60 @@
+package DNPM.security;
+
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.stereotype.Service;
+
+import javax.sql.DataSource;
+import java.util.List;
+
+/**
+ * Service mit Methoden zum Feststellen von sicherheitsrelevanten Informationen eines Benutzers
+ */
+@Service
+public class SecurityService {
+
+ private final JdbcTemplate jdbcTemplate;
+
+ public SecurityService(final DataSource dataSource) {
+ this.jdbcTemplate = new JdbcTemplate(dataSource);
+ }
+
+ List<String> getPersonPoolIdsForPermission(Authentication authentication, PermissionType permissionType) {
+ var sql = "SELECT p.kennung FROM personenstamm_zugriff " +
+ " JOIN usergroup u ON personenstamm_zugriff.benutzergruppe_id = u.id " +
+ " JOIN akteur_usergroup au ON u.id = au.usergroup_id " +
+ " JOIN akteur a ON au.akteur_id = a.id " +
+ " JOIN personenstamm p on personenstamm_zugriff.personenstamm_id = p.id " +
+ " WHERE a.login = ? AND a.aktiv AND a.anmelden_moeglich ";
+
+ if (PermissionType.READ_WRITE == permissionType) {
+ sql += " AND personenstamm_zugriff.bearbeiten ";
+ }
+
+ var userDetails = (UserDetails)authentication.getPrincipal();
+
+ return jdbcTemplate
+ .query(sql, new Object[]{userDetails.getUsername()}, (rs, rowNum) -> rs.getString("kennung"));
+ }
+
+ List<String> getFormNamesForPermission(Authentication authentication, PermissionType permissionType) {
+
+ var sql = "SELECT df.name FROM formular_usergroup_zugriff " +
+ " JOIN data_form df ON formular_usergroup_zugriff.formular_id = df.id " +
+ " JOIN usergroup u ON formular_usergroup_zugriff.usergroup_id = u.id " +
+ " JOIN akteur_usergroup au ON u.id = au.usergroup_id " +
+ " JOIN akteur a on au.akteur_id = a.id " +
+ " WHERE a.login = ? AND a.aktiv AND a.anmelden_moeglich ";
+
+ if (PermissionType.READ_WRITE == permissionType) {
+ sql += " AND formular_usergroup_zugriff.bearbeiten ";
+ }
+
+ var userDetails = (UserDetails)authentication.getPrincipal();
+
+ return jdbcTemplate
+ .query(sql, new Object[]{userDetails.getUsername()}, (rs, rowNum) -> rs.getString("name"));
+ }
+
+}