0

我正在使用与 tomcat 7.0.27 和 hsql 捆绑在一起的 liferay 6.1.1 CE GA2。

我在 ExpandoValue 上创建了一个挂钩,我想在更新他的自定义字段时为用户分配一个角色。这是我尝试过的:

public class UserTagValueListener implements ModelListener<ExpandoValue>{
    @Override
    public void onAfterUpdate(ExpandoValue arg0) throws ModelListenerException {       
        long userId = arg0.getClassPK();
        long roleId = (long)1; //could be any role

        try {
            System.out.println("user roles : " + UserUtil.getRoles(userId));

            /* I tried these 4 lines with the same result */
            //UserLocalServiceUtil.addRoleUsers(roleId, new long[]{userId});
            //RoleLocalServiceUtil.addUserRoles(userId, new long[]{roleId});
            //UserUtil.addRole(userId, roleId);
            RoleUtil.addUser(roleId, userId);
        } catch (PortalException e) {
            e.printStackTrace();
        } catch (SystemException e) {
            e.printStackTrace();
        }
        System.out.println("user roles : " + UserUtil.getRoles(userId));
    }
}

当我在添加 UserRole 的行之前和之后检查角色时,它显示该角色已添加到我当前的用户中。但是一旦执行完成,用户就不再具有角色了。

我究竟做错了什么?

4

2 回答 2

1

这对我有用。类型是我从创建 account.jsp 页面中的选择框角色中获得的值

 String[] usery = (String[])user.getExpandoBridge().getAttribute("Type"); 

 Role role = RoleLocalServiceUtil.getRole(company.getCompanyId(), usery[0]);

 UserLocalServiceUtil.addRoleUser(role.getRoleId(), user.getUserId());

 UserLocalServiceUtil.updateUser(user);
于 2014-04-17T09:11:39.500 回答
0

这对我有用:

try {

    User newUser = .....
    long roleId = ....      

    Role role = RoleLocalServiceUtil.getRole(roleId);

    System.out.println("Found role : " + role.getRoleId());
    RoleUtil.addUser(role.getRoleId(), newUser.getUserId());
    UserLocalServiceUtil.updateUser(newUser);
    RoleLocalServiceUtil.updateRole(role);

} catch (Exception e) {
    e.printStackTrace();
}
于 2013-09-11T07:54:54.337 回答