SpringSecurity: Authorisation and Roles
This commit is contained in:
parent
f4b171add1
commit
d3751dda0f
@ -13,6 +13,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
|||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.util.UriComponentsBuilder;
|
import org.springframework.web.util.UriComponentsBuilder;
|
||||||
|
|
||||||
|
import java.security.Principal;
|
||||||
|
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
@ -28,8 +30,12 @@ public class CashCardController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/{requestedId}")
|
@GetMapping("/{requestedId}")
|
||||||
public ResponseEntity<CashCard> findById(@PathVariable Long requestedId) {
|
public ResponseEntity<CashCard> findById(@PathVariable Long requestedId, Principal principal) {
|
||||||
Optional<CashCard> cashCardOptional = cashCardRepository.findById(requestedId);
|
CashCard cashCard = cashCardRepository.findByIdAndOwner(
|
||||||
|
requestedId,
|
||||||
|
principal.getName()
|
||||||
|
);
|
||||||
|
Optional<CashCard> cashCardOptional = Optional.ofNullable(cashCard);
|
||||||
|
|
||||||
if (cashCardOptional.isPresent()) {
|
if (cashCardOptional.isPresent()) {
|
||||||
return ResponseEntity.ok(cashCardOptional.get());
|
return ResponseEntity.ok(cashCardOptional.get());
|
||||||
@ -44,8 +50,9 @@ public class CashCardController {
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
@GetMapping
|
@GetMapping
|
||||||
public ResponseEntity<List<CashCard>> findAll(Pageable pageable) {
|
public ResponseEntity<List<CashCard>> findAll(Pageable pageable, Principal principal) {
|
||||||
Page<CashCard> page = cashCardRepository.findAll(
|
Page<CashCard> page = cashCardRepository.findByOwner(
|
||||||
|
principal.getName(),
|
||||||
PageRequest.of(
|
PageRequest.of(
|
||||||
pageable.getPageNumber(),
|
pageable.getPageNumber(),
|
||||||
pageable.getPageSize(),
|
pageable.getPageSize(),
|
||||||
@ -56,13 +63,15 @@ public class CashCardController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping
|
@PostMapping
|
||||||
private ResponseEntity<Void> createCashCard(@RequestBody CashCard newCashCardRequest, UriComponentsBuilder ucb) {
|
private ResponseEntity<Void> createCashCard(@RequestBody CashCard newCashCardRequest, UriComponentsBuilder ucb, Principal principal) {
|
||||||
CashCard savedCashCard = cashCardRepository.save(newCashCardRequest); // CRUD - Create
|
CashCard cashCardWithOwner = new CashCard(null, newCashCardRequest.amount(), principal.getName());
|
||||||
|
CashCard savedCashCard = cashCardRepository.save(cashCardWithOwner); // CRUD - Create
|
||||||
|
|
||||||
URI locationOfNewCashCard = ucb
|
URI locationOfNewCashCard = ucb
|
||||||
.path("cashcards/{id}")
|
.path("cashcards/{id}")
|
||||||
.buildAndExpand(savedCashCard.id())
|
.buildAndExpand(savedCashCard.id())
|
||||||
.toUri();
|
.toUri();
|
||||||
|
|
||||||
return ResponseEntity.created(locationOfNewCashCard).build();
|
return ResponseEntity.created(locationOfNewCashCard).build();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,10 +2,15 @@ package djmil.cashcard;
|
|||||||
|
|
||||||
import org.springframework.data.repository.CrudRepository;
|
import org.springframework.data.repository.CrudRepository;
|
||||||
import org.springframework.data.repository.PagingAndSortingRepository;
|
import org.springframework.data.repository.PagingAndSortingRepository;
|
||||||
|
import org.springframework.data.domain.Page;
|
||||||
|
import org.springframework.data.domain.PageRequest;
|
||||||
|
|
||||||
public interface
|
public interface
|
||||||
CashCardRepository
|
CashCardRepository
|
||||||
extends
|
extends
|
||||||
CrudRepository<CashCard, Long>,
|
CrudRepository<CashCard, Long>,
|
||||||
PagingAndSortingRepository<CashCard, Long> {
|
PagingAndSortingRepository<CashCard, Long>
|
||||||
|
{
|
||||||
|
CashCard findByIdAndOwner(Long id, String owner);
|
||||||
|
Page<CashCard> findByOwner(String owner, PageRequest amount);
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,7 @@ class CashcardApplicationTests {
|
|||||||
@Test
|
@Test
|
||||||
@DirtiesContext
|
@DirtiesContext
|
||||||
void shouldCreateANewCashCard() {
|
void shouldCreateANewCashCard() {
|
||||||
CashCard newCashCard = new CashCard(null, 250.00, "sarah1");
|
CashCard newCashCard = new CashCard(null, 250.00, null);
|
||||||
ResponseEntity<Void> createResponse = restTemplate
|
ResponseEntity<Void> createResponse = restTemplate
|
||||||
.withBasicAuth("sarah1", "abc123")
|
.withBasicAuth("sarah1", "abc123")
|
||||||
.postForEntity("/cashcards", newCashCard, Void.class );
|
.postForEntity("/cashcards", newCashCard, Void.class );
|
||||||
@ -161,4 +161,12 @@ class CashcardApplicationTests {
|
|||||||
.getForEntity("/cashcards/99", String.class);
|
.getForEntity("/cashcards/99", String.class);
|
||||||
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.FORBIDDEN);
|
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.FORBIDDEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void shouldNotAllowAccessToCashCardsTheyDoNotOwn() {
|
||||||
|
ResponseEntity<String> response = restTemplate
|
||||||
|
.withBasicAuth("sarah1", "abc123")
|
||||||
|
.getForEntity("/cashcards/102", String.class); // <<-- kumar2's data
|
||||||
|
assertThat(response.getStatusCode()).isEqualTo(HttpStatus.NOT_FOUND);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
INSERT INTO CASH_CARD(ID, AMOUNT, OWNER) VALUES (99, 123.45, 'sarah1');
|
INSERT INTO CASH_CARD(ID, AMOUNT, OWNER) VALUES (99, 123.45, 'sarah1');
|
||||||
INSERT INTO CASH_CARD(ID, AMOUNT, OWNER) VALUES (100, 1.00, 'sarah1');
|
INSERT INTO CASH_CARD(ID, AMOUNT, OWNER) VALUES (100, 1.00, 'sarah1');
|
||||||
INSERT INTO CASH_CARD(ID, AMOUNT, OWNER) VALUES (101, 150.00, 'sarah1');
|
INSERT INTO CASH_CARD(ID, AMOUNT, OWNER) VALUES (101, 150.00, 'sarah1');
|
||||||
|
INSERT INTO CASH_CARD(ID, AMOUNT, OWNER) VALUES (102, 200.00, 'kumar2');
|
Loading…
Reference in New Issue
Block a user