EN · DE · RU · FR · ES

#459 : GanttChartRight.java

projectforge-business/src/main/java/org/projectforge/business/gantt/GanttChartRight.java Type : Java · Rôle : Diagramme de Gantt · Source : projectforge-business/src/main/java/org/projectforge/business/gantt/GanttChartRight.java 143 lignes · 77 code · 55 commentaires · 11 vides
Vérificateur des droits d'accès pour les opérations du diagramme de Gantt. Implémente les vérifications des identifiants de droits utilisateur PF et détermine les permissions CRUD par module.

Structure du code

Paquetage : org.projectforge.business.gantt

Classes : GanttChartRight

Étend : UserRightAccessCheck

Méthodes (5) : hasSelectAccess, hasSelectAccess, hasAccess, hasInsertAccess, hasAccess

Champs (1) : serialVersionUID

Importations : 8 paquetages

Code source (abrégé)

package org.projectforge.business.gantt;

import org.projectforge.business.fibu.ProjektDO;
import org.projectforge.business.task.TaskTree;
import org.projectforge.business.user.*;
import org.projectforge.framework.access.AccessChecker;
import org.projectforge.framework.access.AccessType;
import org.projectforge.framework.access.OperationType;
import org.projectforge.framework.persistence.user.entities.PFUserDO;
import org.projectforge.web.WicketSupport;

/**
 *
 * @author Kai Reinhard (k.reinhard@me.de)
 *
 */
public class GanttChartRight extends UserRightAccessCheck<GanttChartDO>
{
  private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(GanttChartRight.class);

  private static final long serialVersionUID = -1711148447929915434L;

  public GanttChartRight()
  {
    super(UserRightId.PM_GANTT, UserRightCategory.PM);
  }

  /**
   * @return true.
   * @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 true;
  }

  /**
   * Si l'utilisateur est propriétaire du GanttChartDO, il a accès ; sinon, il a besoin au moins d'un accès en sélection à la tâche racine.
   * Pour les chefs de projet, l'utilisateur doit en plus faire partie du groupe des chefs de projet (assigné à cette tâche)
   * ou, si aucun groupe de chefs de projet n'est disponible pour cette tâche, l'utilisateur doit être membre de
   * {@link ProjectForgeGroup#PROJECT_MANAGER}.
   *
   * @see org.projectforge.business.user.UserRightAccessCheck#hasSelectAccess(java.lang.Object)
   */
  @Override
  public boolean hasSelectAccess(final PFUserDO user, final GanttChartDO obj)
  {
    if (obj == null) {
      return false;
    }
    return hasAccess(user, obj, obj.getReadAccess());
  }

  /**
   * Si l'utilisateur est propriétaire du GanttChartDO, il a accès ; sinon, il a besoin au moins d'un accès en sélection à la tâche racine.
   * Pour les chefs de projet, l'utilisateur doit en plus faire partie du groupe des chefs de projet (assigné à cette tâche)
   * ou, si aucun groupe de chefs de projet n'est disponible pour cette tâche, l'utilisateur doit être membre de
   * {@link ProjectForgeGroup#PROJECT_MANAGER}.
   *
   * @see org.projectforge.business.user.UserRightAccessCheck#hasSelectAccess(java.lang.Object)
   */
  @Override
  public boolean hasAccess(final PFUserDO user, final GanttChartDO obj, final GanttChartDO oldObj,
      final OperationType operationType)
  {
    if (obj == null) {
      return false;
    }
    final GanttChartDO gc = oldObj != null ? oldObj : obj;
    return hasAccess(user, gc, gc.getWriteAccess());
  }

  @Override
  public boolean hasInsertAccess(final PFUserDO user)
  {
    return true;
  }

  private boolean hasAccess(final PFUserDO user, final GanttChartDO obj, final GanttAccess access)
  {
    var accessChecker = WicketSupport.getAccessChecker();
    if (accessChecker.userEqualsToContextUser(obj.getOwner())) {
      // Le propriétaire a toujours accès :
      return true;
    }
    if (access == null || access == GanttAccess.OWNER) {
      // Aucun accès défini, donc seul le propriétaire a accès :
      return false;
    }
    if (access.isIn(GanttAccess.ALL, GanttAccess.PROJECT_MANAGER)) {
      if (obj.getTask() == null) {
        // Tâche nécessaire pour ces types de GanttAccess, donc pas d'accès :
        return false;
      }
      if (!accessChecker.hasPermission(user, obj.getTaskId(), AccessType.TASKS, OperationType.SELECT,
          false)) {
        // L'utilisateur n'a pas d'accès à la tâche :
        return false;
      }
      if (access == GanttAccess.ALL) {
        // L'utilisateur a accès à la tâche :
        return true;
      }
      final TaskTree taskTree = TaskTree.getInstance();
      final ProjektDO project = taskTree.getProjekt(obj.getTaskId());
      if (project == null) {
        // Groupe de chefs de projet non trouvé :
        return accessChecker.isUserMemberOfGroup(user, ProjectForgeGroup.PROJECT_MANAGER);
      }
      // Les utilisateurs du groupe des chefs de projet ont accès :
      return UserGroupCache.getInstance().isUserMemberOfGroup(user, project.getProjektManagerGroupId());
    } else {
      log.error("Type GanttAccess non pris en charge : " + access);
    }
    return false;

  }
// ... (tronqué, 121 lignes au total)

Historique Git

868d6abb7 2025 -> 2026
63081666f En-têtes des fichiers source : 2024 -> 2025.
4efcbd0fb Travaux de migration en cours...
b6092df09 Copyright 2023 -> 2024
ab45d51fa Copyright 2001-2022 -> 2001-2023.