Как установить множественную логику, используя пружинные теги безопасности и JSTL - PullRequest
0 голосов
/ 09 января 2019

На мой взгляд, есть значок настроек боковой панели, и я предъявляю к этому требования. Пользователь может иметь либо разрешение «ROLE_MANAGE_SYSTEM_USER», либо «ROLE_MANAGE_USER_ROLE», либо и то и другое.

  1. Если у пользователя есть какое-либо из прав 'ROLE_MANAGE_SYSTEM_USER' или 'ROLE_MANAGE_USER_ROLE', должен отобразиться значок настроек.

  2. Если у пользователя есть оба разрешения, он должен быть направлен на отображение URL ('/ setting / systemUser / load')

  3. Если у пользователя есть только разрешение «ROLE_MANAGE_SYSTEM_USER», он должен быть направлен на сопоставление URL («/ setting / systemUser / load»)

  4. Если у пользователя есть только разрешение «ROLE_MANAGE_USER_ROLE», он должен быть перенаправлен на отображение URL («/ setting / systemRole / load»)

Для реализации этого я структурировал свой код следующим образом:

    <sec:authorize access="hasAnyRole('ROLE_MANAGE_SYSTEM_USER', 'ROLE_MANAGE_USER_ROLE')" var="anyrole">

            <c:choose>
                <c:when test="${anyrole}">
                    <a href="<c:url value="/setting/systemUser/load"/>">
                        <p><i class="icon ion-settings"></i></p>Settings
                    </a>
                </c:when>
                <c:otherwise>
                    <a href="<c:url value="/setting/systemRole/load"/>">
                        <p><i class="icon ion-settings"></i></p>Settings
                    </a>
                </c:otherwise>
            </c:choose>
      </sec:authorize>

Мне трудно реализовать эту логику с существующими знаниями библиотеки тегов безопасности JSTL и Spring. Любая поддержка будет оценена.

1 Ответ

0 голосов
/ 10 января 2019

Это требование может быть выполнено путем извлечения двух переменных из каждого оператора, который проверяет каждое разрешение. Смотрите ниже код:

     <li class="${param.activeTab eq 'settings' ? 'active' : ''}">
       <sec:authorize access="hasRole('ROLE_MANAGE_SYSTEM_USER')" var="isUser"/>
        <sec:authorize access="hasRole('ROLE_MANAGE_USER_ROLE')" var="isRole"/>
        <c:choose>
            <c:when test="${isUser}">
                <a href="<c:url value="/setting/systemUser/load"/>">
                    <p><i class="icon ion-settings"></i></p>Settings
                </a>
            </c:when>
            <c:when test="${isRole}">
                <a href="<c:url value="/setting/systemRole/load"/>">
                    <p><i class="icon ion-settings"></i></p>Settings
                </a>
            </c:when>
           <c:otherwise>
          </c:otherwise>
        </c:choose>
    </li>
...