У нас есть приложение xpage, которое требует от пользователя входа в систему (используйте идентификатор Lotus Notes и пароль). Если пользователь успешно войдет в систему, он перенаправит пользователя на указанную страницу (например, home.xsp).Если у пользователя несколько ролей, как разрешить пользователю выбрать одну роль для доступа к приложению?
В начале приложение прост, один пользователь имеет одну роль в приложении. Каждая роль будет иметь разные функции и интерфейс в программе. (это также согласовано с пользователями). Пожалуйста, представьте, что приведенная ниже таблица посвящена роли пользователя и пользователя.
Username | Role
Alan | admin
Ben | user
John | leader
Judy | developver
Sam | manager
Susan | senior
Tom | user
В последнее время наши пользователи передумали, они хотят иметь несколько ролей в приложении. Пожалуйста, рассмотрите следующую ситуацию.
В соответствии с приведенной выше таблицей некоторые пользователи имеют больше одной роли в программе. Из-за того, что каждая роль будет иметь разные функции и интерфейс в программе, мы замечаем, что если пользователь имеет несколько ролей, интерфейс будет выглядеть неряшливо, а некоторые функции не будут работать должным образом. Поэтому мы задумываемся о том, чтобы заставить пользователя выбрать одну роль для входа в систему.
На указанной странице (например, home.xsp) эта страница будет отображаться после успешного входа пользователя в систему. Мы пытаемся выяснить, имеет ли пользователь несколько ролей или нет, поэтому мы помещаем следующий код в beforePageLoad Event.
var roles = context.getUser().getRoles()
//if the user has multiple roles, force them to other page
if(roles.length > 1)
{
context.redirectToPage("chooserole.xsp");
}
else
{
//do nothing
}
В chooserole.xsp, страница будет найти ту роль, которую пользователь должен затем попросить пользователя выбрать один, чтобы войти в систему. Таким образом, страница будет выглядеть следующим образом
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core"><xp:label value="Please select user role" id="label1" style="margin-left:200.0px"></xp:label>
<xp:text escape="true" id="computedField2" rendered="false">
<xp:this.value><![CDATA[#{javascript:context.getUser().getRoles()
}]]></xp:this.value>
</xp:text><xp:br></xp:br>
<xp:radioGroup id="radioGroup1" layout="pageDirection" style="margin-left:100.0px" value="#{applicationScope.role}">
<xp:selectItems>
<xp:this.value><![CDATA[#{javascript:getComponent("computedField2").getValue();}]]></xp:this.value>
</xp:selectItems>
</xp:radioGroup>
<xp:br></xp:br>
<xp:button value="Login" id="button1" style="height:35.0px;margin-left:200.0px">
<xp:eventHandler event="onclick" submit="true" refreshMode="complete">
<xp:this.action><![CDATA[#{javascript:var rolevalue = getComponent("radioGroup1").getValue();
applicationScope.put(role,rolevalue);
context.redirectToPage("Home.xsp");}]]></xp:this.action>
</xp:eventHandler></xp:button><xp:button value="Cancel" id="button2" style="height:35.0px;margin-left:30.0px"></xp:button><xp:br></xp:br>
</xp:view>
Когда мы используем несколько учетных записей роли для запуска программы, программа может перенаправить нас на chooserole.xsp, однако, в этой странице, независимо от того, мы выбираем, какую роль, мы просто продолжаем оставаться в chooserole.xsp.
Мы предполагаем, что проблема в части beforePageLoad, потому что в этой части мы проверяем несколько ролей, если у пользователя более одной роли, она перенаправляет пользователя на указанную страницу.
Одна вещь, которую мы не понимаем, находится в chooserole.xsp, мы просим пользователя выбрать одну роль для входа в систему, когда пользователь выбирает одну роль, эта роль должна направить пользователя на home.xsp. Тем не менее, home.xsp кажется «думаю», что у пользователя много роли, поэтому он сохраняет пользователя в chooserole.xsp.
Мы сделали что-то неправильно в кодировании? мы попытались удалить код в beforePageLoad и поместить в afterPageLoad, но программа по-прежнему сохраняет пользователя в chooserole.xsp.
Благодарен за ваш совет. Спасибо.
Ссылки:
https://lostinxpages.com/2014/01/06/finding-user-roles-in-xpages/
Access Control with a multi database application
XPages: context.getUser().getRoles() working sporadically
http://flylib.com/books/en/2.348.1.172/1/
Я бы пошел и пересмотрел подход «нужно выбрать роль». Возможно, вам лучше отменить процесс. Создайте приложение, которое хорошо работает для вымышленного «суперпользователя», который имеет все роли, а затем начинает ограничивать выбор, когда присутствуют меньшие роли. Пользователи не воспринимают себя как «действующие в роли», а как «выполняющие свою работу». Избегайте введения режима, основанного на роли – stwissel