如何在life ray现有用户表中添加自定义字段?

时间:2015-03-29 11:52:28

标签: liferay hook liferay-6 liferay-aui expando

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

为了达到同样的目的,我创建了一个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这样的列以及users表,并根据siteId提取,我想优化列表并在UI上显示。

所以我已经完成了Expando概念,但我没有根据我的要求得到正确的想法。

所以任何人都可以建议我如何在调用addUser方法的同时插入'siteId',同时根据此siteID获取需要获取用户列表。

提前致谢。

1 个答案:

答案 0 :(得分:2)

唯一(并且非常强烈推荐)以字面方式添加列的方法是通过EXT环境修改Liferay核心。

除此之外,实现您所需要的第一个选择是不要使用liferay" site",而是Liferay"门户实例" ...它有点喜欢使用不同的Liferay安装:它们都将共享相同的软件基础架构,但它们在逻辑上与Liferay安装不同。 See here了解更多信息。

如果这种方式不适用,第二种方法是使用Expando桥。 通过使用它,您可以添加一个"虚拟"字段到"用户_"包含相关groupId的表。

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

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

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

...

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

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

您只需要在portlet中添加一个服务层:read here以了解Liferay最强大的功能之一。

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

相关问题