EN · DE · RU · FR · ES

#426: ProjektRight.java

projectforge-business/src/main/java/org/projectforge/business/fibu/ProjektRight.java Type : Java · Rôle : Comptabilité financière · Source : projectforge-business/src/main/java/org/projectforge/business/fibu/ProjektRight.java 125 lignes · 76 code · 40 commentaires · 9 vides
Vérificateur des droits d'accès pour les opérations sur les projets. Implémente les vérifications des ID de droits utilisateur PF et détermine les permissions CRUD par module.

Structure du code

Package : org.projectforge.business.fibu

Classes : ProjektRight

Étend : UserRightAccessCheck

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

Champs (1) : serialVersionUID

Importations : 5 packages

Code source (abrégé)

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

Historique Git

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