ProjektRight.javaПакет: org.projectforge.business.fibu
Классы: ProjektRight
Расширяет: UserRightAccessCheck
Методы (4): hasSelectAccess, hasSelectAccess, hasAccess, hasHistoryAccess
Поля (1): serialVersionUID
Импорты: 5 пакетов
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)
// Все менеджеры проектов имеют доступ только для чтения:
.setAvailableGroupRightValues(ProjectForgeGroup.PROJECT_MANAGER, UserRightValue.READONLY)
// Все ассистенты проектов не имеют доступа, имеют доступ на чтение или только для чтения:
.setAvailableGroupRightValues(ProjectForgeGroup.PROJECT_ASSISTANT, UserRightValue.READONLY)
// Доступ только для чтения для пользователей контроллинга:
.setReadOnlyForControlling();
}
/**
* @return True, если {@link UserRightId#PM_PROJECT} потенциально доступен для пользователя (независимо от
* настроенного значения).
* @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()) {
// Руководитель проекта не видит неактивные или удалённые проекты.
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);
}
/**
* Доступ к истории разрешён только пользователям с правом чтения и/или записи.
*
* @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 Заголовки исходных файлов: 2024 -> 2025. 67805f2fc ThreadLocalUserContext.user -> ThreadLocalUserContext.loggedInUser (переименовано для избежания недопонимания в коде). 4c04cfd65 КРУПНОЕ ИЗМЕНЕНИЕ! Миграция целочисленных id на Long id (включая внешние ключи и т.д.) 4efcbd0fb Работа по миграции в процессе...