Skip to content

Commit 5a3eead

Browse files
authored
Merge pull request #398 from qbicsoftware/release-2023-10-10
Release 2023 10 10
2 parents 60cfbd9 + eb948c9 commit 5a3eead

File tree

210 files changed

+347
-276
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

210 files changed

+347
-276
lines changed

authorization/pom.xml

-39
This file was deleted.

database-connector/pom.xml

+2-8
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
<dependencies>
2222
<dependency>
2323
<groupId>life.qbic</groupId>
24-
<artifactId>user</artifactId>
24+
<artifactId>user-domain</artifactId>
2525
<version>0.26.1</version>
2626
<scope>compile</scope>
2727
</dependency>
@@ -83,7 +83,7 @@
8383
</dependency>
8484
<dependency>
8585
<groupId>life.qbic</groupId>
86-
<artifactId>projectmanagement</artifactId>
86+
<artifactId>projectmanagement-domain</artifactId>
8787
<version>0.26.1</version>
8888
<scope>compile</scope>
8989
</dependency>
@@ -96,11 +96,5 @@
9696
<groupId>org.springframework.security</groupId>
9797
<artifactId>spring-security-acl</artifactId>
9898
</dependency>
99-
<dependency>
100-
<groupId>life.qbic</groupId>
101-
<artifactId>authorization</artifactId>
102-
<version>0.26.1</version>
103-
<scope>compile</scope>
104-
</dependency>
10599
</dependencies>
106100
</project>

database-connector/src/main/java/life/qbic/projectmanagement/persistence/ProjectRepositoryImpl.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111

1212
import java.util.List;
1313
import java.util.Optional;
14-
import life.qbic.authorization.acl.ProjectAccessService;
15-
import life.qbic.authorization.authorities.aspects.CanCreateProject;
1614
import life.qbic.logging.api.Logger;
15+
import life.qbic.projectmanagement.application.authorization.acl.ProjectAccessService;
16+
import life.qbic.projectmanagement.application.authorization.authorities.aspects.CanCreateProject;
1717
import life.qbic.projectmanagement.domain.project.Project;
1818
import life.qbic.projectmanagement.domain.project.ProjectCode;
1919
import life.qbic.projectmanagement.domain.project.ProjectId;

pom.xml

+3-3
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,7 @@
1010
<version>0.26.1</version>
1111
<modules>
1212
<module>vaadinfrontend</module>
13-
<module>user</module>
14-
<module>authorization</module>
13+
<module>user-domain</module>
1514
<module>broadcasting</module>
1615
<module>newshandler</module>
1716
<module>database-connector</module>
@@ -20,8 +19,9 @@
2019
<module>subscription-provider</module>
2120
<module>subscription-api</module>
2221
<module>finances</module>
23-
<module>projectmanagement</module>
22+
<module>projectmanagement-domain</module>
2423
<module>domain-concept</module>
24+
<module>user-domain-api</module>
2525
</modules>
2626
<packaging>pom</packaging>
2727

projectmanagement/pom.xml projectmanagement-domain/pom.xml

+12-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
<version>0.26.1</version>
88
</parent>
99
<modelVersion>4.0.0</modelVersion>
10-
<artifactId>projectmanagement</artifactId>
11-
<name>projectmanagement</name>
10+
<artifactId>projectmanagement-domain</artifactId>
11+
<name>projectmanagement-domain</name>
1212
<url>http://maven.apache.org</url>
1313
<dependencies>
1414
<dependency>
@@ -77,5 +77,15 @@
7777
<groupId>org.jobrunr</groupId>
7878
<artifactId>jobrunr-spring-boot-3-starter</artifactId>
7979
</dependency>
80+
<dependency>
81+
<groupId>org.springframework.security</groupId>
82+
<artifactId>spring-security-acl</artifactId>
83+
</dependency>
84+
<dependency>
85+
<groupId>life.qbic.datamanager</groupId>
86+
<artifactId>user-domain-api</artifactId>
87+
<version>0.26.1</version>
88+
<scope>compile</scope>
89+
</dependency>
8090
</dependencies>
8191
</project>

