Skip to content

Commit adda314

Browse files
authored
Merge pull request #21 from edsonmartins/develop
Develop
2 parents d32a950 + 27fcc48 commit adda314

File tree

7 files changed

+66
-16
lines changed

7 files changed

+66
-16
lines changed

archbase-security/src/main/java/br/com/archbase/security/domain/dto/ResourceDto.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package br.com.archbase.security.domain.dto;
22

33
import br.com.archbase.security.domain.entity.Resource;
4+
import br.com.archbase.security.domain.entity.TipoRecurso;
45
import com.fasterxml.jackson.annotation.JsonIdentityInfo;
56
import com.fasterxml.jackson.annotation.ObjectIdGenerators;
67
import lombok.*;
@@ -28,6 +29,7 @@ public class ResourceDto {
2829
protected String name;
2930
protected String description;
3031
protected Boolean active;
32+
protected TipoRecurso type;
3133

3234
public static ResourceDto fromDomain(Resource resource) {
3335
if (resource == null) {
@@ -45,6 +47,7 @@ public static ResourceDto fromDomain(Resource resource) {
4547
.name(resource.getName())
4648
.description(resource.getDescription())
4749
.active(resource.getActive())
50+
.type(resource.getType())
4851
.build();
4952
}
5053

@@ -60,6 +63,7 @@ public Resource toDomain() {
6063
.name(this.name)
6164
.active(this.active)
6265
.description(this.description)
66+
.type(this.type)
6367
.build();
6468
}
6569
}

archbase-security/src/main/java/br/com/archbase/security/domain/entity/Resource.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,15 @@ public class Resource extends DomainAggregatorBase<Resource> {
1919
protected String name;
2020
protected String description;
2121
protected Boolean active;
22+
protected TipoRecurso type;
2223

2324
@Builder
24-
public Resource(String id, String code, Long version, LocalDateTime updateEntityDate, LocalDateTime createEntityDate, String createdByUser, String lastModifiedByUser, String name, String description, Boolean active) {
25+
public Resource(String id, String code, Long version, LocalDateTime updateEntityDate, LocalDateTime createEntityDate, String createdByUser, String lastModifiedByUser, String name, String description, Boolean active, TipoRecurso type) {
2526
super(id, code, version, updateEntityDate, createEntityDate, createdByUser, lastModifiedByUser);
2627
this.name = name;
2728
this.description = description;
2829
this.active = active;
30+
this.type = type;
2931
}
3032

3133
static class Validator extends AbstractArchbaseValidator<Resource> {
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package br.com.archbase.security.domain.entity;
2+
3+
public enum TipoRecurso {
4+
VIEW,
5+
API
6+
}

archbase-security/src/main/java/br/com/archbase/security/persistence/ResourceEntity.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,16 @@
11
package br.com.archbase.security.persistence;
22

33
import br.com.archbase.ddd.domain.base.TenantPersistenceEntityBase;
4-
import br.com.archbase.security.domain.dto.ActionDto;
54
import br.com.archbase.security.domain.dto.ResourceDto;
6-
import br.com.archbase.security.domain.entity.Action;
75
import br.com.archbase.security.domain.entity.Resource;
6+
import br.com.archbase.security.domain.entity.TipoRecurso;
87
import br.com.archbase.shared.kernel.converters.BooleanToSNConverter;
98
import jakarta.persistence.*;
109
import lombok.Builder;
1110
import lombok.Getter;
1211
import lombok.Setter;
1312

1413
import java.time.LocalDateTime;
15-
import java.util.Collections;
16-
import java.util.List;
17-
import java.util.stream.Collectors;
1814

1915
@Entity
2016
@Table(name="SEGURANCA_RECURSO", uniqueConstraints = @UniqueConstraint(columnNames = {"TENANT_ID", "NOME"}))
@@ -38,15 +34,21 @@ public class ResourceEntity extends TenantPersistenceEntityBase {
3834
@Convert(converter = BooleanToSNConverter.class)
3935
private Boolean active;
4036

37+
@Enumerated(EnumType.STRING)
38+
@Column(name = "TIPO_RECURSO", length = 50)
39+
private TipoRecurso type;
40+
4141
public ResourceEntity() {
4242
// Default empty constructor
4343
}
4444

4545
@Builder
46-
public ResourceEntity(String id, String code, Long version, LocalDateTime createEntityDate, String createdByUser, LocalDateTime updateEntityDate, String lastModifiedByUser, String tenantId, String name, String description) {
46+
public ResourceEntity(String id, String code, Long version, LocalDateTime createEntityDate, String createdByUser, LocalDateTime updateEntityDate, String lastModifiedByUser, String tenantId, String name, String description, Boolean active, TipoRecurso type) {
4747
super(id, code, version, createEntityDate, createdByUser, updateEntityDate, lastModifiedByUser, tenantId);
4848
this.name = name;
4949
this.description = description;
50+
this.active = active;
51+
this.type = type;
5052
}
5153

5254

@@ -66,6 +68,7 @@ public static ResourceEntity fromDomain(Resource resource) {
6668
resourceEntity.setName(resource.getName());
6769
resourceEntity.setDescription(resource.getDescription());
6870
resourceEntity.setActive(resource.getActive());
71+
resourceEntity.setType(resource.getType());
6972
return resourceEntity;
7073
}
7174

@@ -82,6 +85,7 @@ public Resource toDomain() {
8285
.name(this.getName())
8386
.description(this.getDescription())
8487
.active(this.getActive())
88+
.type(this.getType())
8589
.build();
8690
}
8791

@@ -98,6 +102,7 @@ public ResourceDto toDto() {
98102
.name(this.getName())
99103
.description(this.getDescription())
100104
.active(this.getActive())
105+
.type(this.getType())
101106
.build();
102107
}
103108
}

archbase-security/src/main/java/br/com/archbase/security/service/ArchbaseActionSynchronizationService.java

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package br.com.archbase.security.service;
22
import br.com.archbase.security.annotation.HasPermission;
3+
import br.com.archbase.security.domain.entity.TipoRecurso;
34
import br.com.archbase.security.persistence.ActionEntity;
5+
import br.com.archbase.security.persistence.QActionEntity;
6+
import br.com.archbase.security.persistence.QResourceEntity;
47
import br.com.archbase.security.persistence.ResourceEntity;
58
import br.com.archbase.security.repository.ActionJpaRepository;
69
import br.com.archbase.security.repository.ResourceJpaRepository;
10+
import com.querydsl.core.types.dsl.BooleanExpression;
711
import lombok.extern.slf4j.Slf4j;
812
import org.apache.commons.lang3.StringUtils;
913
import org.reflections.Reflections;
@@ -74,7 +78,17 @@ private ResourceEntity ensureResourceExists(String resourceName) {
7478
resource.setDescription(resourceName);
7579
resource.setCreateEntityDate(LocalDateTime.now());
7680
resource.setCreatedByUser("archbase");
81+
resource.setActive(true);
82+
resource.setType(TipoRecurso.API);
7783
resourceRepository.save(resource);
84+
} else {
85+
if (!resource.getActive()) {
86+
resource.setUpdateEntityDate(LocalDateTime.now());
87+
resource.setActive(true);
88+
resource.setLastModifiedByUser("archbase");
89+
resource.setType(TipoRecurso.API);
90+
resource = resourceRepository.save(resource);
91+
}
7892
}
7993
return resource;
8094
}
@@ -90,18 +104,29 @@ private void synchronizeAction(String actionName, String description, ResourceEn
90104
action.setActive(true);
91105
action.setCreateEntityDate(LocalDateTime.now());
92106
action.setCreatedByUser("archbase");
107+
actionRepository.save(action);
93108
} else {
94109
action = actionEntityOptional.get();
110+
if (!action.getActive()) {
111+
action.setActive(true);
112+
action.setUpdateEntityDate(LocalDateTime.now());
113+
action.setLastModifiedByUser("archbase");
114+
actionRepository.save(action);
115+
}
95116
}
96-
actionRepository.save(action);
97117
}
98118

99119
private void disableUnusedActionsAndResources() {
100-
List<ActionEntity> allActions = actionRepository.findAll();
101-
List<ResourceEntity> allResources = resourceRepository.findAll();
120+
QActionEntity qAction = QActionEntity.actionEntity;
121+
BooleanExpression actionPredicate = qAction.resource.type.eq(TipoRecurso.API);
122+
List<ActionEntity> allAPIActions = actionRepository.findAll(actionPredicate);
123+
124+
QResourceEntity qResource = QResourceEntity.resourceEntity;
125+
BooleanExpression resourcePredicate = qResource.type.eq(TipoRecurso.API);
126+
List<ResourceEntity> allAPIResources = resourceRepository.findAll(resourcePredicate);
102127

103128
// Desativar ações e recursos não encontrados
104-
allActions.forEach(action -> {
129+
allAPIActions.forEach(action -> {
105130
if (!actionStillExists(action)) {
106131
action.setActive(false);
107132
action.setUpdateEntityDate(LocalDateTime.now());
@@ -110,7 +135,7 @@ private void disableUnusedActionsAndResources() {
110135
}
111136
});
112137

113-
allResources.forEach(resource -> {
138+
allAPIResources.forEach(resource -> {
114139
if (!resourceStillExists(resource)) {
115140
resource.setActive(false);
116141
resource.setUpdateEntityDate(LocalDateTime.now());

archbase-security/src/main/java/br/com/archbase/security/service/ResourceService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import br.com.archbase.security.adapter.ActionPersistenceAdapter;
66
import br.com.archbase.security.adapter.SecurityAdapter;
77
import br.com.archbase.security.domain.dto.*;
8+
import br.com.archbase.security.domain.entity.TipoRecurso;
89
import br.com.archbase.security.domain.entity.User;
910
import com.google.common.collect.Lists;
1011
import br.com.archbase.security.domain.dto.ResourcePermissionsDto;
@@ -75,6 +76,7 @@ public ResourcePermissionsDto registerResource(ResourceRegisterDto resourceRegis
7576
.createdByUser("archbase")
7677
.version(0L)
7778
.active(true)
79+
.type(TipoRecurso.VIEW)
7880
.build();
7981

8082
resourceDto = adapter.createResource(resourceDto);

archbase-security/src/main/java/br/com/archbase/security/service/UserService.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public Page<UserDto> findAll(int page, int size, String[] sort) {
5252
public Optional<User> getUserByEmail(String email) {
5353
Optional<User> usuarioOptional = persistenceAdapter.getUserByEmail(email);
5454
if(usuarioOptional.isEmpty()) {
55-
throw new ArchbaseValidationException(String.format("Usuário com email %s não foi encontrado.",email));
55+
throw new ArchbaseValidationException(String.format("Usuário com email %s não foi encontrado.",email));
5656
}
5757
return usuarioOptional;
5858
}
@@ -86,7 +86,10 @@ public Optional<UserDto> findGroupById(String id) {
8686
public UserDto createUser(UserDto userDto) {
8787
UserDto originalUserDto = new UserDto();
8888
BeanUtils.copyProperties(userDto, originalUserDto);
89-
89+
Optional<User> usuarioOptional = persistenceAdapter.getUserByEmail(userDto.getEmail());
90+
if (usuarioOptional.isPresent()) {
91+
throw new ArchbaseValidationException(String.format("Usuário com email %s já cadastrado.",userDto.getEmail()));
92+
}
9093
userServiceListener.onBeforeCreate(originalUserDto);
9194
userDto.setPassword(passwordEncoder.encode(userDto.getPassword()));
9295
UserDto user = persistenceAdapter.createUser(userDto);
@@ -98,14 +101,17 @@ public UserDto createUser(UserDto userDto) {
98101
public Optional<UserDto> updateUser(String id, UserDto userDto) {
99102
UserDto originalUserDto = new UserDto();
100103
BeanUtils.copyProperties(userDto, originalUserDto);
101-
104+
Optional<User> usuarioOptional = persistenceAdapter.getUserByEmail(userDto.getEmail());
105+
if (usuarioOptional.isPresent() && !usuarioOptional.get().getId().toString().equals(id)) {
106+
throw new ArchbaseValidationException(String.format("Usuário com email %s já cadastrado.",userDto.getEmail()));
107+
}
102108
userServiceListener.onBeforeUpdate(originalUserDto);
103109
if (!StringUtils.isBlank(userDto.getPassword())) {
104110
userDto.setPassword(passwordEncoder.encode(userDto.getPassword()));
105111
}
106112
UserDto currentUserDto = findById(id);
107113
if (currentUserDto==null){
108-
throw new ArchbaseValidationException("Usuário não encontrada.");
114+
throw new ArchbaseValidationException("Usuário não encontrado.");
109115
}
110116
Optional<UserDto> result = persistenceAdapter.updateUser(id, userDto);
111117
userServiceListener.onAfterUpdate(originalUserDto, currentUserDto, result.get());

0 commit comments

Comments
 (0)