Skip to content

Commit 19f1bb3

Browse files
committed
[NAE-2070] Admin create/edit endpoints
- migration of changes done in netgrif-modules project
1 parent 86ee017 commit 19f1bb3

16 files changed

Lines changed: 284 additions & 41 deletions

File tree

nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/AbstractUser.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ public abstract class AbstractUser implements IUser, Serializable {
2626

2727
protected Set<ProcessRole> processRoles;
2828

29+
protected Set<ProcessRole> negativeProcessRoles;
30+
2931
protected Set<String> groupIds;
3032

3133
@BsonIgnore
@@ -39,6 +41,7 @@ public AbstractUser() {
3941
groupIds = new HashSet<>();
4042
groups = new HashSet<>();
4143
processRoles = new HashSet<>();
44+
negativeProcessRoles = new HashSet<>();
4245
}
4346

4447
public void addAuthority(Authority authority) {
@@ -62,6 +65,16 @@ public void removeProcessRole(ProcessRole role) {
6265
processRoles.remove(role);
6366
}
6467

68+
public void addNegativeProcessRole(ProcessRole role) {
69+
if (negativeProcessRoles.stream().anyMatch(it -> it.getStringId().equals(role.getStringId())))
70+
return;
71+
negativeProcessRoles.add(role);
72+
}
73+
74+
public void removeNegativeProcessRole(ProcessRole role) {
75+
negativeProcessRoles.remove(role);
76+
}
77+
6578
public void addGroup(Group group) {
6679
this.groupIds.add(group.getStringId());
6780
this.groups.add(group);

nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/Actor.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,20 @@ public interface Actor extends Serializable {
4141
* */
4242
Set<ProcessRole> getProcessRoles();
4343

44+
/**
45+
* Gets {@link ProcessRole} objects that are assigned to this authorizing object
46+
*
47+
* @return set of {@link ProcessRole}
48+
* */
49+
Set<ProcessRole> getNegativeProcessRoles();
50+
51+
/**
52+
* Sets {@link ProcessRole} objects to this authorizing object
53+
*
54+
* @param processRoles set of {@link ProcessRole}
55+
* */
56+
void setNegativeProcessRoles(Set<ProcessRole> processRoles);
57+
4458
/**
4559
* Sets {@link ProcessRole} objects to this authorizing object
4660
*
@@ -111,6 +125,20 @@ public interface Actor extends Serializable {
111125
* */
112126
void removeProcessRole(ProcessRole role);
113127

128+
/**
129+
* Adds {@link ProcessRole} object to this authorizing object
130+
*
131+
* @param role {@link ProcessRole} object to be added
132+
* */
133+
void addNegativeProcessRole(ProcessRole role);
134+
135+
/**
136+
* Adds {@link ProcessRole} object to this authorizing object
137+
*
138+
* @param role {@link ProcessRole} object to be added
139+
* */
140+
void removeNegativeProcessRole(ProcessRole role);
141+
114142
/**
115143
* Sets attribute to authorizing object
116144
*

nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/Authority.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ public abstract class Authority implements Serializable {
3434
@Setter
3535
private Set<String> users;
3636

37+
@JsonIgnore
38+
@Setter
39+
private Set<String> groups;
40+
3741
public Authority() {
3842
}
3943

@@ -45,6 +49,7 @@ public Authority(Authority authority) {
4549
this._id = authority.get_id();
4650
this.name = authority.getName();
4751
this.users = new HashSet<>(authority.getUsers());
52+
this.groups = new HashSet<>(authority.getGroups());
4853
}
4954

5055
public void addUser(IUser user) {
@@ -54,6 +59,13 @@ public void addUser(IUser user) {
5459
users.add(user.getStringId());
5560
}
5661

62+
public void addGroup(Group group) {
63+
if (groups == null) {
64+
groups = new HashSet<>();
65+
}
66+
groups.add(group.getStringId());
67+
}
68+
5769
public String getStringId() {
5870
return _id.toString();
5971
}

nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/Group.java

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
import org.bson.codecs.pojo.annotations.BsonIgnore;
88
import org.bson.types.ObjectId;
99

10-
import java.util.*;
10+
import java.util.HashSet;
11+
import java.util.Map;
12+
import java.util.Set;
1113

1214
@QueryEntity
1315
public class Group implements Actor {
@@ -53,6 +55,10 @@ public class Group implements Actor {
5355
@Setter
5456
protected Set<ProcessRole> processRoles;
5557

58+
@Getter
59+
@Setter
60+
protected Set<ProcessRole> negativeProcessRoles;
61+
5662
@Getter
5763
@Setter
5864
protected Set<String> groupIds;
@@ -66,8 +72,9 @@ public class Group implements Actor {
6672

6773
protected Group() {
6874
id = new ObjectId();
69-
authorities = new HashSet<Authority>();
75+
authorities = new HashSet<>();
7076
processRoles = new HashSet<>();
77+
negativeProcessRoles = new HashSet<>();
7178
groupIds = new HashSet<>();
7279
groups = new HashSet<>();
7380
memberIds = new HashSet<>();
@@ -129,6 +136,19 @@ public void removeProcessRole(ProcessRole role) {
129136
processRoles.remove(role);
130137
}
131138

139+
@Override
140+
public void addNegativeProcessRole(ProcessRole role) {
141+
if (negativeProcessRoles.stream().anyMatch(it -> it.getStringId().equals(role.getStringId()))) {
142+
return;
143+
}
144+
negativeProcessRoles.add(role);
145+
}
146+
147+
@Override
148+
public void removeNegativeProcessRole(ProcessRole role) {
149+
negativeProcessRoles.remove(role);
150+
}
151+
132152
@Override
133153
public void setAttribute(String key, Object value, boolean required) {
134154
this.attributes.put(key, new Attribute<>(value, required));

nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/IUser.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package com.netgrif.application.engine.objects.auth.domain;
22

3+
import com.fasterxml.jackson.annotation.JsonIgnore;
34
import com.netgrif.application.engine.objects.auth.domain.enums.UserState;
45

6+
import java.time.LocalDateTime;
7+
import java.util.Map;
58
import java.util.Set;
69

710
public interface IUser extends Actor {
@@ -50,8 +53,18 @@ public interface IUser extends Actor {
5053

5154
boolean isImpersonating();
5255

56+
LocalDateTime getCreatedAt();
57+
58+
Map<String, Attribute<?>> getAttributes();
59+
60+
boolean isEnabled();
61+
62+
boolean isEmailVerified();
63+
64+
@JsonIgnore
5365
IUser getSelfOrImpersonated();
5466

67+
@JsonIgnore
5568
IUser getImpersonated();
5669

5770
void setImpersonated(IUser user);

nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/LoggedUser.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,15 @@ public abstract class LoggedUser implements Serializable {
5353

5454
private Set<ProcessRole> processRoles;
5555

56+
private Set<ProcessRole> negativeProcessRoles;
57+
5658
private Set<String> mfaMethod;
5759

5860
private transient Duration sessionTimeout = Duration.ofMinutes(30);
5961

6062
private Map<String, Attribute<?>> attributes;
6163

62-
public LoggedUser(String id, String username, String password, Collection<Authority> authorities, Collection<ProcessRole> processRoles) {
64+
public LoggedUser(String id, String username, String password, Collection<Authority> authorities, Collection<ProcessRole> processRoles, Collection<ProcessRole> negativeProcessRoles) {
6365
this.id = id;
6466
this.username = username;
6567
this.password = password;
@@ -72,9 +74,10 @@ public LoggedUser(String id, String username, String password, Collection<Author
7274
this.accountNonExpired = true;
7375
this.accountNonLocked = true;
7476
this.credentialsNonExpired = true;
77+
this.negativeProcessRoles = new HashSet<>(negativeProcessRoles);
7578
}
7679

77-
public LoggedUser(String id, String realmId, String username, String password, Collection<? extends Authority> authorities, Set<Group> groups, Set<ProcessRole> processRoles, Map<String, Attribute<?>> attributes, Set<String> mfaMethod, String firstName, String lastName) {
80+
public LoggedUser(String id, String realmId, String username, String password, Collection<? extends Authority> authorities, Set<Group> groups, Set<ProcessRole> processRoles, Map<String, Attribute<?>> attributes, Set<String> mfaMethod, String firstName, String lastName, Collection<ProcessRole> negativeProcessRoles) {
7881
this.id = id;
7982
this.realmId = realmId;
8083
this.username = username;
@@ -91,6 +94,7 @@ public LoggedUser(String id, String realmId, String username, String password, C
9194
this.accountNonExpired = true;
9295
this.accountNonLocked = true;
9396
this.credentialsNonExpired = true;
97+
this.negativeProcessRoles = new HashSet<>(negativeProcessRoles);
9498
}
9599

96100
public boolean isAdmin() {

nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/User.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ public User() {
6868
this.attributes = new HashMap<>();
6969
this.credentials = new HashMap<>();
7070
this.authMethods = new HashSet<>();
71+
this.processRoles = new HashSet<>();
72+
this.negativeProcessRoles = new HashSet<>();
73+
this.authorities = new HashSet<>();
7174
}
7275

7376
public User(ObjectId id) {
@@ -82,7 +85,7 @@ public String getStringId() {
8285

8386
@Override
8487
public String getFullName() {
85-
return String.join(" ", firstName, middleName, lastName);
88+
return String.join(" ", firstName, middleName != null ? middleName : "", lastName);
8689
}
8790

8891
@Override
@@ -312,6 +315,16 @@ public void removeProcessRole(ProcessRole role) {
312315
this.processRoles.remove(role);
313316
}
314317

318+
@Override
319+
public void addNegativeProcessRole(ProcessRole role) {
320+
super.addNegativeProcessRole(role);
321+
}
322+
323+
@Override
324+
public void removeNegativeProcessRole(ProcessRole role) {
325+
super.removeNegativeProcessRole(role);
326+
}
327+
315328

316329
@Override
317330
public boolean validateRequiredAttributes() {

nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/auth/domain/LoggedUserImpl.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@
1717

1818
public class LoggedUserImpl extends LoggedUser implements UserDetails {
1919

20-
public LoggedUserImpl(String id, String username, String password, Set<Authority> authorities, Set<ProcessRole> processRoles) {
21-
super(id, username, password, authorities, processRoles);
20+
public LoggedUserImpl(String id, String username, String password, Set<Authority> authorities, Set<ProcessRole> processRoles, Set<ProcessRole> negativeProcessRoles) {
21+
super(id, username, password, authorities, processRoles, negativeProcessRoles);
2222
}
2323

2424
@Builder(builderMethodName = "with")
25-
public LoggedUserImpl(String id, String realmId, String createMethod, String username, String email, String password, String firstName, String lastName, Set<Authority> authoritySet, Set<Group> groups, boolean enabled, boolean emailVerified, boolean accountNonExpired, boolean accountNonLocked, boolean credentialsNonExpired, LoggedUser impersonated, Set<ProcessRole> processRoles, Set<String> MFAMethod, Duration sessionTimeout, Map<String,Attribute<?>> attributes) {
26-
super(id, realmId, createMethod, username, email, password, firstName, lastName, authoritySet, groups, enabled, emailVerified, accountNonExpired, accountNonLocked, credentialsNonExpired, impersonated, processRoles, MFAMethod, sessionTimeout, attributes);
25+
public LoggedUserImpl(String id, String realmId, String createMethod, String username, String email, String password, String firstName, String lastName, Set<Authority> authoritySet, Set<Group> groups, boolean enabled, boolean emailVerified, boolean accountNonExpired, boolean accountNonLocked, boolean credentialsNonExpired, LoggedUser impersonated, Set<ProcessRole> processRoles, Set<String> MFAMethod, Duration sessionTimeout, Map<String,Attribute<?>> attributes, Set<ProcessRole> negativeProcessRoles) {
26+
super(id, realmId, createMethod, username, email, password, firstName, lastName, authoritySet, groups, enabled, emailVerified, accountNonExpired, accountNonLocked, credentialsNonExpired, impersonated, processRoles, negativeProcessRoles, MFAMethod, sessionTimeout, attributes);
2727
}
2828

2929
@Override

nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/auth/domain/mapper/LoggedUserMapper.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ public static LoggedUser toLoggedUser(IUser user) {
4343
user.getUsername(),
4444
Optional.ofNullable(user.getCredentialValue("password")).map(Object::toString).orElse("N/A"),
4545
user.getAuthorities(),
46-
user.getProcessRoles()
46+
user.getProcessRoles(),
47+
user.getNegativeProcessRoles()
4748
);
4849
loggedUser.setEmail(user.getEmail());
4950
loggedUser.setFirstName(user.getFirstName());

nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/service/ProcessRoleService.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.netgrif.application.engine.adapter.spring.petrinet.service;
22

3+
import com.netgrif.application.engine.objects.auth.domain.Group;
4+
import com.netgrif.application.engine.objects.auth.domain.IUser;
35
import com.netgrif.application.engine.objects.petrinet.domain.roles.ProcessRole;
46
import com.netgrif.application.engine.objects.auth.domain.LoggedUser;
57
import com.netgrif.application.engine.objects.petrinet.domain.PetriNet;
@@ -16,8 +18,12 @@ public interface ProcessRoleService {
1618
void delete(String id);
1719
void deleteAll(Collection<String> ids);
1820
void deleteAll();
19-
void assignRolesToUser(String userId, Set<ProcessResourceId> roleIds, LoggedUser user);
20-
void assignRolesToUser(String userId, Set<ProcessResourceId> roleIds, LoggedUser user, Map<String, String> params);
21+
void assignRolesToUser(IUser user, Set<ProcessResourceId> roleIds, LoggedUser loggedUser);
22+
void assignRolesToUser(IUser user, Set<ProcessResourceId> roleIds, LoggedUser loggedUser, Map<String, String> params);
23+
void assignRolesToGroup(Group group, Set<ProcessResourceId> requestedRolesIds);
24+
void assignNegativeRolesToUser(IUser user, Set<ProcessResourceId> roleIds, LoggedUser loggedUser);
25+
void assignNegativeRolesToUser(IUser user, Set<ProcessResourceId> roleIds, LoggedUser loggedUser, Map<String, String> params);
26+
void assignNegativeRolesToGroup(Group group, Set<ProcessResourceId> requestedRolesIds);
2127
ProcessRole getDefaultRole();
2228
ProcessRole getAnonymousRole();
2329
Collection<ProcessRole> findAllByIds(Collection<ProcessResourceId> roleIds);

0 commit comments

Comments
 (0)