关于Liferay的deactivate user的研究

简介:

当用户在控制面板中选择deactivate user的时候:

它会去走到EditUserAction的processAction()方法,在判断清楚动作是Constants.DEACTIVATE之后,它会调用deleteUser()方法:


这段代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
protected  void  deleteUsers(ActionRequest actionRequest)  throws  Exception {
             String cmd = ParamUtil.getString(actionRequest, Constants.CMD);
             long [] deleteUserIds = StringUtil.split(
                   ParamUtil.getString(actionRequest,  "deleteUserIds" ), 0L);
             for  ( int  i =  0 ; i < deleteUserIds.length; i++) {
                   if  (cmd.equals(Constants.DEACTIVATE) ||
                         cmd.equals(Constants.RESTORE)) {
                         int  status = WorkflowConstants.STATUS_APPROVED;
                         if  (cmd.equals(Constants.DEACTIVATE)) {
                               status = WorkflowConstants.STATUS_INACTIVE;
                         }
                         UserServiceUtil.updateStatus(deleteUserIds[i], status);
                   }
                   else  {
                         UserServiceUtil.deleteUser(deleteUserIds[i]);
                   }
             }
       }

可以发现deleteUser不仅仅是只删除用户,它是几种情况的糅合体,不仅仅是Delete,而且Deactivate,Restore都会走到这个方法中,我们因为是DEACTIVATE,所以走的分支是第16行,最终它先获取我们操作的用户的id,然后会调用UserServiceUtil.updateStatus(deleteUserIds[i],status)方法:


这个方法接下来会利用动态代理机制调用UserServiceImpl的updateStatus(long userId,int status)方法:


这个方法从调试信息中可以看到,我们要操作的用户id是12113,然后状态位要改成5,这个5应该是对应的Deactivate。


最终,这个方法会调用UserLocalServiceImpl.updateStatus(userId,status)方法:

它其实是对用户表User_进行了操作,并且吧其中UserId 为12113(Jessica这个用户)的状态为改成了5(deactivate):


这个表的DDL如下:


特别注意第2个字段(UserId)和最后一个字段(Status).


而当我们进行操作的时候,很容易从Hypersonic数据库的log中看到我们更新这个字段的操作(不过不明白为什么Update要拆分2条,一条是Delete,一条是insert)



总结:

(1)其实当Deactivate用户时候,并没有真正让用户信息从User_表中删除,仅仅是吧Status位置改成Deactivate.

(2)用户的Restore,Deactivate,Delete操作都合并在了deleteUser()方法中。

(3)Hypersonic操作很不智能,Update方法必须被拆分为一个Delete加一个Insert方法





本文转自 charles_wang888 51CTO博客,原文链接:http://blog.51cto.com/supercharles888/1270716,如需转载请自行联系原作者
目录
相关文章
|
Apache
《Apache Wicket User Guide - Ref》电子版地址
Apache Wicket User Guide - Reference Documentation
55 0
《Apache Wicket User Guide - Ref》电子版地址
问题集锦:使用CMake部署Qt应用程序:set_target_properties、get_target_property
问题集锦:使用CMake部署Qt应用程序:set_target_properties、get_target_property
307 0
|
网络安全 开发工具
|
JavaScript 前端开发 Java