У меня есть правило навигации в конфигурации лиц, которое имеет условие для случая навигации и пытается запретить доступ к странице пользователям, которые не принадлежат к нужным группам.
Предполагается, что страница доступна через меню из любого места приложения, если пользователь имеет правильную группу / роль, и это делается с помощью метода, приведенного ниже, для отображения или не отображения компонентов меню, командных кнопок.и т. д.
То, что я пытаюсь предотвратить, - это случай, когда пользователь может знать полный URL / путь к странице и ввести в браузер, чтобы попытаться получить доступ к странице.
Не можете ли вы использовать параметризованные методы в условном выражении?
Faces-Config entry
<navigation-rule>
<from-view-id>*</from-view-id>
<navigation-case>
<from-outcome>doc_ordering_manage</from-outcome>
<if>#{user_Info.userInGroup('APP_DEV_ADMIN','APP_QA_ADMIN','APP_DIST_EDITOR')}</if>
<to-view-id>/content/pages/docOrderingManagement.xhtml</to-view-id>
</navigation-case>
</navigation-rule>
Я попробовал следующее для from-view-id с тем жерезультат.
<from-view-id>/*.xhtml</from-view-id>
<from-view-id>*.xhtml</from-view-id>
<from-view-id>*</from-view-id>
Вызываемый метод компонента.
public boolean userInGroup(String... groupNames){
boolean retValue = false;
for(String s : groupNames){
for(String s2 : this.userGroups){
if(s.equals(s2)){
retValue = true;
}
}
}
Tools.debugMessages("userInGroup returning: " + retValue);
return retValue;
}
Когда тестер, не имеющий ни одной из необходимых групп, пытается получить доступ к странице, введя URL-адрес в полев браузере они могут получить доступ к странице, и отладочное сообщение внутри метода показывает, что возвращаемое значение равно false, когда метод вызывается в случае навигации.