authorization/src/main/java/life/qbic/authorization/application/AppContextProvider.java projectmanagement-domain/src/main/java/life/qbic/projectmanagement/application/AppContextProvider.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package life.qbic.authorization.application;
1+
package life.qbic.projectmanagement.application;
22

33
/**
44
* <b>App Context Provider</b>

authorization/src/main/java/life/qbic/authorization/application/Messages.java projectmanagement-domain/src/main/java/life/qbic/projectmanagement/application/Messages.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package life.qbic.authorization.application;
1+
package life.qbic.projectmanagement.application;
22

33
/**
44
* <b>Messages</b>

authorization/src/main/java/life/qbic/authorization/security/QbicUserDetails.java projectmanagement-domain/src/main/java/life/qbic/projectmanagement/application/authorization/QbicUserDetails.java

+14-16
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
package life.qbic.authorization.security;
1+
package life.qbic.projectmanagement.application.authorization;
22

33
import java.io.Serial;
44
import java.util.Collection;
55
import java.util.List;
6-
import life.qbic.authentication.domain.user.concept.User;
7-
import life.qbic.authentication.domain.user.concept.UserId;
6+
import java.util.Objects;
87
import org.springframework.security.core.GrantedAuthority;
98
import org.springframework.security.core.userdetails.UserDetails;
109

@@ -22,10 +21,7 @@
2221
public class QbicUserDetails implements UserDetails {
2322
@Serial
2423
private static final long serialVersionUID = 5812210012669790933L;
25-
private final UserId userId;
26-
private final String username;
27-
private final String password;
28-
private final boolean active;
24+
private final User user;
2925
private final List<GrantedAuthority> grantedAuthorities;
3026

3127
/**
@@ -35,10 +31,7 @@ public class QbicUserDetails implements UserDetails {
3531
* @since 1.0.0
3632
*/
3733
public QbicUserDetails(User user, List<GrantedAuthority> grantedAuthorities) {
38-
this.userId = user.id();
39-
this.username = user.emailAddress().get();
40-
this.password = user.getEncryptedPassword().get();
41-
this.active = user.isActive();
34+
this.user = Objects.requireNonNull(user);
4235
this.grantedAuthorities = List.copyOf(grantedAuthorities);
4336
}
4437

@@ -47,18 +40,23 @@ public Collection<? extends GrantedAuthority> getAuthorities() {
4740
return List.copyOf(grantedAuthorities);
4841
}
4942

