ProjektRight.javaPackage : org.projectforge.business.fibu
Classes : ProjektRight
Étend : UserRightAccessCheck
Méthodes (4) : hasSelectAccess, hasSelectAccess, hasAccess, hasHistoryAccess
Champs (1) : serialVersionUID
Importations : 5 packages
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)
// Tous les chefs de projet ont un accès en lecture seule :
.setAvailableGroupRightValues(ProjectForgeGroup.PROJECT_MANAGER, UserRightValue.READONLY)
// Tous les assistants projet n'ont pas d'accès, ont un accès en lecture ou en lecture seule :
.setAvailableGroupRightValues(ProjectForgeGroup.PROJECT_ASSISTANT, UserRightValue.READONLY)
// Accès en lecture seule pour les utilisateurs du contrôle de gestion :
.setReadOnlyForControlling();
}
/**
* @return Vrai, si {@link UserRightId#PM_PROJECT} est potentiellement disponible pour l'utilisateur (indépendamment de la
* valeur configurée).
* @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()) {
// Un chef de projet ne voit pas les projets inactifs ou supprimés.
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);
}
/**
* Accès à l'historique autorisé uniquement pour les utilisateurs ayant un accès en lecture et/ou écriture.
*
* @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 En-têtes des fichiers sources : 2024 -> 2025. 67805f2fc ThreadLocalUserContext.user -> ThreadLocalUserContext.loggedInUser (renommé pour éviter les malentendus dans le code). 4c04cfd65 CHANGEMENT-MAJEUR ! Migration des identifiants entiers vers des identifiants Long (y compris les clés étrangères, etc.) 4efcbd0fb Travaux de migration en cours...