@Test
public void checkPartlyReadwriteAccess()
{
logon(TEST_ADMIN_USER);
final PFUserDO user = initTestDB.addUser("AuftragDaoCheckPartlyReadWriteAccess");
final GroupDO financeGroup = getGroup(FINANCE_GROUP);
financeGroup.getSafeAssignedUsers().add(user);
groupDao.update(financeGroup);
final GroupDO projectAssistants = getGroup(PROJECT_ASSISTANT);
projectAssistants.getSafeAssignedUsers().add(user);
groupDao.update(projectAssistants);
final GroupDO group = initTestDB.addGroup("AuftragDaoTest.checkPartlyReadwriteAccess");
logon(TEST_FINANCE_USER);
ProjektDO projekt = new ProjektDO();
projekt.setName("ACME - Webportal checkPartlyReadwriteAccess");
projekt.setProjektManagerGroup(group);
Serializable id = projektDao.save(projekt);
projekt = projektDao.getById(id);
AuftragDO auftrag = new AuftragDO();
auftrag.setNummer(auftragDao.getNextNumber(auftrag));
auftrag.setProjekt(projekt);
auftrag.addPosition(new AuftragsPositionDO());
id = auftragDao.save(auftrag);
dbNumber++; // Needed for getNextNumber test;
auftrag = auftragDao.getById(id);
logon(user);
try {
auftrag = auftragDao.getById(id);
fail("Access exception expected.");
} catch (final AccessException ex) {
assertEquals("access.exception.userHasNotRight", ex.getI18nKey());
}
logon(TEST_ADMIN_USER);
user.addRight(new UserRightDO(UserRightId.PM_ORDER_BOOK, UserRightValue.PARTLYREADWRITE)); //
userDao.update(user);
logon(user);
try {
auftrag = auftragDao.getById(id);
fail("Access exception expected.");
} catch (final AccessException ex) {
assertEquals("access.exception.userHasNotRight", ex.getI18nKey());
}
logon(TEST_ADMIN_USER);
final UserRightDO right = user.getRight(UserRightId.PM_ORDER_BOOK);
right.setValue(UserRightValue.READWRITE); // Full access
userRightDao.update(right);
logon(user);
auftrag = auftragDao.getById(id);
logon(TEST_ADMIN_USER);
right.setValue(UserRightValue.PARTLYREADWRITE);
userRightDao.update(right);
group.getAssignedUsers().add(user);
groupDao.update(group); // User is now in project manager group.
logon(user);
auftrag = auftragDao.getById(id);
}