ProjektRight.javaPaquete: org.projectforge.business.fibu
Clases: ProjektRight
Extiende: UserRightAccessCheck
Métodos (4): hasSelectAccess, hasSelectAccess, hasAccess, hasHistoryAccess
Campos (1): serialVersionUID
Importaciones: 5 paquetes
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)
// Todos los gestores de proyecto tienen acceso de solo lectura:
.setAvailableGroupRightValues(ProjectForgeGroup.PROJECT_MANAGER, UserRightValue.READONLY)
// Todos los asistentes de proyecto no tienen acceso, o tienen acceso de lectura o solo lectura:
.setAvailableGroupRightValues(ProjectForgeGroup.PROJECT_ASSISTANT, UserRightValue.READONLY)
// Acceso de solo lectura para usuarios de controlling:
.setReadOnlyForControlling();
}
/**
* @return Verdadero, si {@link UserRightId#PM_PROJECT} está potencialmente disponible para el usuario
* (independientemente del valor configurado).
* @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 gestor de proyecto no ve proyectos no activos o eliminados.
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);
}
/**
* Acceso al historial permitido solo para usuarios con acceso de lectura y/o escritura.
*
* @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 Encabezados de archivos fuente: 2024 -> 2025. 67805f2fc ThreadLocalUserContext.user -> ThreadLocalUserContext.loggedInUser (renombrado para evitar malentendidos en el código). 4c04cfd65 CAMBIO MAYOR: Migración de IDs enteros a IDs Long (incluyendo claves foráneas, etc.) 4efcbd0fb Trabajo de migración en progreso...