diff --git a/slp-backend/src/main/java/agh/edu/pl/slpbackend/config/SecurityConfig.java b/slp-backend/src/main/java/agh/edu/pl/slpbackend/config/SecurityConfig.java index 3d5be79..f6d10d9 100644 --- a/slp-backend/src/main/java/agh/edu/pl/slpbackend/config/SecurityConfig.java +++ b/slp-backend/src/main/java/agh/edu/pl/slpbackend/config/SecurityConfig.java @@ -4,12 +4,17 @@ import lombok.AllArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler; +import org.springframework.security.access.expression.method.MethodSecurityExpressionHandler; +import org.springframework.security.access.hierarchicalroles.RoleHierarchy; +import org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl; import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.web.SecurityFilterChain; +import org.springframework.security.web.access.AccessDeniedHandlerImpl; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; @Configuration @@ -31,4 +36,18 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti .addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class) .build(); } + + @Bean + public RoleHierarchy roleHierarchy() { + RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl(); + roleHierarchy.setHierarchy("ROLE_ADMIN > ROLE_WORKER \n ROLE_WORKER > ROLE_INTERN"); + return roleHierarchy; + } + + @Bean + public MethodSecurityExpressionHandler methodSecurityExpressionHandler(RoleHierarchy roleHierarchy) { + DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler(); + expressionHandler.setRoleHierarchy(roleHierarchy); + return expressionHandler; + } } diff --git a/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/ExaminationController.java b/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/ExaminationController.java index 0bcf3bb..b5f3cc8 100644 --- a/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/ExaminationController.java +++ b/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/ExaminationController.java @@ -6,6 +6,7 @@ import lombok.AllArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -35,11 +36,13 @@ public ResponseEntity> getExaminationForSample(@PathVariabl return new ResponseEntity<>(examinationDtos, HttpStatus.OK); } + @PreAuthorize("hasRole('WORKER')") @PutMapping("/update") public ResponseEntity insertExaminationResults(@RequestBody ExaminationDto updatedExaminationDto) { return edit(updatedExaminationDto, examinationService); } + @PreAuthorize("hasRole('WORKER')") @DeleteMapping("/delete/{examinationId}") public ResponseEntity deleteExamination(@PathVariable final Long examinationId) { return delete(ExaminationDto.builder().id(examinationId).build(), examinationService); diff --git a/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/MethodController.java b/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/MethodController.java index 679c189..4b3da48 100644 --- a/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/MethodController.java +++ b/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/MethodController.java @@ -3,6 +3,7 @@ import agh.edu.pl.slpbackend.service.MethodService; import lombok.AllArgsConstructor; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -16,6 +17,7 @@ public class MethodController { private final MethodService methodService; + @PreAuthorize("hasRole('WORKER')") @PostMapping("/import") public ResponseEntity importMethods(@RequestParam("file") MultipartFile file) { try (InputStream inputStream = file.getInputStream()) { diff --git a/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/ReportDataController.java b/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/ReportDataController.java index 8824459..dbe3106 100644 --- a/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/ReportDataController.java +++ b/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/ReportDataController.java @@ -6,6 +6,7 @@ import lombok.AllArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -23,16 +24,19 @@ public ResponseEntity> list() { return ResponseEntity.ok(reportDataService.selectAll()); } + @PreAuthorize("hasRole('WORKER')") @PostMapping("/save") public ResponseEntity add(@RequestBody final ReportDataDto reportData) { return add(reportData, reportDataService); } + @PreAuthorize("hasRole('WORKER')") @DeleteMapping("/{reportDataId}") public ResponseEntity delete(@PathVariable final Long reportDataId) { return delete(ReportDataDto.builder().id(reportDataId).build(), reportDataService); } + @PreAuthorize("hasRole('WORKER')") @PutMapping("/") public ResponseEntity update(@RequestBody ReportDataDto reportDataDto) { return edit(reportDataDto, reportDataService); diff --git a/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/SampleController.java b/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/SampleController.java index 7eef6e9..1bc906e 100644 --- a/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/SampleController.java +++ b/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/SampleController.java @@ -9,6 +9,7 @@ import agh.edu.pl.slpbackend.service.SampleService; import lombok.AllArgsConstructor; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -36,21 +37,25 @@ public ResponseEntity getOne(@PathVariable final Long sampleId) { return ResponseEntity.ok(sampleService.selectOne(sampleId)); } + @PreAuthorize("hasRole('WORKER')") @PutMapping("status/{sampleId}/{status}") public ResponseEntity updateStatus(@PathVariable final Long sampleId, @PathVariable final String status) { return ResponseEntity.ok(sampleService.updateStatus(sampleId, ProgressStatus.convertEnum(status))); } + @PreAuthorize("hasRole('WORKER')") @PostMapping("/save") public ResponseEntity add(@RequestBody SampleDto sampleDto) { return add(sampleDto, sampleService); } + @PreAuthorize("hasRole('WORKER')") @DeleteMapping("/{sampleId}") public ResponseEntity delete(@PathVariable final Long sampleId) { return delete(SampleDto.builder().id(sampleId).build(), sampleService); } + @PreAuthorize("hasRole('WORKER')") @PutMapping("/{sampleId}") public ResponseEntity update(@PathVariable final Long sampleId, @RequestBody SampleDto sampleDto) { return edit(sampleDto, sampleService); diff --git a/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/AssortmentController.java b/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/AssortmentController.java index 5c2649f..a8c01ca 100644 --- a/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/AssortmentController.java +++ b/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/AssortmentController.java @@ -6,6 +6,7 @@ import jakarta.validation.Valid; import lombok.AllArgsConstructor; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -23,16 +24,19 @@ public ResponseEntity> list() { return ResponseEntity.ok(assortmentService.selectAll()); } + @PreAuthorize("hasRole('WORKER')") @PostMapping("/save") public ResponseEntity add(@RequestBody @Valid AssortmentDto assortmentDto) { return add(assortmentDto, assortmentService); } + @PreAuthorize("hasRole('WORKER')") @PutMapping("/update") public ResponseEntity edit(@RequestBody @Valid AssortmentDto assortmentDto) { return edit(assortmentDto, assortmentService); } + @PreAuthorize("hasRole('WORKER')") @DeleteMapping("/delete/{id}") public ResponseEntity delete(@PathVariable Long id) { return delete(AssortmentDto.builder().id(id).build(), assortmentService); diff --git a/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/ClientController.java b/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/ClientController.java index bb4a4ff..3c76493 100644 --- a/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/ClientController.java +++ b/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/ClientController.java @@ -6,6 +6,7 @@ import jakarta.validation.Valid; import lombok.AllArgsConstructor; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -23,16 +24,19 @@ public ResponseEntity> list() { return ResponseEntity.ok(clientService.selectAll()); } + @PreAuthorize("hasRole('WORKER')") @PostMapping("/save") public ResponseEntity add(@RequestBody @Valid ClientDto clientDto) { return add(clientDto, clientService); } + @PreAuthorize("hasRole('WORKER')") @PutMapping("/update") public ResponseEntity edit(@RequestBody @Valid ClientDto clientDto) { return edit(clientDto, clientService); } + @PreAuthorize("hasRole('WORKER')") @DeleteMapping("/delete/{id}") public ResponseEntity delete(@PathVariable Long id) { return delete(ClientDto.builder().id(id).build(), clientService); diff --git a/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/CodeController.java b/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/CodeController.java index 229a3de..4f7c2e9 100644 --- a/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/CodeController.java +++ b/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/CodeController.java @@ -6,6 +6,7 @@ import jakarta.validation.Valid; import lombok.AllArgsConstructor; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -23,16 +24,19 @@ public ResponseEntity> list() { return ResponseEntity.ok(codeService.selectAll()); } + @PreAuthorize("hasRole('WORKER')") @PostMapping("/save") public ResponseEntity add(@RequestBody @Valid CodeDto codeDto) { return add(codeDto, codeService); } + @PreAuthorize("hasRole('WORKER')") @PutMapping("/update") public ResponseEntity edit(@RequestBody @Valid CodeDto codeDto) { return edit(codeDto, codeService); } + @PreAuthorize("hasRole('WORKER')") @DeleteMapping("/delete/{id}") public ResponseEntity delete(@PathVariable String id) { return delete(CodeDto.builder().id(id).build(), codeService); diff --git a/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/IndicationController.java b/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/IndicationController.java index 1f9afcf..4883a79 100644 --- a/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/IndicationController.java +++ b/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/IndicationController.java @@ -6,6 +6,7 @@ import lombok.AllArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -36,16 +37,19 @@ public ResponseEntity> getIndicationsForSample(@PathVariable return new ResponseEntity<>(indicationDtos, HttpStatus.OK); } + @PreAuthorize("hasRole('WORKER')") @PostMapping("/save") public ResponseEntity add(@RequestBody IndicationDto indicationDto) { return add(indicationDto, indicationService); } + @PreAuthorize("hasRole('WORKER')") @PutMapping("/update") public ResponseEntity edit(@RequestBody IndicationDto indicationDto) { return edit(indicationDto, indicationService); } + @PreAuthorize("hasRole('WORKER')") @DeleteMapping("/delete/{id}") public ResponseEntity delete(@PathVariable Long id) { return delete(IndicationDto.builder().id(id).build(), indicationService); diff --git a/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/InspectionController.java b/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/InspectionController.java index 58ff0b8..60866db 100644 --- a/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/InspectionController.java +++ b/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/InspectionController.java @@ -6,6 +6,7 @@ import jakarta.validation.Valid; import lombok.AllArgsConstructor; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -23,16 +24,19 @@ public ResponseEntity> list() { return ResponseEntity.ok(inspectionService.selectAll()); } + @PreAuthorize("hasRole('WORKER')") @PostMapping("/save") public ResponseEntity add(@RequestBody @Valid InspectionDto inspectionDto) { return add(inspectionDto, inspectionService); } + @PreAuthorize("hasRole('WORKER')") @PutMapping("/update") public ResponseEntity edit(@RequestBody @Valid InspectionDto inspectionDto) { return edit(inspectionDto, inspectionService); } + @PreAuthorize("hasRole('WORKER')") @DeleteMapping("/delete/{id}") public ResponseEntity delete(@PathVariable Long id) { return delete(InspectionDto.builder().id(id).build(), inspectionService); diff --git a/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/ProductGroupController.java b/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/ProductGroupController.java index 9d8a872..0d5b484 100644 --- a/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/ProductGroupController.java +++ b/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/ProductGroupController.java @@ -7,6 +7,7 @@ import jakarta.validation.Valid; import lombok.AllArgsConstructor; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -24,16 +25,19 @@ public ResponseEntity> list() { return ResponseEntity.ok(productGroupService.selectAll()); } + @PreAuthorize("hasRole('WORKER')") @PostMapping("/save") public ResponseEntity add(@RequestBody @Valid ProductGroupSaveDto productGroupSaveDto) { return add(productGroupSaveDto, productGroupService); } + @PreAuthorize("hasRole('WORKER')") @PutMapping("/update") public ResponseEntity edit(@RequestBody @Valid ProductGroupSaveDto productGroupSaveDto) { return edit(productGroupSaveDto, productGroupService); } + @PreAuthorize("hasRole('WORKER')") @DeleteMapping("/delete/{id}") public ResponseEntity delete(@PathVariable Long id) { return delete(ProductGroupDto.builder().id(id).build(), productGroupService); diff --git a/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/SamplingStandardController.java b/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/SamplingStandardController.java index 7bca498..2e5b8cc 100644 --- a/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/SamplingStandardController.java +++ b/slp-backend/src/main/java/agh/edu/pl/slpbackend/controller/dictionary/SamplingStandardController.java @@ -6,6 +6,7 @@ import jakarta.validation.Valid; import lombok.AllArgsConstructor; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; @@ -23,17 +24,20 @@ public ResponseEntity> list() { return ResponseEntity.ok(samplingStandardService.selectAll()); } + @PreAuthorize("hasRole('WORKER')") @PostMapping("/save") public ResponseEntity add(@RequestBody @Valid SamplingStandardDto samplingStandardDto) { return add(samplingStandardDto, samplingStandardService); } + @PreAuthorize("hasRole('WORKER')") @PutMapping("/update") public ResponseEntity edit(@RequestBody @Valid SamplingStandardDto samplingStandardDto) { return edit(samplingStandardDto, samplingStandardService); } + @PreAuthorize("hasRole('WORKER')") @DeleteMapping("/delete/{id}") public ResponseEntity delete(@PathVariable Long id) { return delete(SamplingStandardDto.builder().id(id).build(), samplingStandardService); diff --git a/slp-backend/src/main/java/agh/edu/pl/slpbackend/reports/kzwa/KZWAReportGeneratorController.java b/slp-backend/src/main/java/agh/edu/pl/slpbackend/reports/kzwa/KZWAReportGeneratorController.java index b99b4ab..8d02e37 100644 --- a/slp-backend/src/main/java/agh/edu/pl/slpbackend/reports/kzwa/KZWAReportGeneratorController.java +++ b/slp-backend/src/main/java/agh/edu/pl/slpbackend/reports/kzwa/KZWAReportGeneratorController.java @@ -4,6 +4,7 @@ import org.springframework.core.io.InputStreamResource; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; @RestController @@ -14,6 +15,7 @@ public class KZWAReportGeneratorController { private final KZWAReportGeneratorService kzwaReportGeneratorService; + @PreAuthorize("hasRole('WORKER')") @GetMapping("/kzwa-report/{sampleId}") public ResponseEntity generate(@PathVariable final Long sampleId) { InputStreamResource resource = kzwaReportGeneratorService.generateReport(sampleId); diff --git a/slp-backend/src/main/java/agh/edu/pl/slpbackend/reports/samplereport/SampleReportGeneratorController.java b/slp-backend/src/main/java/agh/edu/pl/slpbackend/reports/samplereport/SampleReportGeneratorController.java index 27c64c4..3bf6fa5 100644 --- a/slp-backend/src/main/java/agh/edu/pl/slpbackend/reports/samplereport/SampleReportGeneratorController.java +++ b/slp-backend/src/main/java/agh/edu/pl/slpbackend/reports/samplereport/SampleReportGeneratorController.java @@ -4,6 +4,7 @@ import org.springframework.core.io.InputStreamResource; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; @RestController @@ -14,6 +15,7 @@ public class SampleReportGeneratorController { private final SampleReportGeneratorService sampleReportGeneratorService; + @PreAuthorize("hasRole('WORKER')") @GetMapping("/sample-report/{sampleId}/{reportType}") public ResponseEntity generate(@PathVariable final Long sampleId, @PathVariable final String reportType) { InputStreamResource resource = sampleReportGeneratorService.generateReport(sampleId, reportType); diff --git a/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/AssortmentTest.java b/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/AssortmentTest.java index 7bd0512..44f02fb 100644 --- a/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/AssortmentTest.java +++ b/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/AssortmentTest.java @@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.HttpStatus; +import org.springframework.security.test.context.support.WithMockUser; import static org.assertj.core.api.Assertions.assertThat; @@ -34,6 +35,7 @@ void get_all() { } @Test + @WithMockUser(roles = "WORKER") void add() { var count = repository.count(); @@ -47,6 +49,7 @@ void add() { } @Test + @WithMockUser(roles = "WORKER") void update() { var assortment = repository.findAll().get(0); var request = toDto(assortment); diff --git a/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/ClientTest.java b/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/ClientTest.java index a72f734..b9e1245 100644 --- a/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/ClientTest.java +++ b/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/ClientTest.java @@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.HttpStatus; +import org.springframework.security.test.context.support.WithMockUser; import static org.assertj.core.api.Assertions.assertThat; @@ -34,6 +35,7 @@ void get_all() { } @Test + @WithMockUser(roles = "WORKER") void add() { var count = repository.count(); @@ -47,6 +49,7 @@ void add() { } @Test + @WithMockUser(roles = "WORKER") void update() { var client = repository.findAll().get(0); var request = toDto(client); diff --git a/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/CodeTest.java b/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/CodeTest.java index 55829b7..198039e 100644 --- a/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/CodeTest.java +++ b/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/CodeTest.java @@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.HttpStatus; +import org.springframework.security.test.context.support.WithMockUser; import static org.assertj.core.api.Assertions.assertThat; @@ -34,6 +35,7 @@ void get_all() { } @Test + @WithMockUser(roles = "WORKER") void add() { var code = CodeDto.builder() .id("test") @@ -45,6 +47,7 @@ void add() { } @Test + @WithMockUser(roles = "WORKER") void update() { var code = repository.findAll().get(0); var request = toDto(code); diff --git a/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/ExaminationTest.java b/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/ExaminationTest.java index 0b9c677..87ae494 100644 --- a/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/ExaminationTest.java +++ b/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/ExaminationTest.java @@ -10,6 +10,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.HttpStatus; +import org.springframework.security.test.context.support.WithMockUser; import static org.assertj.core.api.Assertions.assertThat; @@ -41,6 +42,7 @@ void add() { } @Test + @WithMockUser(roles = "WORKER") void update() { var examination = repository.findAll().get(0); var request = toDto(examination); @@ -54,6 +56,7 @@ void update() { } @Test + @WithMockUser(roles = "WORKER") void delete() { var examination = repository.findAll().get(0); var response = controller.deleteExamination(examination.getId()); diff --git a/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/IndicationTest.java b/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/IndicationTest.java index 51bb0dc..ae3a109 100644 --- a/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/IndicationTest.java +++ b/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/IndicationTest.java @@ -11,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.HttpStatus; +import org.springframework.security.test.context.support.WithMockUser; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -40,6 +41,7 @@ void get_all() { } @Test + @WithMockUser(roles = "WORKER") void add() { var count = repository.count(); @@ -53,6 +55,7 @@ void add() { } @Test + @WithMockUser(roles = "WORKER") void update() { var indication = repository.findAll().get(0); var request = toDto(indication); diff --git a/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/InspectionTest.java b/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/InspectionTest.java index f0d45f6..8d64e58 100644 --- a/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/InspectionTest.java +++ b/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/InspectionTest.java @@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.HttpStatus; +import org.springframework.security.test.context.support.WithMockUser; import static org.assertj.core.api.Assertions.assertThat; @@ -34,6 +35,7 @@ void get_all() { } @Test + @WithMockUser(roles = "WORKER") void add() { var count = repository.count(); @@ -47,6 +49,7 @@ void add() { } @Test + @WithMockUser(roles = "WORKER") void update() { var inspection = repository.findAll().get(0); var request = toDto(inspection); diff --git a/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/ProductGroupTest.java b/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/ProductGroupTest.java index 52cd782..1a4075e 100644 --- a/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/ProductGroupTest.java +++ b/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/ProductGroupTest.java @@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.HttpStatus; +import org.springframework.security.test.context.support.WithMockUser; import java.util.List; @@ -36,6 +37,7 @@ void get_all() { } @Test + @WithMockUser(roles = "WORKER") void add() { var count = repository.count(); @@ -50,6 +52,7 @@ void add() { } @Test + @WithMockUser(roles = "WORKER") void update() { var group = repository.findAll().get(0); String name = "test"; diff --git a/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/ReportDataTest.java b/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/ReportDataTest.java index 91d0b18..c6cf201 100644 --- a/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/ReportDataTest.java +++ b/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/ReportDataTest.java @@ -11,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.HttpStatus; +import org.springframework.security.test.context.support.WithMockUser; import static org.assertj.core.api.Assertions.assertThat; @@ -39,6 +40,7 @@ void get_all() { } @Test + @WithMockUser(roles = "WORKER") void add() { var count = repository.count(); @@ -53,6 +55,7 @@ void add() { } @Test + @WithMockUser(roles = "WORKER") void update() { var reportData = repository.findAll().get(0); var request = toDto(reportData); @@ -66,6 +69,7 @@ void update() { } @Test + @WithMockUser(roles = "WORKER") void delete() { var reportData = repository.findAll().get(0); var response = controller.delete(reportData.getId()); diff --git a/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/ReportTest.java b/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/ReportTest.java index b4f3128..2b43c40 100644 --- a/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/ReportTest.java +++ b/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/ReportTest.java @@ -7,6 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.HttpStatus; +import org.springframework.security.test.context.support.WithMockUser; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -21,6 +22,7 @@ public class ReportTest { private SampleReportGeneratorController sampleReportController; @Test + @WithMockUser(roles = "WORKER") void generate_KZWA_report() { var response = KZWAReportController.generate(1L); @@ -28,18 +30,21 @@ void generate_KZWA_report() { } @Test + @WithMockUser(roles = "WORKER") void generate_KZWA_report_fails_when_unknown_sample_id() { assertThatThrownBy(() -> KZWAReportController.generate(34895L)) .isInstanceOf(SampleNotFoundException.class); } @Test + @WithMockUser(roles = "WORKER") void generate_sample_report_fails_when_unknown_sample_id() { assertThatThrownBy(() -> sampleReportController.generate(34895L, "")) .isInstanceOf(SampleNotFoundException.class); } @Test + @WithMockUser(roles = "WORKER") void generate_F4_report0() { var response = sampleReportController.generate(1L, "F4"); @@ -47,6 +52,7 @@ void generate_F4_report0() { } @Test + @WithMockUser(roles = "WORKER") void generate_F5_report0() { var response = sampleReportController.generate(1L, "F5"); @@ -54,6 +60,7 @@ void generate_F5_report0() { } @Test + @WithMockUser(roles = "WORKER") void generate_F4_report1() { var response = sampleReportController.generate(4L, "F4"); @@ -61,6 +68,7 @@ void generate_F4_report1() { } @Test + @WithMockUser(roles = "WORKER") void generate_F4_report2() { var response = sampleReportController.generate(5L, "F4"); @@ -68,6 +76,7 @@ void generate_F4_report2() { } @Test + @WithMockUser(roles = "WORKER") void generate_F4_report3() { var response = sampleReportController.generate(6L, "F4"); @@ -75,6 +84,7 @@ void generate_F4_report3() { } @Test + @WithMockUser(roles = "WORKER") void generate_F4_report4() { var response = sampleReportController.generate(7L, "F4"); @@ -82,6 +92,7 @@ void generate_F4_report4() { } @Test + @WithMockUser(roles = "WORKER") void generate_F5_report1() { var response = sampleReportController.generate(4L, "F5"); @@ -89,6 +100,7 @@ void generate_F5_report1() { } @Test + @WithMockUser(roles = "WORKER") void generate_F5_report2() { var response = sampleReportController.generate(5L, "F5"); @@ -96,6 +108,7 @@ void generate_F5_report2() { } @Test + @WithMockUser(roles = "WORKER") void generate_F5_report3() { var response = sampleReportController.generate(6L, "F5"); @@ -103,6 +116,7 @@ void generate_F5_report3() { } @Test + @WithMockUser(roles = "WORKER") void generate_F5_report4() { var response = sampleReportController.generate(7L, "F5"); diff --git a/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/SampleTest.java b/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/SampleTest.java index 2d2c63d..97a8e7c 100644 --- a/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/SampleTest.java +++ b/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/SampleTest.java @@ -13,6 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.HttpStatus; +import org.springframework.security.test.context.support.WithMockUser; import java.util.List; @@ -40,6 +41,7 @@ void get_all() { } @Test + @WithMockUser(roles = "WORKER") void add() { var count = repository.count(); @@ -54,6 +56,7 @@ void add() { } @Test + @WithMockUser(roles = "WORKER") void update() { var sample = repository.findAll().get(0); var request = toDto(sample); @@ -84,6 +87,7 @@ void get_one() { } @Test + @WithMockUser(roles = "WORKER") void update_status() { var sample = repository.findAll().get(0); var response = controller.updateStatus(sample.getId(), "IN_PROGRESS"); @@ -98,6 +102,7 @@ void update_status() { } @Test + @WithMockUser(roles = "WORKER") void delete() { var sample = repository.findAll().get(0); var response = controller.delete(sample.getId()); diff --git a/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/SamplingStandardTest.java b/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/SamplingStandardTest.java index a3e6700..22ad07b 100644 --- a/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/SamplingStandardTest.java +++ b/slp-backend/src/test/java/agh/edu/pl/slpbackend/integration/SamplingStandardTest.java @@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.HttpStatus; +import org.springframework.security.test.context.support.WithMockUser; import static org.assertj.core.api.Assertions.assertThat; @@ -34,6 +35,7 @@ void get_all() { } @Test + @WithMockUser(roles = "WORKER") void add() { var count = repository.count(); @@ -47,6 +49,7 @@ void add() { } @Test + @WithMockUser(roles = "WORKER") void update() { var samplingStandard = repository.findAll().get(0); var request = toDto(samplingStandard); diff --git a/slp-frontend/src/App.tsx b/slp-frontend/src/App.tsx index 19c2be2..5150e5b 100644 --- a/slp-frontend/src/App.tsx +++ b/slp-frontend/src/App.tsx @@ -11,7 +11,7 @@ import Sidebar from "./components/Sidebar"; import AlertComponent from './components/AlertComponent'; import AlertsContext from './contexts/AlertsContext'; -import PrivateRoute from './components/PrivateRoute'; +import {AdminRoute, WorkerRoute} from './components/PrivateRoute'; import CheckIsLogin from './components/CheckIsLogin'; import ProtocolReportDataForm from "./components/ProtocolReportDataForm"; import LoginForm from "./components/LoginForm"; @@ -57,9 +57,9 @@ function App() {
}/> - }/> + }/> }/> - }/> + }/> } @@ -87,24 +87,24 @@ function App() { + - + } /> } + element={} /> }/> - }/> - }/> + }/> + }/> + - + } /> diff --git a/slp-frontend/src/components/ExaminationForm.tsx b/slp-frontend/src/components/ExaminationForm.tsx index 1010a80..c36b67c 100644 --- a/slp-frontend/src/components/ExaminationForm.tsx +++ b/slp-frontend/src/components/ExaminationForm.tsx @@ -146,7 +146,6 @@ const ExaminationForm: FC<{}> = () => { } try { - console.log("cipa"); console.log(values); let response = await updateExamination(values); console.log(response); @@ -307,7 +306,7 @@ const ExaminationForm: FC<{}> = () => {
navigate(`/sample/manageExaminations/${sampleId}`)}>Anuluj - Zapisz + {localStorage.getItem('role') !== 'INTERN' && Zapisz}
diff --git a/slp-frontend/src/components/ExaminationsList.tsx b/slp-frontend/src/components/ExaminationsList.tsx index 649fdd3..baf128a 100644 --- a/slp-frontend/src/components/ExaminationsList.tsx +++ b/slp-frontend/src/components/ExaminationsList.tsx @@ -105,6 +105,9 @@ const ExaminationsList: FC<{}> = () => { setCheckedStates(prevState => { const newState = {...prevState}; if (newState[indicationId]) { + if (localStorage.getItem('role') === 'INTERN') { + return prevState; + } const confirmed = window.confirm("Czy na pewno? Badanie zostanie usunięte!"); if (!confirmed) { return prevState; @@ -173,12 +176,12 @@ const ExaminationsList: FC<{}> = () => { )} )) ))} - { e.stopPropagation(); generateKzwa(Number(sampleId)); } - }>Generuj KZWA + }>Generuj KZWA} navigate(`/sample/${sampleId}`)}>Powrót diff --git a/slp-frontend/src/components/PrivateRoute.tsx b/slp-frontend/src/components/PrivateRoute.tsx index d775fe4..c6ed98f 100644 --- a/slp-frontend/src/components/PrivateRoute.tsx +++ b/slp-frontend/src/components/PrivateRoute.tsx @@ -1,7 +1,9 @@ import NoPermitionPage from "../pages/NoPermitionPage"; -const PrivateRoute = ({children}:any):any => { +export const AdminRoute = ({children}:any):any => { return (localStorage.getItem('role') === 'ADMIN' ? <>{children}:) } -export default PrivateRoute; \ No newline at end of file +export const WorkerRoute = ({children}:any):any => { + return (localStorage.getItem('role') !== 'INTERN' ? <>{children}:) +} \ No newline at end of file diff --git a/slp-frontend/src/components/SampleForm.tsx b/slp-frontend/src/components/SampleForm.tsx index 8a5ccc3..ba0403a 100644 --- a/slp-frontend/src/components/SampleForm.tsx +++ b/slp-frontend/src/components/SampleForm.tsx @@ -140,7 +140,7 @@ const SampleForm: FC<{}> = () => { } } catch (err) { console.log(err) - setAlertDetails({isAlert: true, message: "Wystąpił bład spróbuj ponownie później", type: "error"}) + setAlertDetails({isAlert: true, message: "Wystąpił błąd, spróbuj ponownie później", type: "error"}) checkResponse(err); } } diff --git a/slp-frontend/src/components/SampleList.tsx b/slp-frontend/src/components/SampleList.tsx index 6ec78d8..4c0e8e9 100644 --- a/slp-frontend/src/components/SampleList.tsx +++ b/slp-frontend/src/components/SampleList.tsx @@ -119,7 +119,7 @@ const SampleList: React.FC = ({selectedFilters}) => { {!isLoading && numberOfPages > 0 && - + {localStorage.getItem('role') !== 'INTERN' && } @@ -148,7 +148,7 @@ const SampleList: React.FC = ({selectedFilters}) => { navigate(`/sample/${sample.id}`)} > - + } @@ -171,14 +171,14 @@ const SampleList: React.FC = ({selectedFilters}) => {
updateSortParams("id")}>ID
e.stopPropagation()}> = ({selectedFilters}) => { onClick={(e) => e.stopPropagation()} style={{width: '80%', height: '80%'}} /> - {sample.id} {sample.code} {sample.group}
}
- { + {localStorage.getItem('role') !== 'INTERN' && { e.stopPropagation(); const encoded = encodeURIComponent(JSON.stringify(selectedSamplesIds)); navigate(`/protocolReportData/${encoded}`); } }> Wprowadź dodatkowe dane - + }
Pokaż: = ({selectedFilters}) => { updatePageNumber(numberOfPages - 1)}/>
- -

diff --git a/slp-frontend/src/components/Sidebar.tsx b/slp-frontend/src/components/Sidebar.tsx index b23f791..8d82c92 100644 --- a/slp-frontend/src/components/Sidebar.tsx +++ b/slp-frontend/src/components/Sidebar.tsx @@ -70,37 +70,37 @@ const Sidebar: React.FC<{}> = () => { Lista próbek

+ {localStorage.getItem('role') !== 'INTERN' && ( +
  • +

    navigate("/addSample")} + > + Dodaj próbkę +

    +
  • + )}
  • navigate("/addSample")} - > - Dodaj próbkę -

    -
  • -
  • -

    navigate('/dictionary')} > Edytuj dane

  • + {localStorage.getItem('role') !== 'INTERN' && ( +
  • +

    navigate('/importMethods')} + > + Wczytaj metody +

    +
  • + )}
  • navigate('/importMethods')} - > - Wczytaj metody -

    -
  • -
  • -

    handleBackup()} > Archiwizuj dane @@ -110,7 +110,6 @@ const Sidebar: React.FC<{}> = () => {

  • navigate('/register')} > Zarejestruj użytkownika @@ -120,7 +119,6 @@ const Sidebar: React.FC<{}> = () => {

  • navigate('/changePassword')} > Zmień hasło @@ -129,7 +127,6 @@ const Sidebar: React.FC<{}> = () => { {localStorage.getItem('role') === 'ADMIN' && (

  • navigate('/admin-panel')} > Lista użytkowników @@ -138,7 +135,6 @@ const Sidebar: React.FC<{}> = () => {
  • logout(setAlertDetails)} > Wyloguj diff --git a/slp-frontend/src/components/UsersList.tsx b/slp-frontend/src/components/UsersList.tsx index eac7024..2407da4 100644 --- a/slp-frontend/src/components/UsersList.tsx +++ b/slp-frontend/src/components/UsersList.tsx @@ -6,6 +6,7 @@ import {Dropdown, Modal} from "react-bootstrap"; import ConfirmPopup from "./ui/ConfirmPopup"; import {AlertContext} from "../contexts/AlertsContext"; import ChangePasswordFormAdminForm from "./ChangePasswordForAdminForm"; +import { RoleEnumDesc } from "../utils/enums"; const UserList = () => { const [userList, setUserList] = useState([]) @@ -80,7 +81,7 @@ const UserList = () => { {user.email} {user.name} - {user.role === "WORKER" ? "Pracownik" : "Admin"} + {RoleEnumDesc.find(role => role.value === user.role)?.label} ))} diff --git a/slp-frontend/src/components/dictionary/assortment/AssortmentDict.tsx b/slp-frontend/src/components/dictionary/assortment/AssortmentDict.tsx index 5dcd223..5074a06 100644 --- a/slp-frontend/src/components/dictionary/assortment/AssortmentDict.tsx +++ b/slp-frontend/src/components/dictionary/assortment/AssortmentDict.tsx @@ -125,11 +125,12 @@ const AssortmentDict = () => {

    + {localStorage.getItem('role') !== 'INTERN' && <div className="w-full justify-content-between flex mb-2"> <StandardButton className="self-center h-10 ml-2" type={"button"} onClick={handleAdd}> Dodaj nowy </StandardButton> - </div> + </div>} <DictionaryTable<Assortment> columns={columns} diff --git a/slp-frontend/src/components/dictionary/client/ClientDict.tsx b/slp-frontend/src/components/dictionary/client/ClientDict.tsx index 2d60dfe..b7cbc0b 100644 --- a/slp-frontend/src/components/dictionary/client/ClientDict.tsx +++ b/slp-frontend/src/components/dictionary/client/ClientDict.tsx @@ -120,11 +120,12 @@ const ClientDict = () => { <div className="w-full"> <h1 className="text-center font-bold text-3xl w-full my-3">Klienci</h1> + {localStorage.getItem('role') !== 'INTERN' && <div className="w-full justify-content-between flex mb-2"> <StandardButton className="self-center h-10 ml-2" type={"button"} onClick={handleAdd}> Dodaj nowy </StandardButton> - </div> + </div>} <DictionaryTable<Client> columns={columns} diff --git a/slp-frontend/src/components/dictionary/code/CodeDict.tsx b/slp-frontend/src/components/dictionary/code/CodeDict.tsx index f279c50..c56219c 100644 --- a/slp-frontend/src/components/dictionary/code/CodeDict.tsx +++ b/slp-frontend/src/components/dictionary/code/CodeDict.tsx @@ -106,12 +106,13 @@ const CodeDict = () => { return ( <div className="w-full"> <h1 className="text-center font-bold text-3xl w-full my-3">Kody próbki</h1> - + + {localStorage.getItem('role') !== 'INTERN' && <div className="w-full justify-content-between flex mb-2"> <StandardButton className="self-center h-10 ml-2" type={"button"} onClick={handleAdd}> Dodaj nowy </StandardButton> - </div> + </div>} <DictionaryTable<Code> columns={columns} diff --git a/slp-frontend/src/components/dictionary/indication/IndicationDict.tsx b/slp-frontend/src/components/dictionary/indication/IndicationDict.tsx index 27ff5a2..af1e50f 100644 --- a/slp-frontend/src/components/dictionary/indication/IndicationDict.tsx +++ b/slp-frontend/src/components/dictionary/indication/IndicationDict.tsx @@ -105,11 +105,12 @@ const IndicationDict = () => { <div className="w-full"> <h1 className="text-center font-bold text-3xl w-full my-3">Test dict</h1> + {localStorage.getItem('role') !== 'INTERN' && <div className="w-full justify-content-between flex mb-2"> <StandardButton className="self-center h-10 ml-2" type={"button"} onClick={handleAdd}> Dodaj nowy </StandardButton> - </div> + </div>} <DictionaryTable<Indication> columns={columns} diff --git a/slp-frontend/src/components/dictionary/inspection/InspectionDict.tsx b/slp-frontend/src/components/dictionary/inspection/InspectionDict.tsx index bd04607..89269d1 100644 --- a/slp-frontend/src/components/dictionary/inspection/InspectionDict.tsx +++ b/slp-frontend/src/components/dictionary/inspection/InspectionDict.tsx @@ -108,11 +108,12 @@ const InspectionDict = () => { <div className="w-full"> <h1 className="text-center font-bold text-3xl w-full my-3">Rodzaje kontroli</h1> + {localStorage.getItem('role') !== 'INTERN' && <div className="w-full justify-content-between flex mb-2"> <StandardButton className="self-center h-10 ml-2" type={"button"} onClick={handleAdd}> Dodaj nowy </StandardButton> - </div> + </div>} <DictionaryTable<Inspection> columns={columns} diff --git a/slp-frontend/src/components/dictionary/product-group/ProductGroupDict.tsx b/slp-frontend/src/components/dictionary/product-group/ProductGroupDict.tsx index 60c74e8..7ed3b68 100644 --- a/slp-frontend/src/components/dictionary/product-group/ProductGroupDict.tsx +++ b/slp-frontend/src/components/dictionary/product-group/ProductGroupDict.tsx @@ -108,11 +108,12 @@ const ProductGroupDict = () => { <div className="w-full"> <h1 className="text-center font-bold text-3xl w-full my-3">Grupy produktów</h1> + {localStorage.getItem('role') !== 'INTERN' && <div className="w-full justify-content-between flex mb-2"> <StandardButton className="self-center h-10 ml-2" type={"button"} onClick={handleAdd}> Dodaj nowy </StandardButton> - </div> + </div>} <DictionaryTable<ProductGroup> columns={columns} diff --git a/slp-frontend/src/components/dictionary/sampling-standard/SamplingStandardDict.tsx b/slp-frontend/src/components/dictionary/sampling-standard/SamplingStandardDict.tsx index 597b858..923ce57 100644 --- a/slp-frontend/src/components/dictionary/sampling-standard/SamplingStandardDict.tsx +++ b/slp-frontend/src/components/dictionary/sampling-standard/SamplingStandardDict.tsx @@ -107,11 +107,12 @@ const SamplingStandardDict = () => { <div className="w-full"> <h1 className="text-center font-bold text-3xl w-full my-3">Normy pobrania próbki</h1> + {localStorage.getItem('role') !== 'INTERN' && <div className="w-full justify-content-between flex mb-2"> <StandardButton className="self-center h-10 ml-2" type={"button"} onClick={handleAdd}> Dodaj nowy </StandardButton> - </div> + </div>} <DictionaryTable<SamplingStandards> columns={columns} diff --git a/slp-frontend/src/components/ui/DictionaryTable.tsx b/slp-frontend/src/components/ui/DictionaryTable.tsx index 3ab8fe6..43b07e0 100644 --- a/slp-frontend/src/components/ui/DictionaryTable.tsx +++ b/slp-frontend/src/components/ui/DictionaryTable.tsx @@ -131,8 +131,8 @@ const DictionaryTable = <T extends {}>({ <Dropdown.Menu> <Dropdown.Item onClick={() => onView(item)}>Szczegóły</Dropdown.Item> - <Dropdown.Item onClick={() => onEdit(item)}>Edycja</Dropdown.Item> - <Dropdown.Item onClick={() => onDelete(item)}>Usuń</Dropdown.Item> + {localStorage.getItem('role') !== 'INTERN' && <Dropdown.Item onClick={() => onEdit(item)}>Edycja</Dropdown.Item>} + {localStorage.getItem('role') !== 'INTERN' && <Dropdown.Item onClick={() => onDelete(item)}>Usuń</Dropdown.Item>} </Dropdown.Menu> </Dropdown> </td> diff --git a/slp-frontend/src/pages/SingleSamplePage.tsx b/slp-frontend/src/pages/SingleSamplePage.tsx index 62b4a54..abce0a3 100644 --- a/slp-frontend/src/pages/SingleSamplePage.tsx +++ b/slp-frontend/src/pages/SingleSamplePage.tsx @@ -149,23 +149,23 @@ const SingleSamplePage = () => { </Div> <div className="flex justify-center w-3/4 p-3 gap-2"> - <StandardButton type="button" onClick={() => { + {localStorage.getItem('role') !== 'INTERN' && <StandardButton type="button" onClick={() => { navigate(`/sample/addReportData/${sampleId}`) - }}>Dodaj dodatkowe informacje</StandardButton> + }}>Dodaj dodatkowe informacje</StandardButton>} <StandardButton type="button" onClick={() => { navigate(`/sample/manageExaminations/${sampleId}`) }}>Zarządzaj badaniami</StandardButton> - <StandardButton type="button" onClick={() => { + {localStorage.getItem('role') !== 'INTERN' && <StandardButton type="button" onClick={() => { navigate(`/sample/edit/${sampleId}`) - }}>Edytuj próbkę</StandardButton> - <Dropdown> + }}>Edytuj próbkę</StandardButton>} + {localStorage.getItem('role') !== 'INTERN' && <Dropdown> <Dropdown.Toggle disabled={sample?.progressStatus !== ProgressStateEnum.DONE} variant="primary" id="dropdown-basic" className="p-2 rounded self-center text-white border-0" style={{ - backgroundColor: sample?.progressStatus !== ProgressStateEnum.DONE ? 'rgb(229, 231, 235)' : 'rgb(14, 165, 233)', // Grey when disabled, blue otherwise + backgroundColor: sample?.progressStatus !== ProgressStateEnum.DONE ? 'rgb(209, 213, 219)' : 'rgb(14, 165, 233)', color: sample?.progressStatus !== ProgressStateEnum.DONE ? 'rgb(107, 114, 128)' : 'white', cursor: sample?.progressStatus !== ProgressStateEnum.DONE ? 'not-allowed' : 'pointer', pointerEvents: sample?.progressStatus !== ProgressStateEnum.DONE ? 'none' : 'auto' @@ -178,10 +178,10 @@ const SingleSamplePage = () => { <Dropdown.Item onClick={() => generateReport(Number(sampleId), "F4")}>Raport F-4</Dropdown.Item> <Dropdown.Item onClick={() => generateReport(Number(sampleId), "F5")}>Raport F-5</Dropdown.Item> </Dropdown.Menu> - </Dropdown> - <StandardButton type="button" className="!bg-red-500 hover:!bg-red-600" onClick={() => { + </Dropdown>} + {localStorage.getItem('role') !== 'INTERN' && <StandardButton type="button" className="!bg-red-500 hover:!bg-red-600" onClick={() => { setIsPopupOpen(true); - }}>Usuń próbkę</StandardButton> + }}>Usuń próbkę</StandardButton>} </div> <ConfirmPopup diff --git a/slp-frontend/src/utils/enums.tsx b/slp-frontend/src/utils/enums.tsx index 6268f16..50d87d7 100644 --- a/slp-frontend/src/utils/enums.tsx +++ b/slp-frontend/src/utils/enums.tsx @@ -1,30 +1,29 @@ import {ProgressState, Role} from "./types"; export enum ProgressStateEnum { - TODO = 'TODO', IN_PROGRESS = 'IN_PROGRESS', DONE = 'DONE' } export const ProgressStateEnumDesc: ProgressState[] = [ - {value: ProgressStateEnum.TODO, label: 'Do zrobienia'}, {value: ProgressStateEnum.IN_PROGRESS, label: 'W trakcie'}, {value: ProgressStateEnum.DONE, label: 'Gotowe'} ]; export const ProgressStateMap = new Map<ProgressStateEnum, string>([ - [ProgressStateEnum.TODO, 'Do zrobienia'], [ProgressStateEnum.IN_PROGRESS, 'W trakcie'], [ProgressStateEnum.DONE, 'Gotowe'], ]); export enum RoleEnum { + ADMIN = "ADMIN", WORKER = "WORKER", - ADMIN = "ADMIN" + INTERN = "INTERN" } export const RoleEnumDesc: Role[] = [ + {value: RoleEnum.ADMIN, label: "Administrator"}, {value: RoleEnum.WORKER, label: "Pracownik"}, - {value: RoleEnum.ADMIN, label: "Admin"} + {value: RoleEnum.INTERN, label: "Praktykant"} ] \ No newline at end of file