1

我要求网站所有者有权创建用户并能够查看仅由他创建的用户列表。

为了达到同样的效果,我创建了一个带有基本用户详细信息的表单的 portlet。在我的操作类中提交表单时,我通过调用以下方法在 USER_ 表中插入用户详细信息:

    try{
    UserLocalServiceUtil.addUser(creatorUserId, companyId, autoPassword, password1, password2, 
autoScreenName, screenName, emailAddress, facebookId, openId, locale, firstName, middleName, lastName, 
prefixId, suffixId, male, birthdayMonth,birthdayDay, birthdayYear, jobTitle, groupIds, 
organizationsIds, roleIds, userGroupIds, sendEmail, serviceContext);
    }
    catch(Exception e)
    {
    }

    int userCount = UserLocalServiceUtil.getUsersCount();

现在用户正在 USER_ 表中创建。但是在显示用户列表时,我只需要显示由该站点所有者创建的用户。

所以我想siteId在用户表中再插入一列,并在基于siteId我想优化列表并在 UI 上显示的基础上进行提取。

因此,我已经了解了 Expando 的概念,但我没有正确了解如何根据我的要求使用它。

因此,请任何人建议我如何在调用addUser方法时插入“siteId”,同时根据此siteID需要获取用户列表。

提前致谢。

4

1 回答 1

2

物理添加列的唯一(并且强烈不推荐)方法是通过 EXT 环境修改 Liferay 核心。

排除这一点,实现您需要的第一个选项是不要使用 Liferay“站点”,而是使用 Liferay“门户实例”......这有点像拥有不同的 Liferay 安装:所有这些都将共享相同的软件基础设施,但它们在逻辑上是不同的 Liferay 安装。 请参阅此处了解更多信息。

如果这种方式不适用,第二种是使用Expando桥接。通过使用它,您可以将“虚拟”字段添加到包含相关 groupId 的“User_”表中。

代替使用 serviceutil 的通用 get() 方法,您可以访问 expando 值。您有两种不同的方式来访问 Expando 值。

第一个是执行 user.getExpandoBridge().get... 但它需要一个用户对象...所以这样你应该在返回列表之前迭代任何用户。

后者是直接使用ExpandoTableLocalService、ExpandoColumnLocalService和ExpandoValueLocalService来直接获取所有包含你groupId值的expando行...

...

...但是在这一点上,为什么不直接使用自定义映射表?

您只需要创建一个包含 userId 和 groupId 对的表...获取由 groupId 过滤的所有 userId,然后对 User_ 表执行 DynamicQuery。这不是数据库的最佳形式,但您可以实现您的目标。

您只需要在您的 portlet 中添加一个服务层:阅读此处以了解有关 Liferay 最强大功能之一的更多信息。

这是满足您的要求的一种干净的方式......但请记住,网站不是为此目的而设计的......并且整个 LR 权限系统将忽略您以这种方式强制执行的抽象。

于 2015-03-29T18:22:02.957 回答