在Portal系统开发中,很多时候根据所属部门的不同,默认的首页也不同。根据权限指定首页是一个不错的办法。
1. 在配置文件里面设置role和相应首页的信息。
比如:用逗号分隔,从左到右的权限的强度由强到弱。
login.role.list=ROLE_A,ROLE_B,ROLE_C
login.toppage.list=/web/1000/PAGEA,/web/1000/PAGEB,/web/1000/PAGEC
2. 修改login的action和密码修改的action
2-1. login的action:com.liferay.portlet.login.action.LoginAction的login方法。
String redirect = ParamUtil.getString(actionRequest, "redirect");
if (Validator.isNotNull(redirect)) {
// login前已经有指定页面的时候
redirect = PortalUtil.escapeRedirect(redirect);
actionResponse.sendRedirect(redirect);
}
else {
// login前没有指定页面。需要根据权限指定默认页面的时候
long companyId = themeDisplay.getCompanyId();
String path = PrefsPropsUtil.getString(companyId, PropsKeys.DEFAULT_LANDING_PAGE_PATH);
try {
long userId = 0;
HttpSession session = request.getSession();
String userStringId = (String) session.getAttribute("j_username");
userId = new Long(userStringId);
// 根据login用户的userId取得权限。
List<Role> lstRoles = RoleLocalServiceUtil.getUserRoles(userId);
String strLoginRoleNames = PrefsPropsUtil.getString(companyId, "login.role.list"); //取得登录权限list
String[] arrLoginRoleNames = null;
if (strLoginRoleNames != null && !"".equals(strLoginRoleNames)) {
arrLoginRoleNames = strLoginRoleNames.split(",");
}
String strLoginTopPages = PrefsPropsUtil.getString(companyId, "login.toppage.list"); //取得登录权限的首页list
String[] arrLoginTopPages = null;
if (strLoginTopPages != null && !"".equals(strLoginTopPages)) {
arrLoginTopPages = strLoginTopPages.split(",");
}
ArrayList<String> tempList = new ArrayList<String>();
for (int i = 0; i < lstRoles.size(); i ++) {
Role role = lstRoles.get(i);
tempList.add(role.getName());
}
//根据当前用户拥有的最强权限,指定相应的首页
if (arrLoginRoleNames != null && arrLoginRoleNames.length > 0) {
for (int k = 0; k < arrLoginRoleNames.length; k ++) {
if (tempList.contains(arrLoginRoleNames[k])) {
path = strLoginTopPages[k];
break;
}
}
}
} catch (Exception ex) {
//log
}
// TOP PAGE的URL
String topURL = themeDisplay.getPortalURL() + themeDisplay.getPathContext() + path;
// 设置重定向
response.sendRedirect(topURL);
}
2-2. 密码修改的action:com.liferay.portal.action.UpdatePasswordAction的execute方法。
由于找回密码后liferay的默认页面还是login Portlet。如果密码修改的后想显示的页面也是根据权限来指定的话,可以参考2-1的做法修改。