在使用Liferay_portal开发的过程中我们遇到这样的一个问题。门户需要集成其他的web应用,但是用户信息却无法很好的导入。如果从前台一个一个的人工导入,显然是不现实并且愚蠢的。这时我们就需要从后台进行添加,在进行这方面探索的时候遇到了不少的问题也走了不少的弯路。但是,正是这些弯路也加深了我对一些问题的理解。

首先是实现添加用户,让添加的用户能够成功的登陆系统。

在不断的进行数据库的修改过程中,我发现,实际影响登陆的只有3个表。

User_表、Group_表和Contact_表

按照我在页面上添加的用户的数据库信息的规律,向其中添加信息,是可以成功登陆的。但是还有别的问题。添加的用户无法在控制面板的用户列表中显示,也没有任何的权限。

用户权限的添加

这个时候我的思路依旧是查看数据库,通过一个表一个表的观察这种很笨的方式来发现规律。最终我成功的将权限加入进去,主要的表是:

Users_Roles表,控制用户的角色,实现权限控制。

这里控制的角色为普通角色。

UserGroupRole表,控制用户的社区角色,实现权限控制。

这里控制的是用户在社区中的角色,前提是用户在一个社区中。

到这里,权限的控制就完成了。但是我所添加的用户依旧无法在控制面板中的用户列表中显示。

Liferay自身的用户添加机制

在这里我遇到了很多问题,长时间没有解决,网上资料也挺少的(至少中文的挺少的)。后来在看别人在5.X的版本中的添加实例时,我觉得6.0.5估计也应该有。这个可以有,这个真的有……

Liferay用户添加的主要方法是通过创建UserLocalServiceUtil实例,使用其中的addUser方法,具体代码如下。

UserLocalServiceUtil userServ = new UserLocalServiceUtil();

    ServiceContext serviceContext = new ServiceContext();

    User user = userServ.addUser(

10172, 

10135, 

false, 

"123456",

"123456",

false,

String.valueOf(userId)+sersInfo.getUser_Name(),

usersInfo.getUser_Email(),

0, 

"",

java.util.Locale.CHINA,

usersInfo.getUser_Name(),

sersInfo.getUser_Name(),

usersInfo.getUser_Name(), 

0, 

0, 

usersInfo.getUser_Sex(), 

usersInfo.getUser_Birthday().getMonth()+1, 

usersInfo.getUser_Birthday().getDate(), 

usersInfo.getUser_Birthday().getYear()+1900, 

usersInfo.getUser_Name(), new long[] { 19301 },

null,

      new long[] { 14885 }, 

      null, 

      false, 

      serviceContext

    );

其中也可以先创建实体,在逐条添加属性然后add。代码如下:

long userId = CounterLocalServiceUtil.increment(User.class.getName());//调用liferay的id生成机制;

 UserLocalServiceUtil userServ = new UserLocalServiceUtil();

    ServiceContext serviceContext = new ServiceContext();

 User user = userServ.createUser(userId);//这里的userId需要自己控制,也可以直接调用Liferay的id生成方法,使用Liferay的生成机制。但是和第一种方法仍有区别,这种生成的id起点是从0开始。如果使用前面的方式,不自己控制id,id则会从目前最后添加的id向后开始。

 userServ.addUser(user);

至此,用户添加完成。但是其中默认添加了Liferay中自己的默认权限,如果不需要,需要在调用其他方法删除。例如:

 userServ.deleteRoleUser(14885, user.getUserId());

    userServ.deleteRoleUser(14886, user.getUserId());

 userServ.deleteRoleUser(14887, user.getUserId());

之后如果创建过程中没有添加需要的权限也要自己再添加,我没有添加,因为看着比较乱,所以是添加完用户之后再添加的。例如我添加的:

 // 添加UserGroupRole

    UserGroupRolePK usergrouprolepk = new UserGroupRolePK();

    usergrouprolepk.setUserId(user.getUserId());

    usergrouprolepk.setGroupId(19301);

    usergrouprolepk.setRoleId(14885);

    UserGroupRole usergrouprole = UserGroupRoleUtil.create(usergrouprolepk);

 UserGroupRoleUtil.update(usergrouprole, true);

这样一来,用户的添加就完成了。如果有不足或谬误的地方,欢迎指正。

最后修改日期: 2019年12月11日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。