ProjektRight.javaPaket: org.projectforge.business.fibu
Klassen: ProjektRight
Erweitert: UserRightAccessCheck
Methoden (4): hasSelectAccess, hasSelectAccess, hasAccess, hasHistoryAccess
Felder (1): serialVersionUID
Importe: 5 Pakete
package org.projectforge.business.fibu;
import org.projectforge.business.user.*;
import org.projectforge.framework.access.OperationType;
import org.projectforge.framework.persistence.user.api.ThreadLocalUserContext;
import org.projectforge.framework.persistence.user.entities.PFUserDO;
import org.projectforge.web.WicketSupport;
/**
* @author Kai Reinhard (k.reinhard@me.de)
*/
public class ProjektRight extends UserRightAccessCheck<ProjektDO>
{
private static final long serialVersionUID = -3712738266564403670L;
public ProjektRight()
{
super(UserRightId.PM_PROJECT, UserRightCategory.PM,
UserRightServiceImpl.FALSE_READONLY_READWRITE);
initializeUserGroupsRight(UserRightServiceImpl.FALSE_READONLY_READWRITE, UserRightServiceImpl.FIBU_ORGA_PM_GROUPS)
// Alle Projektmanager haben Nur-Lese-Zugriff:
.setAvailableGroupRightValues(ProjectForgeGroup.PROJECT_MANAGER, UserRightValue.READONLY)
// Alle Projektassistenten haben keinen, Lese- oder Nur-Lese-Zugriff:
.setAvailableGroupRightValues(ProjectForgeGroup.PROJECT_ASSISTANT, UserRightValue.READONLY)
// Nur-Lese-Zugriff für Controlling-Benutzer:
.setReadOnlyForControlling();
}
/**
* @return True, wenn {@link UserRightId#PM_PROJECT} für den Benutzer potenziell verfügbar ist (unabhängig vom
* konfigurierten Wert).
* @see org.projectforge.business.user.UserRightAccessCheck#hasSelectAccess(org.projectforge.framework.access.AccessChecker,
* org.projectforge.framework.persistence.user.entities.PFUserDO)
*/
@Override
public boolean hasSelectAccess(final PFUserDO user)
{
return WicketSupport.getAccessChecker().isAvailable(user, UserRightId.PM_PROJECT);
}
@Override
public boolean hasSelectAccess(final PFUserDO user, final ProjektDO obj)
{
if (obj == null) {
return true;
}
var accessChecker = WicketSupport.getAccessChecker();
if (accessChecker.isUserMemberOfGroup(user, ProjectForgeGroup.CONTROLLING_GROUP)) {
return true;
}
if (accessChecker.isUserMemberOfGroup(user, ProjectForgeGroup.PROJECT_MANAGER,
ProjectForgeGroup.PROJECT_ASSISTANT)) {
Long userId = user.getId();
Long headOfBusinessManagerId = obj.getHeadOfBusinessManager() != null ? obj.getHeadOfBusinessManager().getId() : null;
Long projectManagerId = obj.getProjectManager() != null ? obj.getProjectManager().getId() : null;
Long salesManageId = obj.getSalesManager() != null ? obj.getSalesManager().getId() : null;
if (userId != null && (userId.equals(headOfBusinessManagerId) || userId.equals(projectManagerId) || userId.equals(salesManageId))) {
return true;
}
final UserGroupCache userGroupCache = UserGroupCache.getInstance();
if (obj.getProjektManagerGroup() != null
&& userGroupCache.isUserMemberOfGroup(ThreadLocalUserContext.getLoggedInUserId(),
obj.getProjektManagerGroupId())) {
if ((obj.getStatus() == null || !obj.getStatus().isIn(ProjektStatus.ENDED))
&& !obj.getDeleted()) {
// Ein Projektleiter sieht keine nicht aktiven oder gelöschten Projekte.
return true;
}
}
if (accessChecker.isUserMemberOfGroup(user, ProjectForgeGroup.ORGA_TEAM,
ProjectForgeGroup.FINANCE_GROUP)) {
return accessChecker.hasReadAccess(user, getId(), false);
}
return false;
} else {
return accessChecker.hasReadAccess(user, getId(), false);
}
}
@Override
public boolean hasAccess(final PFUserDO user, final ProjektDO obj, final ProjektDO oldObj,
final OperationType operationType)
{
return WicketSupport.getAccessChecker().hasRight(user, getId(), UserRightValue.READWRITE);
}
/**
* Historienzugriff nur für Benutzer mit Lese- und/oder Schreibzugriff erlaubt.
*
* @see org.projectforge.business.user.UserRightAccessCheck#hasHistoryAccess(java.lang.Object)
*/
@Override
public boolean hasHistoryAccess(final PFUserDO user, final ProjektDO obj)
{
var accessChecker = WicketSupport.getAccessChecker();
if (accessChecker.isUserMemberOfGroup(user, ProjectForgeGroup.CONTROLLING_GROUP)) {
return true;
}
return accessChecker.hasRight(user, getId(), UserRightValue.READWRITE);
}
}
868d6abb7 2025 -> 2026 63081666f Quellcode-Dateiköpfe: 2024 -> 2025. 67805f2fc ThreadLocalUserContext.user -> ThreadLocalUserContext.loggedInUser (umbenannt, um Missverständnisse im Code zu vermeiden). 4c04cfd65 GROSSE-ÄNDERUNG! Migration von Integer-IDs zu Long-IDs (einschließlich Fremdschlüsseln usw.) 4efcbd0fb Migration in Arbeit...