From 9a9c021a6121cf2a2325e5df2bfe246aaab23a62 Mon Sep 17 00:00:00 2001 From: Lene Wasskog <lene.wasskog@nibio.no> Date: Tue, 13 May 2025 12:53:45 +0200 Subject: [PATCH] feat: Fix errors related to user role checks --- .../ObservationTimeSeriesController.java | 6 ++++++ .../templates/observationTimeSeriesForm.ftl | 19 +++++++------------ .../templates/observationTimeSeriesList.ftl | 2 +- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/main/java/no/nibio/vips/logic/controller/servlet/ObservationTimeSeriesController.java b/src/main/java/no/nibio/vips/logic/controller/servlet/ObservationTimeSeriesController.java index 12d231bb..bf6f5ef5 100644 --- a/src/main/java/no/nibio/vips/logic/controller/servlet/ObservationTimeSeriesController.java +++ b/src/main/java/no/nibio/vips/logic/controller/servlet/ObservationTimeSeriesController.java @@ -97,6 +97,9 @@ public class ObservationTimeSeriesController extends HttpServlet { .setParameter("observationTimeSeries", observationTimeSeries).getSingleResult(); observationCounts.put(String.valueOf(observationTimeSeries.getObservationTimeSeriesId()), count); } + request.setAttribute("userIsObservationAuthority", + userBean.authorizeUser(user, VipsLogicRole.OBSERVATION_AUTHORITY, + VipsLogicRole.ORGANIZATION_ADMINISTRATOR, VipsLogicRole.SUPERUSER)); request.setAttribute("observationCounts", observationCounts); request.getRequestDispatcher("/observationTimeSeriesList.ftl").forward(request, response); return; @@ -118,6 +121,9 @@ public class ObservationTimeSeriesController extends HttpServlet { request.setAttribute("observationTimeSeries", observationTimeSeries); request.setAttribute("isEditable", observationCount == 0); + request.setAttribute("userIsObservationAuthority", + userBean.authorizeUser(user, VipsLogicRole.OBSERVATION_AUTHORITY, + VipsLogicRole.ORGANIZATION_ADMINISTRATOR, VipsLogicRole.SUPERUSER)); buildFormRequest(request, user, observationTimeSeries); request.setAttribute("observations", observationBean.getObservationsForTimeSeries(observationTimeSeries)); diff --git a/src/main/webapp/templates/observationTimeSeriesForm.ftl b/src/main/webapp/templates/observationTimeSeriesForm.ftl index 9d5794bc..b782178f 100644 --- a/src/main/webapp/templates/observationTimeSeriesForm.ftl +++ b/src/main/webapp/templates/observationTimeSeriesForm.ftl @@ -418,7 +418,7 @@ <input type="hidden" name="locationVisibility" value="${locationVisibilityFormValue}"> <#else> <div class="form-group"> - <label for="cropCategoryId">${i18nBundle.listSelectedCropCategoryOnTop}</label> + <label for="cropCategoryIdList">${i18nBundle.listSelectedCropCategoryOnTop}</label> <select class="form-control" id="cropCategoryIdList" name="cropCategoryId" onchange="filterCrops(this.options[this.options.selectedIndex].value);"> <option value="-1">${i18nBundle.pleaseSelect} ${i18nBundle.cropCategory?lower_case}</option> @@ -426,26 +426,21 @@ </select> </div> <div class="form-group"> - <label for="cropOrganismId">${i18nBundle.cropOrganismId}</label> - <select class="form-control" id="cropOrganismIdList" name="cropOrganismId" - <#if observationTimeSeries.observationTimeSeriesId?has_content && !user.isSuperUser() && !user.isOrganizationAdmin()>readonly="readonly" <#else> onblur="validateField(this);" onchange="updateCropPests();"</#if>> - <#if !observationTimeSeries.observationTimeSeriesId?has_content || user.isSuperUser() || user.isOrganizationAdmin()> + <label for="cropOrganismIdList">${i18nBundle.cropOrganismId}</label> + <select class="form-control" id="cropOrganismIdList" name="cropOrganismId" onblur="validateField(this);" onchange="updateCropPests();"> + <#if !observationTimeSeries.observationTimeSeriesId?has_content> <option value="-1">${i18nBundle.pleaseSelect} ${i18nBundle.cropOrganismId?lower_case}</option> - <option value="-10" - <#if (observationTimeSeries.cropOrganism?has_content && observationTimeSeries.cropOrganism.organismId == -10)>selected="selected"</#if>>${i18nBundle.missingInDatabase}</option> + <option value="-10" <#if (observationTimeSeries.cropOrganism?has_content && observationTimeSeries.cropOrganism.organismId == -10)>selected="selected"</#if>>${i18nBundle.missingInDatabase}</option> </#if> </select> <span class="help-block" id="${formId}_cropOrganismId_validation"></span> </div> <div class="form-group"> <label for="organismId">${i18nBundle.organism}</label> - <select class="form-control" id="organismId" name="organismId" - <#if observationTimeSeries.organism?has_content && ! user.isSuperUser() && ! user.isOrganizationAdmin()>readonly="readonly" - onblur="validateField(this);"</#if>> + <select class="form-control" id="organismId" name="organismId" onblur="validateField(this);"> <#if !observationTimeSeries.organism?has_content> <option value="-1">${i18nBundle.pleaseSelect} ${i18nBundle.organism?lower_case}</option> - <option value="-10" - <#if (observationTimeSeries.organism?has_content && observationTimeSeries.organism.organismId == -10)>selected="selected"</#if>>${i18nBundle.missingInDatabase}</option> + <option value="-10" <#if (observationTimeSeries.organism?has_content && observationTimeSeries.organism.organismId == -10)>selected="selected"</#if>>${i18nBundle.missingInDatabase}</option> <#list allPests as organism> <option value="${organism.organismId}">${organism.getLocalName(currentLocale.language)!""} (${organism.latinName!""}) ${hierarchyCategories.getName(organism.hierarchyCategoryId)?upper_case}</option> </#list> diff --git a/src/main/webapp/templates/observationTimeSeriesList.ftl b/src/main/webapp/templates/observationTimeSeriesList.ftl index 6a496e8a..caaa4e25 100644 --- a/src/main/webapp/templates/observationTimeSeriesList.ftl +++ b/src/main/webapp/templates/observationTimeSeriesList.ftl @@ -42,7 +42,7 @@ <td><#if timeSeries.locationPointOfInterest?has_content>${timeSeries.locationPointOfInterest.name!""}</#if></td> <td><#if timeSeries.user?has_content>${timeSeries.user.firstName!""} ${timeSeries.user.lastName!""}</#if></td> <td>${observationCounts[timeSeries.observationTimeSeriesId?string]}</td> - <td><#if user.isSuperUser() || user.isOrganizationAdmin() || userIsObservationAuthority || observation.userId == user.userId> + <td><#if userIsObservationAuthority || timeSeries.userId == user.userId> <a href="/observationTimeSeries?action=editObservationTimeSeriesForm&observationTimeSeriesId=${timeSeries.observationTimeSeriesId}" class="btn btn-default" role="button">${i18nBundle.edit}</a></#if></td> -- GitLab