Liferay:根据权限指定登录后的首页

在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的做法修改。


 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值