TSK-72: Add 'GetPermissionsForWorkbasketKey' to WorkbasketService

This commit is contained in:
BVier 2018-01-24 16:26:06 +01:00 committed by Holger Hagen
parent 87e11970f3
commit 40d392d887
5 changed files with 109 additions and 9 deletions

View File

@ -167,4 +167,12 @@ public interface WorkbasketService {
*/
Workbasket newWorkbasket();
/**
* Returns a set with all permissions of the current user at this workbasket.
*
* @param workbasketKey
* @return a Set with all permissions
*/
List<WorkbasketAuthorization> getPermissionsForWorkbasket(String workbasketKey);
}

View File

@ -299,7 +299,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
CurrentUserContext.getUserid(), workbasketAuthorization.name(), workbasketKey);
List<WorkbasketAccessItem> accessItems = workbasketAccessMapper
.findByWorkbasketAndAccessIdAndAuthorizations(workbasketKey, accessIds, workbasketAuthorization.name());
.findByWorkbasketAndAccessIdAndAuthorization(workbasketKey, accessIds, workbasketAuthorization.name());
if (accessItems.size() <= 0) {
throw new NotAuthorizedException("Not authorized. Authorization '" + workbasketAuthorization.name()
@ -348,6 +348,14 @@ public class WorkbasketServiceImpl implements WorkbasketService {
}
}
@Override
public List<WorkbasketAuthorization> getPermissionsForWorkbasket(String workbasketKey) {
List<WorkbasketAuthorization> permissions = new ArrayList<>();
WorkbasketAccessItem wbAcc = workbasketAccessMapper.findByWorkbasketAndAccessId(workbasketKey, CurrentUserContext.getAccessIds());
this.addWorkbasketAccessItemValuesToPermissionSet(wbAcc, permissions);
return permissions;
}
@Override
public WorkbasketQuery createWorkbasketQuery() {
return new WorkbasketQueryImpl(taskanaEngine, workbasketAccessMapper);
@ -371,6 +379,48 @@ public class WorkbasketServiceImpl implements WorkbasketService {
}
}
private void addWorkbasketAccessItemValuesToPermissionSet(WorkbasketAccessItem workbasketAccessItem, List<WorkbasketAuthorization> permissions) {
if (workbasketAccessItem.isPermOpen()) {
permissions.add(WorkbasketAuthorization.OPEN);
}
if (workbasketAccessItem.isPermRead()) {
permissions.add(WorkbasketAuthorization.READ);
}
if (workbasketAccessItem.isPermAppend()) {
permissions.add(WorkbasketAuthorization.APPEND);
}
if (workbasketAccessItem.isPermTransfer()) {
permissions.add(WorkbasketAuthorization.TRANSFER);
}
if (workbasketAccessItem.isPermDistribute()) {
permissions.add(WorkbasketAuthorization.DISTRIBUTE);
}
if (workbasketAccessItem.isPermCustom1()) {
permissions.add(WorkbasketAuthorization.CUSTOM_1);
}
if (workbasketAccessItem.isPermCustom2()) {
permissions.add(WorkbasketAuthorization.CUSTOM_2);
}
if (workbasketAccessItem.isPermCustom3()) {
permissions.add(WorkbasketAuthorization.CUSTOM_3);
}
if (workbasketAccessItem.isPermCustom4()) {
permissions.add(WorkbasketAuthorization.CUSTOM_4);
}
if (workbasketAccessItem.isPermCustom5()) {
permissions.add(WorkbasketAuthorization.CUSTOM_5);
}
if (workbasketAccessItem.isPermCustom6()) {
permissions.add(WorkbasketAuthorization.CUSTOM_6);
}
if (workbasketAccessItem.isPermCustom7()) {
permissions.add(WorkbasketAuthorization.CUSTOM_7);
}
if (workbasketAccessItem.isPermCustom8()) {
permissions.add(WorkbasketAuthorization.CUSTOM_8);
}
}
@Override
public Workbasket newWorkbasket() {
return new WorkbasketImpl();

View File

@ -110,6 +110,28 @@ public interface WorkbasketAccessMapper {
@Delete("DELETE FROM WORKBASKET_ACCESS_LIST where id = #{id}")
void delete(@Param("id") String id);
@Select("<script>SELECT MAX(PERM_READ) AS P_READ, MAX(PERM_OPEN) AS P_OPEN, MAX(PERM_APPEND) AS P_APPEND, MAX(PERM_TRANSFER) AS P_TRANSFER, MAX(PERM_DISTRIBUTE) AS P_DISTRIBUTE, MAX(PERM_CUSTOM_1) AS P_CUSTOM_1, MAX(PERM_CUSTOM_2) AS P_CUSTOM_2, MAX(PERM_CUSTOM_3) AS P_CUSTOM_3, MAX(PERM_CUSTOM_4) AS P_CUSTOM_4, MAX(PERM_CUSTOM_5) AS P_CUSTOM_5, MAX(PERM_CUSTOM_6) AS P_CUSTOM_6, MAX(PERM_CUSTOM_7) AS P_CUSTOM_7, MAX(PERM_CUSTOM_8) AS P_CUSTOM_8 "
+ "FROM WORKBASKET_ACCESS_LIST "
+ "WHERE WORKBASKET_KEY = #{workbasketKey} "
+ "AND ACCESS_ID IN(<foreach item='item' collection='accessIds' separator=',' >#{item}</foreach>)"
+ "</script>")
@Results(value = {
@Result(property = "permRead", column = "P_READ"),
@Result(property = "permOpen", column = "P_OPEN"),
@Result(property = "permAppend", column = "P_APPEND"),
@Result(property = "permTransfer", column = "P_TRANSFER"),
@Result(property = "permDistribute", column = "P_DISTRIBUTE"),
@Result(property = "permCustom1", column = "P_CUSTOM_1"),
@Result(property = "permCustom2", column = "P_CUSTOM_2"),
@Result(property = "permCustom3", column = "P_CUSTOM_3"),
@Result(property = "permCustom4", column = "P_CUSTOM_4"),
@Result(property = "permCustom5", column = "P_CUSTOM_5"),
@Result(property = "permCustom6", column = "P_CUSTOM_6"),
@Result(property = "permCustom7", column = "P_CUSTOM_7"),
@Result(property = "permCustom8", column = "P_CUSTOM_8") })
WorkbasketAccessItem findByWorkbasketAndAccessId(
@Param("workbasketKey") String workbasketKey, @Param("accessIds") List<String> accessIds);
@Select("<script>SELECT ID, WORKBASKET_KEY, ACCESS_ID, PERM_READ, PERM_OPEN, PERM_APPEND, PERM_TRANSFER, PERM_DISTRIBUTE, PERM_CUSTOM_1, PERM_CUSTOM_2, PERM_CUSTOM_3, PERM_CUSTOM_4, PERM_CUSTOM_5, PERM_CUSTOM_6, PERM_CUSTOM_7, PERM_CUSTOM_8 "
+ "FROM WORKBASKET_ACCESS_LIST "
+ "WHERE WORKBASKET_KEY = #{workbasketKey} "
@ -144,7 +166,7 @@ public interface WorkbasketAccessMapper {
@Result(property = "permCustom6", column = "PERM_CUSTOM_6"),
@Result(property = "permCustom7", column = "PERM_CUSTOM_7"),
@Result(property = "permCustom8", column = "PERM_CUSTOM_8") })
List<WorkbasketAccessItem> findByWorkbasketAndAccessIdAndAuthorizations(
List<WorkbasketAccessItem> findByWorkbasketAndAccessIdAndAuthorization(
@Param("workbasketKey") String workbasketKey, @Param("accessIds") List<String> accessIds,
@Param("authorization") String authorization);
}

View File

@ -1,6 +1,7 @@
package acceptance.workbasket;
import java.sql.SQLException;
import java.util.List;
import org.h2.store.fs.FileUtils;
import org.junit.AfterClass;
@ -15,6 +16,7 @@ import pro.taskana.exceptions.InvalidArgumentException;
import pro.taskana.exceptions.InvalidWorkbasketException;
import pro.taskana.exceptions.NotAuthorizedException;
import pro.taskana.exceptions.WorkbasketNotFoundException;
import pro.taskana.model.WorkbasketAuthorization;
import pro.taskana.model.WorkbasketType;
import pro.taskana.security.JAASRunner;
import pro.taskana.security.WithAccessId;
@ -31,19 +33,37 @@ public class GetWorkbasketAccTest extends AbstractAccTest {
@WithAccessId(
userName = "user_1_1",
groupNames = { "teamlead_1" })
groupNames = {"group_1"})
@Test
public void testGetWorkbasket()
throws SQLException, NotAuthorizedException, InvalidArgumentException, WorkbasketNotFoundException,
InvalidWorkbasketException {
WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
Workbasket workbasket = workbasketService.getWorkbasket("WBI:100000000000000000000000000000000001");
Workbasket workbasket = workbasketService.getWorkbasket("WBI:100000000000000000000000000000000007");
Assert.assertEquals("DOMAIN_A", workbasket.getDomain());
Assert.assertEquals("Gruppenpostkorb KSC", workbasket.getDescription());
Assert.assertEquals("Gruppenpostkorb KSC", workbasket.getName());
Assert.assertEquals("GPK_KSC", workbasket.getKey());
Assert.assertEquals(WorkbasketType.GROUP, workbasket.getType());
Assert.assertEquals("PPK User 2 KSC 1", workbasket.getDescription());
Assert.assertEquals("PPK User 2 KSC 1", workbasket.getName());
Assert.assertEquals("USER_1_2", workbasket.getKey());
Assert.assertEquals(WorkbasketType.PERSONAL, workbasket.getType());
Assert.assertEquals("Peter Maier", workbasket.getOwner());
Assert.assertEquals("Versicherung", workbasket.getOrgLevel1());
}
@WithAccessId(
userName = "user_1_1",
groupNames = {"group_1"})
@Test
public void testGetWorkbasketPermissions() {
WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
List<WorkbasketAuthorization> permissions = workbasketService.getPermissionsForWorkbasket("USER_1_2");
Assert.assertEquals(4, permissions.size());
Assert.assertTrue(permissions.contains(WorkbasketAuthorization.READ));
Assert.assertTrue(permissions.contains(WorkbasketAuthorization.OPEN));
Assert.assertTrue(permissions.contains(WorkbasketAuthorization.TRANSFER));
Assert.assertTrue(permissions.contains(WorkbasketAuthorization.APPEND));
}
@Test(expected = WorkbasketNotFoundException.class)

View File

@ -10,7 +10,7 @@ INSERT INTO WORKBASKET VALUES ('WBI:100000000000000000000000000000000003', 'GPK_
INSERT INTO WORKBASKET VALUES ('WBI:100000000000000000000000000000000004', 'TEAMLEAD_1', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'PPK Teamlead KSC 1', 'DOMAIN_A', 'PERSONAL', 'PPK Teamlead KSC 1', '', '', '', '', '', '', '', '', '');
INSERT INTO WORKBASKET VALUES ('WBI:100000000000000000000000000000000005', 'TEAMLEAD_2', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'PPK Teamlead KSC 2', 'DOMAIN_A', 'PERSONAL', 'PPK Teamlead KSC 2', '', '', '', '', '', '', '', '', '');
INSERT INTO WORKBASKET VALUES ('WBI:100000000000000000000000000000000006', 'USER_1_1', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'PPK User 1 KSC 1', 'DOMAIN_A', 'PERSONAL', 'PPK User 1 KSC 1', '', '', '', '', '', '', '', '', '');
INSERT INTO WORKBASKET VALUES ('WBI:100000000000000000000000000000000007', 'USER_1_2', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'PPK User 2 KSC 1', 'DOMAIN_A', 'PERSONAL', 'PPK User 2 KSC 1', '', '', '', '', '', '', '', '', '');
INSERT INTO WORKBASKET VALUES ('WBI:100000000000000000000000000000000007', 'USER_1_2', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'PPK User 2 KSC 1', 'DOMAIN_A', 'PERSONAL', 'PPK User 2 KSC 1', 'Peter Maier', '', '', '', '', 'Versicherung', '', '', '');
INSERT INTO WORKBASKET VALUES ('WBI:100000000000000000000000000000000008', 'USER_2_1', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'PPK User 1 KSC 2', 'DOMAIN_A', 'PERSONAL', 'PPK User 1 KSC 2', '', '', '', '', '', '', '', '', '');
INSERT INTO WORKBASKET VALUES ('WBI:100000000000000000000000000000000009', 'USER_2_2', CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'PPK User 2 KSC 2', 'DOMAIN_A', 'PERSONAL', 'PPK User 2 KSC 2', '', '', '', '', '', '', '', '', '');