如何检索用户是使用SOAP服务的成员的所有组/角色?

时间:2013-07-17 15:35:00

标签: soap liferay remote-access

我正在尝试使用SOAP服务收集一些用户信息。

我能够获得给定用户的职位,但我不明白如何检索用户拥有的组和角色列表。

我可以简单地使用GroupServiceSoap.getUserPlaces(long userId, String[] classNames, int max)方法吗?或者是否有其他方法可以获得这些领域?

目前我的代码:

private static URL _getURL(String remoteUser, String password, String serviceName) {
    final String LIFERAY_PROTOCOL = "http://";
    final String LIFERAY_TCP_PORT = "8080";
    final String LIFERAY_FQDN = "localhost";
    final String LIFERAY_AXIS_PATH = "/api/secure/axis/";
    try {
        return new URL(LIFERAY_PROTOCOL + URLEncoder.encode(remoteUser, "UTF-8") + ":"
                        + URLEncoder.encode(password, "UTF-8") + "@" + LIFERAY_FQDN
                        + ":" + LIFERAY_TCP_PORT + LIFERAY_AXIS_PATH + serviceName);
    } catch (MalformedURLException e) {
        return null;
    } catch (UnsupportedEncodingException e) {
        return null;
    } 
}

[...]
public static void main(String[] argv){

    public final String LIFERAY_USER_SERVICE="Portal_UserService";
    public final String LIFERAY_COMPANY_SERVICE="Portal_CompanyService";
    public final String LIFERAY_GROUP_SERVICE = "Portal_GroupService";

    //company.default.web.id property
    public final String LIFERAY_DEFAULT_COMPANY_ID = "liferay.com";

    UserServiceSoap userService = new UserServiceSoapServiceLocator().getPortal_UserService(_getURL(USER_IDENTIFIER,USER_PASSWORD, LIFERAY_USER_SERVICE));

    //This code is usefull if you want to use SOAP setter.
    //((Portal_UserServiceSoapBindingStub) userService).setUsername(USER_IDENTIFIER);
    //((Portal_UserServiceSoapBindingStub) userService).setPassword(USER_PASSWORD);

    CompanyServiceSoap companyService = new CompanyServiceSoapServiceLocator().getPortal_CompanyService(_getURL(USER_IDENTIFIER, USER_PASSWORD, LIFERAY_COMPANY_SERVICE));
    long companyId = companyService.getCompanyByMx(LIFERAY_DEFAULT_COMPANY_ID).getCompanyId();

    // Here I retrieve my user, and can access some properties, but not them all ! 
    UserSoap user = userService.getUserByEmailAddress(companyId, target_user_mail);

    //TODO : I got hte JobTittle that I want, later I will do something more util thant just print it, I swear it my precious !
    System.out.println(user.getJobTitle());

    GroupServiceSoap groupService = new GroupServiceSoapServiceLocator().getPortal_GroupService(_getURL(USER_IDENTIFIER, USER_PASSWORD, LIFERAY_GROUP_SERVICE));

    //this one return an empty array
    GroupSoap[] userPlaces = groupService.getUserPlaces(new String[]{"Group", "Role"}, 150);

    //this return an array of size 1, but the only GroupSoap seems to be a structural groups without any usefull properties to me.
    GroupSoap[] userPlaces = groupService.getUserPlaces(null, 150);

}

2 个答案:

答案 0 :(得分:0)

使用此方法获取用户角色和组用户ID

UserServiceSoap.getRoleUserIds
UserServiceSoap.getGroupUserIds

HTH

答案 1 :(得分:0)

这只是部分答案。

为了获得所有用户角色,可以这样做:

RoleServiceSoap roleService =  new RoleServiceSoapServiceLocator().getPortal_RoleService(_getURL(USER_IDENTIFIER, USER_PASSWORD, LIFERAY_ROLE_SERVICE));
RoleSoap[] userRoles = roleService.getUserRoles(user.getUserId());

使用用户变量UserSoap的实例。

SOAP访问必须由管理员用户完成才能访问角色列表。用户无法自行访问。