50-
public UserId getUserId() {
51-
return userId;
43+
public String getUserId() {
44+
return user.id();
5245
}
5346

5447
@Override
5548
public String getPassword() {
56-
return password;
49+
return user.encryptedPassword();
5750
}
5851

5952
@Override
6053
public String getUsername() {
61-
return username;
54+
// Todo fix and use user ID as user ID instead of the mutable email-address
55+
// Rational: the user's email address is not guaranteed to be immutable, since we might add a feature in
56+
// the future to change user's email address. That means, the identification of the user by their
57+
// email address is error-prone and of risk. Since a user gets a UUID on registration, we can use this
58+
// to identify the user, since this ID will never change
59+
return user.emailAddress();
6260
}
6361

6462
@Override
@@ -78,7 +76,7 @@ public boolean isCredentialsNonExpired() {
7876

7977
@Override
8078
public boolean isEnabled() {
81-
return active;
79+
return user.isActive();
8280
}
8381

8482
public boolean hasAuthority(GrantedAuthority authority) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package life.qbic.projectmanagement.application.authorization;
2+
3+
/**
4+
* <b>User concept on application security level</b>
5+
*
6+
* @since 1.0.0
7+
*/
8+
public record User(String id, String fullName, String emailAddress, String encryptedPassword,
9+
boolean isActive) {
10+
11+
}

authorization/src/main/java/life/qbic/authorization/acl/ProjectAccessService.java projectmanagement-domain/src/main/java/life/qbic/projectmanagement/application/authorization/acl/ProjectAccessService.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
package life.qbic.authorization.acl;
1+
package life.qbic.projectmanagement.application.authorization.acl;
22

33
import java.util.List;
4-
import life.qbic.authentication.domain.user.concept.UserId;
54
import life.qbic.projectmanagement.domain.project.ProjectId;
65
import org.springframework.security.acls.model.Permission;
76
import org.springframework.security.core.GrantedAuthority;
@@ -18,9 +17,9 @@ public interface ProjectAccessService {
1817
* Lists all users which have a permission within the specific project
1918
*
2019
* @param projectId the identifier of the project
21-
* @return a list of UserIds which are associated with the project
20+
* @return a list of user ids which are associated with the project
2221
*/
23-
List<UserId> listUsers(ProjectId projectId);
22+
List<String> listUsers(ProjectId projectId);
2423

2524
/**
2625
* Lists all users which have a permission on the project

authorization/src/main/java/life/qbic/authorization/acl/ProjectAccessServiceImpl.java projectmanagement-domain/src/main/java/life/qbic/projectmanagement/application/authorization/acl/ProjectAccessServiceImpl.java

+3-4
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
package life.qbic.authorization.acl;
1+
package life.qbic.projectmanagement.application.authorization.acl;
22

33
import static java.util.Objects.requireNonNull;
44

55
import java.util.List;
66
import java.util.function.Predicate;
7-
import life.qbic.authentication.domain.user.concept.UserId;
8-
import life.qbic.authorization.security.QbicUserDetails;
7+
import life.qbic.projectmanagement.application.authorization.QbicUserDetails;
98
import life.qbic.projectmanagement.domain.project.Project;
109
import life.qbic.projectmanagement.domain.project.ProjectId;
1110
import org.springframework.beans.factory.annotation.Autowired;
@@ -38,7 +37,7 @@ public ProjectAccessServiceImpl(@Autowired MutableAclService aclService,
3837

3938
@Transactional
4039
@Override
41-
public List<UserId> listUsers(ProjectId projectId) {
40+
public List<String> listUsers(ProjectId projectId) {
4241
List<String> userNames = listUsernames(projectId);
4342
return userNames.stream().map(userDetailsService::loadUserByUsername)
4443
.filter(it -> it instanceof QbicUserDetails)

authorization/src/main/java/life/qbic/authorization/acl/QbicPermissionEvaluator.java projectmanagement-domain/src/main/java/life/qbic/projectmanagement/application/authorization/acl/QbicPermissionEvaluator.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package life.qbic.authorization.acl;
1+
package life.qbic.projectmanagement.application.authorization.acl;
22

33
import java.util.Optional;
44
import org.springframework.beans.factory.annotation.Autowired;

authorization/src/main/java/life/qbic/authorization/authorities/Permission.java projectmanagement-domain/src/main/java/life/qbic/projectmanagement/application/authorization/authorities/Permission.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package life.qbic.authorization.authorities;
1+
package life.qbic.projectmanagement.application.authorization.authorities;
22

33
import static java.util.Objects.requireNonNull;
44

authorization/src/main/java/life/qbic/authorization/authorities/QBiCUserAuthorityService.java projectmanagement-domain/src/main/java/life/qbic/projectmanagement/application/authorization/authorities/QbicUserAuthorityService.java

+5-6
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
1-
package life.qbic.authorization.authorities;
1+
package life.qbic.projectmanagement.application.authorization.authorities;
22

33
import java.util.ArrayList;
44
import java.util.List;
55
import java.util.stream.Stream;
6-
import life.qbic.authentication.domain.user.concept.UserId;
76
import org.springframework.beans.factory.annotation.Autowired;
87
import org.springframework.security.core.GrantedAuthority;
98
import org.springframework.stereotype.Service;
@@ -12,19 +11,19 @@
1211
* Provides granted authorities given a user
1312
*/
1413
@Service
15-
public class QBiCUserAuthorityService implements UserAuthorityProvider {
14+
public class QbicUserAuthorityService implements UserAuthorityProvider {
1615

1716
private final UserRoleRepository userRoleRepository;
1817

19-
public QBiCUserAuthorityService(
18+
public QbicUserAuthorityService(
2019
@Autowired UserRoleRepository userRoleRepository
2120
) {
2221
this.userRoleRepository = userRoleRepository;
2322
}
2423

2524
@Override
26-
public List<GrantedAuthority> getAuthoritiesByUserId(UserId userId) {
27-
List<UserRole> roles = userRoleRepository.findAllByUserId(userId.get());
25+
public List<GrantedAuthority> getAuthoritiesByUserId(String userId) {
26+
List<UserRole> roles = userRoleRepository.findAllByUserId(userId);
2827
return roles.stream().flatMap(this::getAuthoritiesForRole).toList();
2928
}
3029

authorization/src/main/java/life/qbic/authorization/authorities/Role.java projectmanagement-domain/src/main/java/life/qbic/projectmanagement/application/authorization/authorities/Role.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package life.qbic.authorization.authorities;
1+
package life.qbic.projectmanagement.application.authorization.authorities;
22

33
import static java.util.Objects.requireNonNull;
44

authorization/src/main/java/life/qbic/authorization/authorities/UserAuthorityProvider.java projectmanagement-domain/src/main/java/life/qbic/projectmanagement/application/authorization/authorities/UserAuthorityProvider.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
package life.qbic.authorization.authorities;
1+
package life.qbic.projectmanagement.application.authorization.authorities;
22

33
import java.util.List;
4-
import life.qbic.authentication.domain.user.concept.UserId;
54
import org.springframework.security.core.GrantedAuthority;
65

76
/**
@@ -15,5 +14,5 @@ public interface UserAuthorityProvider {
1514
* @param userId the userid to retrieve granted authorities for
1615
* @return a list of authorities granted to the user
1716
*/
18-
List<GrantedAuthority> getAuthoritiesByUserId(UserId userId);
17+
List<GrantedAuthority> getAuthoritiesByUserId(String userId);
1918
}

authorization/src/main/java/life/qbic/authorization/authorities/UserRole.java projectmanagement-domain/src/main/java/life/qbic/projectmanagement/application/authorization/authorities/UserRole.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package life.qbic.authorization.authorities;
1+
package life.qbic.projectmanagement.application.authorization.authorities;
22

33
import jakarta.persistence.Column;
44
import jakarta.persistence.Entity;

authorization/src/main/java/life/qbic/authorization/authorities/UserRoleRepository.java projectmanagement-domain/src/main/java/life/qbic/projectmanagement/application/authorization/authorities/UserRoleRepository.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package life.qbic.authorization.authorities;
1+
package life.qbic.projectmanagement.application.authorization.authorities;
22

33
import java.util.List;
44
import org.springframework.data.jpa.repository.JpaRepository;

authorization/src/main/java/life/qbic/authorization/authorities/aspects/CanCreateProject.java projectmanagement-domain/src/main/java/life/qbic/projectmanagement/application/authorization/authorities/aspects/CanCreateProject.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package life.qbic.authorization.authorities.aspects;
1+
package life.qbic.projectmanagement.application.authorization.authorities.aspects;
22

33
import org.springframework.security.access.prepost.PreAuthorize;
44

authorization/src/main/java/life/qbic/authorization/application/policy/ProjectAccessGrantedPolicy.java projectmanagement-domain/src/main/java/life/qbic/projectmanagement/application/policy/ProjectAccessGrantedPolicy.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
package life.qbic.authorization.application.policy;
1+
package life.qbic.projectmanagement.application.policy;
22

33
import java.util.Objects;
4-
import life.qbic.authorization.application.policy.directive.InformUserAboutGrantedAccess;
54
import life.qbic.domain.concepts.DomainEventDispatcher;
5+
import life.qbic.projectmanagement.application.policy.directive.InformUserAboutGrantedAccess;
66

77
/**
88
* <b>Policy: Project access granted</b>

0 commit comments

Comments
 (0)