EN · DE · RU · FR · ES

#657: AccessException.java

projectforge-business/src/main/java/org/projectforge/framework/access/AccessException.java Тип: Java · Роль: Компонент · Исходник: projectforge-business/src/main/java/org/projectforge/framework/access/AccessException.java 246 строк · 160 кода · 52 комментария · 34 пустых
Файл исходного кода projectforge-business/src/main/java/org/projectforge/framework/access/AccessException.java, содержащий Java-код для слоя компонентов.

Структура кода

Пакет: org.projectforge.framework.access

Классы: AccessException

Расширяет: UserException

Методы (11): getUser, getTaskId, getAccessType, setAccessType, getTaskNode, setClazz, getOperationType, setOperationType, setMessage, setUser, toString

Поля (7): serialVersionUID, taskTree, user, taskId, accessType, message, operationType

Импорты: 10 пакетов

Исходный код (сокращённый)

package org.projectforge.framework.access;

import org.apache.commons.lang3.builder.ToStringBuilder;
import org.projectforge.business.task.TaskDO;
import org.projectforge.business.task.TaskNode;
import org.projectforge.business.task.TaskTree;
import org.projectforge.common.i18n.MessageParam;
import org.projectforge.common.i18n.MessageParamType;
import org.projectforge.common.i18n.UserException;
import org.projectforge.framework.persistence.user.api.ThreadLocalUserContext;
import org.projectforge.framework.persistence.user.entities.PFUserDO;

import java.util.ResourceBundle;

/**
 * Этот класс будет выброшен AccessChecker, если у пользователя нет доступа к запрашиваемому действию.
 *
 * @author Kai Reinhard (k.reinhard@micromata.de)
 */
public class AccessException extends UserException {
  private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(AccessException.class);

  private static final long serialVersionUID = 147795804616526958L;

  public final static String I18N_KEY_STANDARD = "access.exception.standard";

  public final static String I18N_KEY_STANDARD_WITH_TASK = "access.exception.standardWithTask";

  private TaskTree taskTree;

  protected PFUserDO user = null;

  protected Long taskId = null;

  protected AccessType accessType = null;

  protected String message = null;

  protected OperationType operationType = null;

  protected Class<?> clazz = null;

  public AccessException(final String i18nKey, final Object... params) {
    this(ThreadLocalUserContext.getLoggedInUser(), i18nKey, params);
  }

  public AccessException(final PFUserDO user, final String i18nKey, final Object... params) {
    super(i18nKey, params);
    this.user = user;
    log.info("AccessException: " + this);
  }

  public AccessException(final AccessType accessType, final OperationType operationType) {
    this(ThreadLocalUserContext.getLoggedInUser(), accessType, operationType);
  }

  public AccessException(final PFUserDO user, final AccessType accessType,
                         final OperationType operationType) {
    super(I18N_KEY_STANDARD, new MessageParam[]{new MessageParam(accessType), new MessageParam(operationType)});
    this.user = user;
    this.accessType = accessType;
    this.operationType = operationType;
    log.info("AccessException: " + this);
  }

  public AccessException(final Long taskId, final AccessType accessType,
                         final OperationType operationType) {
    this(ThreadLocalUserContext.getLoggedInUser(), taskId, accessType, operationType);
  }

  public AccessException(final PFUserDO user, final Long taskId, final AccessType accessType,
                         final OperationType operationType) {
    super(I18N_KEY_STANDARD_WITH_TASK,
        new MessageParam[]{new MessageParam(taskId), new MessageParam(accessType),
            new MessageParam(operationType)});
    this.user = user;
    this.taskId = taskId;
    this.accessType = accessType;
    this.operationType = operationType;
    log.info("AccessException: " + this);
  }

  /**
   * Порядок аргументов: идентификатор задачи, accessType и operationType.
   *
   * @return аргументы для форматирования сообщения типа Object[3].
   */
  public Object[] getMessageArgs(final ResourceBundle bundle) {
    final Object[] result = new Object[3];
    if (taskTree != null && this.taskId != null) {
      final TaskDO task = TaskTree.getInstance().getTaskById(taskId);
      if (task != null) {
        result[0] = task.getTitle();
      } else {
        result[0] = taskId;
      }
    } else {
      result[0] = taskId;
    }
    if (accessType != null) {
      result[1] = bundle.getString(accessType.getI18nKey());
    }
    if (operationType != null) {
      result[2] = bundle.getString(operationType.getI18nKey());
    }
    return result;
  }

  public MessageParam[] getMessageArgs() {
    final MessageParam[] result = new MessageParam[3];
    if (taskTree != null && this.taskId != null) {
      final TaskDO task = TaskTree.getInstance().getTaskById(taskId);
      if (task != null) {
        result[0] = new MessageParam(task.getTitle());
      } else {
        result[0] = new MessageParam(taskId);
      }
    } else {
      result[0] = new MessageParam(taskId);
// ... (сокращено, всего 224 строки)

История Git

868d6abb7 2025 -> 2026
63081666f Заголовки файлов исходного кода: 2024 -> 2025.
67805f2fc ThreadLocalUserContext.user -> ThreadLocalUserContext.loggedInUser (переименовано для избежания недопонимания в коде).
4c04cfd65 КРУПНОЕ ИЗМЕНЕНИЕ! Миграция целочисленных id на Long id (включая внешние ключи и т.д.)
b6092df09 Авторские права 2023 -> 2024