Skip to content

Commit

Permalink
Merge pull request #604 from metasfresh/gh603-api
Browse files Browse the repository at this point in the history
Handle incorrect AD_Window_ID in URL #603
  • Loading branch information
metas-ts committed Sep 21, 2017
2 parents 7d50582 + 0358a8b commit cbf3805
Showing 1 changed file with 27 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,11 @@
import org.adempiere.ad.table.api.IADTableDAO;
import org.adempiere.exceptions.AdempiereException;
import org.adempiere.service.IRolePermLoggingBL;
import org.adempiere.service.IRolePermLoggingBL.NoSuchForeignKeyException;
import org.adempiere.util.Services;
import org.slf4j.Logger;

import de.metas.logging.LogManager;
import de.metas.ui.web.window.datatypes.DocumentPath;
import de.metas.ui.web.window.datatypes.DocumentType;
import de.metas.ui.web.window.datatypes.WindowId;
Expand Down Expand Up @@ -42,6 +45,9 @@

public class DocumentPermissionsHelper
{

private static final Logger logger = LogManager.getLogger(DocumentPermissionsHelper.class);

public static ElementPermission checkWindowAccess(@NonNull final DocumentEntityDescriptor entityDescriptor, final IUserRolePermissions permissions)
{
final int adWindowId = entityDescriptor.getWindowId().toInt();
Expand All @@ -57,10 +63,7 @@ public static ElementPermission checkWindowAccess(@NonNull final DocumentEntityD
.setParameter("WindowName", entityDescriptor.getCaption())
.setParameter("AD_Window_ID", adWindowId);

final Boolean readWriteAccess = null; // none
Services.get(IRolePermLoggingBL.class).logWindowAccess(permissions.getAD_Role_ID(), adWindowId, readWriteAccess, ex.getLocalizedMessage());

throw ex;
logAccessIfWindowExistsAndThrowEx(permissions, adWindowId, ex);
}

return windowPermission;
Expand Down Expand Up @@ -93,13 +96,29 @@ public static void assertViewAccess(final WindowId windowId, @Nullable final Str
.setParameter("view", viewId)
.setParameter("windowId", adWindowId);

final Boolean readWriteAccess = null; // none
Services.get(IRolePermLoggingBL.class).logWindowAccess(permissions.getAD_Role_ID(), adWindowId, readWriteAccess, ex.getLocalizedMessage());

throw ex;
logAccessIfWindowExistsAndThrowEx(permissions, adWindowId, ex);
}
}

private static void logAccessIfWindowExistsAndThrowEx(
@NonNull final IUserRolePermissions permissions,
final int adWindowId,
@NonNull final AdempiereException ex)
{
final IRolePermLoggingBL rolePermLoggingBL = Services.get(IRolePermLoggingBL.class);
final Boolean readWriteAccess = null; // none

try
{
rolePermLoggingBL.logWindowAccess(permissions.getAD_Role_ID(), adWindowId, readWriteAccess, ex.getLocalizedMessage());
}
catch (final NoSuchForeignKeyException noSuchForeignKeyException)
{
logger.warn("Caught NoSuchForeignKeyException for AD_Window_ID=" + adWindowId, noSuchForeignKeyException); // log it, but throw the "important" one, i.e. ex
}
throw ex;
}

public static void assertCanView(@NonNull final Document document, @NonNull final IUserRolePermissions permissions)
{
// In case document type is not Window, return OK because we cannot validate
Expand Down

0 comments on commit cbf3805

Please sign in to comment.