TSK-359 setWorkbasketAccessItems doesn't save access items
This commit is contained in:
parent
df6d5944bc
commit
bab3d9ff5c
|
|
@ -160,8 +160,10 @@ public interface WorkbasketService {
|
||||||
* @param workbasketId
|
* @param workbasketId
|
||||||
* the id of the Workbasket
|
* the id of the Workbasket
|
||||||
* @return List of WorkbasketAccessItems for the Workbasket with workbasketKey
|
* @return List of WorkbasketAccessItems for the Workbasket with workbasketKey
|
||||||
|
* @throws NotAuthorizedException
|
||||||
|
* if the current user is not member of role BUSINESS_ADMIN or ADMIN
|
||||||
*/
|
*/
|
||||||
List<WorkbasketAccessItem> getWorkbasketAccessItems(String workbasketId);
|
List<WorkbasketAccessItem> getWorkbasketAccessItems(String workbasketId) throws NotAuthorizedException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Setting up the new WorkbasketAccessItems for a Workbasket. Already stored values will be completely replaced by
|
* Setting up the new WorkbasketAccessItems for a Workbasket. Already stored values will be completely replaced by
|
||||||
|
|
@ -173,9 +175,11 @@ public interface WorkbasketService {
|
||||||
* List of WorkbasketAccessItems which does replace all current stored ones.
|
* List of WorkbasketAccessItems which does replace all current stored ones.
|
||||||
* @throws InvalidArgumentException
|
* @throws InvalidArgumentException
|
||||||
* will be thrown when the parameter is NULL or member doesn´t match the preconditions
|
* will be thrown when the parameter is NULL or member doesn´t match the preconditions
|
||||||
|
* @throws NotAuthorizedException
|
||||||
|
* if the current user is not member of role BUSINESS_ADMIN or ADMIN
|
||||||
*/
|
*/
|
||||||
void setWorkbasketAccessItems(String workbasketId, List<WorkbasketAccessItem> wbAccessItems)
|
void setWorkbasketAccessItems(String workbasketId, List<WorkbasketAccessItem> wbAccessItems)
|
||||||
throws InvalidArgumentException;
|
throws InvalidArgumentException, NotAuthorizedException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method returns the workbaskets for which the current user has all permissions specified in the permissions
|
* This method returns the workbaskets for which the current user has all permissions specified in the permissions
|
||||||
|
|
@ -352,6 +356,8 @@ public interface WorkbasketService {
|
||||||
*
|
*
|
||||||
* @param accessId
|
* @param accessId
|
||||||
* of a taskana-user.
|
* of a taskana-user.
|
||||||
|
* @throws NotAuthorizedException
|
||||||
|
* if the current user is not member of role BUSINESS_ADMIN or ADMIN
|
||||||
*/
|
*/
|
||||||
void deleteWorkbasketAccessItemsForAccessId(String accessId);
|
void deleteWorkbasketAccessItemsForAccessId(String accessId) throws NotAuthorizedException;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -210,10 +210,11 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setWorkbasketAccessItems(String workbasketId, List<WorkbasketAccessItem> wbAccessItems)
|
public void setWorkbasketAccessItems(String workbasketId, List<WorkbasketAccessItem> wbAccessItems)
|
||||||
throws InvalidArgumentException {
|
throws InvalidArgumentException, NotAuthorizedException {
|
||||||
|
LOGGER.debug("entry to setWorkbasketAccessItems(workbasketAccessItems = {})", wbAccessItems.toString());
|
||||||
|
taskanaEngine.checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
|
||||||
List<WorkbasketAccessItemImpl> newItems = new ArrayList<>();
|
List<WorkbasketAccessItemImpl> newItems = new ArrayList<>();
|
||||||
try {
|
try {
|
||||||
LOGGER.debug("entry to setWorkbasketAccessItems(workbasketAccessItems = {})", wbAccessItems.toString());
|
|
||||||
taskanaEngine.openConnection();
|
taskanaEngine.openConnection();
|
||||||
// Check pre-conditions and set ID
|
// Check pre-conditions and set ID
|
||||||
if (!wbAccessItems.isEmpty()) {
|
if (!wbAccessItems.isEmpty()) {
|
||||||
|
|
@ -262,8 +263,9 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void deleteWorkbasketAccessItemsForAccessId(String accessId) {
|
public void deleteWorkbasketAccessItemsForAccessId(String accessId) throws NotAuthorizedException {
|
||||||
LOGGER.debug("entry to deleteWorkbasketAccessItemsForAccessId(accessId = {})", accessId);
|
LOGGER.debug("entry to deleteWorkbasketAccessItemsForAccessId(accessId = {})", accessId);
|
||||||
|
taskanaEngine.checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
|
||||||
try {
|
try {
|
||||||
taskanaEngine.openConnection();
|
taskanaEngine.openConnection();
|
||||||
workbasketAccessMapper.deleteAccessItemsForAccessId(accessId);
|
workbasketAccessMapper.deleteAccessItemsForAccessId(accessId);
|
||||||
|
|
@ -321,8 +323,9 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<WorkbasketAccessItem> getWorkbasketAccessItems(String workbasketId) {
|
public List<WorkbasketAccessItem> getWorkbasketAccessItems(String workbasketId) throws NotAuthorizedException {
|
||||||
LOGGER.debug("entry to getWorkbasketAccessItems(workbasketId = {})", workbasketId);
|
LOGGER.debug("entry to getWorkbasketAccessItems(workbasketId = {})", workbasketId);
|
||||||
|
taskanaEngine.checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
|
||||||
List<WorkbasketAccessItem> result = new ArrayList<>();
|
List<WorkbasketAccessItem> result = new ArrayList<>();
|
||||||
try {
|
try {
|
||||||
taskanaEngine.openConnection();
|
taskanaEngine.openConnection();
|
||||||
|
|
|
||||||
|
|
@ -158,9 +158,9 @@ public class UpdateWorkbasketAuthorizationsAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
@WithAccessId(
|
@WithAccessId(
|
||||||
userName = "teamlead_1",
|
userName = "teamlead_1",
|
||||||
groupNames = {"group_1"})
|
groupNames = {"group_1", "businessadmin"})
|
||||||
@Test
|
@Test
|
||||||
public void testUpdatedAccessItemList() throws InvalidArgumentException {
|
public void testUpdatedAccessItemList() throws InvalidArgumentException, NotAuthorizedException {
|
||||||
WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
|
WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
|
||||||
final String wbId = "WBI:100000000000000000000000000000000004";
|
final String wbId = "WBI:100000000000000000000000000000000004";
|
||||||
List<WorkbasketAccessItem> accessItems = workbasketService
|
List<WorkbasketAccessItem> accessItems = workbasketService
|
||||||
|
|
@ -199,9 +199,9 @@ public class UpdateWorkbasketAuthorizationsAccTest extends AbstractAccTest {
|
||||||
|
|
||||||
@WithAccessId(
|
@WithAccessId(
|
||||||
userName = "teamlead_1",
|
userName = "teamlead_1",
|
||||||
groupNames = {"group_1"})
|
groupNames = {"group_1", "businessadmin"})
|
||||||
@Test
|
@Test
|
||||||
public void testInsertAccessItemList() throws InvalidArgumentException {
|
public void testInsertAccessItemList() throws InvalidArgumentException, NotAuthorizedException {
|
||||||
WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
|
WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
|
||||||
final String wbId = "WBI:100000000000000000000000000000000004";
|
final String wbId = "WBI:100000000000000000000000000000000004";
|
||||||
List<WorkbasketAccessItem> accessItems = workbasketService
|
List<WorkbasketAccessItem> accessItems = workbasketService
|
||||||
|
|
@ -257,8 +257,11 @@ public class UpdateWorkbasketAuthorizationsAccTest extends AbstractAccTest {
|
||||||
assertTrue(accessIdCountBefore > accessIdCountAfter);
|
assertTrue(accessIdCountBefore > accessIdCountAfter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@WithAccessId(
|
||||||
|
userName = "teamlead_1",
|
||||||
|
groupNames = {"businessadmin"})
|
||||||
@Test
|
@Test
|
||||||
public void testDeleteAccessItemsForAccessIdWithUnusedValuesThrowingNoException() {
|
public void testDeleteAccessItemsForAccessIdWithUnusedValuesThrowingNoException() throws NotAuthorizedException {
|
||||||
WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
|
WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
|
||||||
workbasketService.deleteWorkbasketAccessItemsForAccessId("");
|
workbasketService.deleteWorkbasketAccessItemsForAccessId("");
|
||||||
workbasketService.deleteWorkbasketAccessItemsForAccessId(null);
|
workbasketService.deleteWorkbasketAccessItemsForAccessId(null);
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ public class SampleLoginModule implements LoginModule {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addGroupSubjectsDerivedFromUsername() {
|
private void addGroupSubjectsDerivedFromUsername() {
|
||||||
String username = nameCallback.getName();
|
String username = nameCallback.getName().toLowerCase();
|
||||||
char role = username.charAt(1);
|
char role = username.charAt(1);
|
||||||
switch (role) {
|
switch (role) {
|
||||||
case 'u':
|
case 'u':
|
||||||
|
|
@ -48,8 +48,12 @@ public class SampleLoginModule implements LoginModule {
|
||||||
subject.getPrincipals()
|
subject.getPrincipals()
|
||||||
.add(new GroupPrincipal("manager" + "_domain_" + username.charAt(0)));
|
.add(new GroupPrincipal("manager" + "_domain_" + username.charAt(0)));
|
||||||
break;
|
break;
|
||||||
|
case 'e':
|
||||||
|
subject.getPrincipals()
|
||||||
|
.add(new GroupPrincipal("businessadmin"));
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
//necessary for checkstyle
|
// necessary for checkstyle
|
||||||
}
|
}
|
||||||
subject.getPrincipals().add(new GroupPrincipal("team_" + username.substring(2, 6)));
|
subject.getPrincipals().add(new GroupPrincipal("team_" + username.substring(2, 6)));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
taskana.roles.user = group1 | group2|teamlead_1 |teamlead_2 |user_1_1| user_1_1| user_1_2| user_2_1| user_2_2| max|elena|simone
|
||||||
|
taskana.roles.Admin=name=konrad,Organisation=novatec|admin
|
||||||
|
taskana.roles.businessadmin=max|Moritz|businessadmin
|
||||||
|
|
@ -185,8 +185,14 @@ public class WorkbasketController {
|
||||||
@Transactional(readOnly = true, rollbackFor = Exception.class)
|
@Transactional(readOnly = true, rollbackFor = Exception.class)
|
||||||
public ResponseEntity<List<WorkbasketAccessItemResource>> getWorkbasketAccessItems(
|
public ResponseEntity<List<WorkbasketAccessItemResource>> getWorkbasketAccessItems(
|
||||||
@PathVariable(value = "workbasketId") String workbasketId) {
|
@PathVariable(value = "workbasketId") String workbasketId) {
|
||||||
List<WorkbasketAccessItem> wbAuthorizations = workbasketService.getWorkbasketAccessItems(workbasketId);
|
List<WorkbasketAccessItem> wbAuthorizations;
|
||||||
List<WorkbasketAccessItemResource> result = new ArrayList<>();
|
List<WorkbasketAccessItemResource> result = new ArrayList<>();
|
||||||
|
try {
|
||||||
|
wbAuthorizations = workbasketService.getWorkbasketAccessItems(workbasketId);
|
||||||
|
} catch (NotAuthorizedException e1) {
|
||||||
|
TransactionInterceptor.currentTransactionStatus().setRollbackOnly();
|
||||||
|
return new ResponseEntity<>(result, HttpStatus.UNAUTHORIZED);
|
||||||
|
}
|
||||||
wbAuthorizations
|
wbAuthorizations
|
||||||
.forEach(accItem -> {
|
.forEach(accItem -> {
|
||||||
try {
|
try {
|
||||||
|
|
@ -228,6 +234,7 @@ public class WorkbasketController {
|
||||||
}
|
}
|
||||||
|
|
||||||
@PutMapping(value = "/{workbasketId}/workbasketAccessItems/")
|
@PutMapping(value = "/{workbasketId}/workbasketAccessItems/")
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public ResponseEntity<?> setWorkbasketAccessItems(@PathVariable(value = "workbasketId") String workbasketId,
|
public ResponseEntity<?> setWorkbasketAccessItems(@PathVariable(value = "workbasketId") String workbasketId,
|
||||||
@RequestBody List<WorkbasketAccessItemResource> workbasketAccessResourceItems) {
|
@RequestBody List<WorkbasketAccessItemResource> workbasketAccessResourceItems) {
|
||||||
try {
|
try {
|
||||||
|
|
@ -236,7 +243,12 @@ public class WorkbasketController {
|
||||||
}
|
}
|
||||||
List<WorkbasketAccessItem> wbAccessItems = new ArrayList<>();
|
List<WorkbasketAccessItem> wbAccessItems = new ArrayList<>();
|
||||||
workbasketAccessResourceItems.forEach(item -> wbAccessItems.add(workbasketAccessItemMapper.toModel(item)));
|
workbasketAccessResourceItems.forEach(item -> wbAccessItems.add(workbasketAccessItemMapper.toModel(item)));
|
||||||
workbasketService.setWorkbasketAccessItems(workbasketId, wbAccessItems);
|
try {
|
||||||
|
workbasketService.setWorkbasketAccessItems(workbasketId, wbAccessItems);
|
||||||
|
} catch (NotAuthorizedException e) {
|
||||||
|
TransactionInterceptor.currentTransactionStatus().setRollbackOnly();
|
||||||
|
return new ResponseEntity<>(HttpStatus.UNAUTHORIZED);
|
||||||
|
}
|
||||||
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
|
||||||
} catch (InvalidArgumentException | NullPointerException e) {
|
} catch (InvalidArgumentException | NullPointerException e) {
|
||||||
return new ResponseEntity<>(HttpStatus.PRECONDITION_FAILED);
|
return new ResponseEntity<>(HttpStatus.PRECONDITION_FAILED);
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,8 @@ import pro.taskana.rest.WorkbasketController;
|
||||||
import pro.taskana.rest.resource.WorkbasketAccessItemResource;
|
import pro.taskana.rest.resource.WorkbasketAccessItemResource;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Transforms {@link WorkbasketAccessItem} to its resource counterpart {@link WorkbasketAccessItemResource} and vice versa.
|
* Transforms {@link WorkbasketAccessItem} to its resource counterpart {@link WorkbasketAccessItemResource} and vice
|
||||||
|
* versa.
|
||||||
*/
|
*/
|
||||||
@Component
|
@Component
|
||||||
public class WorkbasketAccessItemMapper {
|
public class WorkbasketAccessItemMapper {
|
||||||
|
|
@ -57,7 +58,7 @@ public class WorkbasketAccessItemMapper {
|
||||||
resource.add(
|
resource.add(
|
||||||
linkTo(methodOn(WorkbasketController.class).setWorkbasketAccessItems(wbAccItem.getWorkbasketId(),
|
linkTo(methodOn(WorkbasketController.class).setWorkbasketAccessItems(wbAccItem.getWorkbasketId(),
|
||||||
Collections.singletonList(resource)))
|
Collections.singletonList(resource)))
|
||||||
.withRel("setWorkbasketAuthorizations"));
|
.withRel("setWorkbasketAccessItems"));
|
||||||
resource.add(
|
resource.add(
|
||||||
linkTo(methodOn(WorkbasketController.class).deleteWorkbasketAccessItem(wbAccItem.getId()))
|
linkTo(methodOn(WorkbasketController.class).deleteWorkbasketAccessItem(wbAccItem.getId()))
|
||||||
.withRel("deleteWorkbasketAccessItem"));
|
.withRel("deleteWorkbasketAccessItem"));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue