在使用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);
这样一来,用户的添加就完成了。如果有不足或谬误的地方,欢迎指正。
留言