EN · DE · RU · FR · ES

#426: ProjektRight.java

projectforge-business/src/main/java/org/projectforge/business/fibu/ProjektRight.java Tipo: Java · Rol: Contabilidad Financiera · Fuente: projectforge-business/src/main/java/org/projectforge/business/fibu/ProjektRight.java 125 líneas · 76 código · 40 comentarios · 9 en blanco
Verificador de derechos de acceso para operaciones de Projekt. Implementa comprobaciones de ID de derecho de usuario de PF y determina permisos CRUD por módulo.

Estructura del código

Paquete: org.projectforge.business.fibu

Clases: ProjektRight

Extiende: UserRightAccessCheck

Métodos (4): hasSelectAccess, hasSelectAccess, hasAccess, hasHistoryAccess

Campos (1): serialVersionUID

Importaciones: 5 paquetes

Código fuente (resumido)

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);
  }
}

Historial de Git

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...