GrantUserToRoleAction.java
package com.mycim.webapp.actions.setting.security.user;
import com.fa.sesa.exception.Assert;
import com.fa.sesa.exception.Errors;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.logging.Logger;
import com.mycim.framework.logging.LoggerFactory;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.valueobject.MessageIdList;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.bas.NamedObject;
import com.mycim.valueobject.bas.Relation;
import com.mycim.valueobject.consts.LinkTypeList;
import com.mycim.valueobject.consts.SessionNames;
import com.mycim.valueobject.security.Role;
import com.mycim.valueobject.security.User;
import com.mycim.webapp.Constants;
import com.mycim.webapp.WebUtils;
import com.mycim.webapp.actions.AbstractAction;
import com.mycim.webapp.forms.security.UserInfoForm;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Collection;
import java.util.List;
/**
* @author Johnson Wang
**/
public class GrantUserToRoleAction extends AbstractAction {
private static final Logger log = LoggerFactory.getLogger(AbstractAction.class);
@Override
public ActionForward init(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) {
return qryRoleAllByUser(mapping, (UserInfoForm) form, request, response);
}
@Override
public ActionForward cancel(ActionMapping mapping, ActionForm form, HttpServletRequest request,
HttpServletResponse response) throws Exception {
String jumpToUser = ((UserInfoForm) form).getJumpToUser();
if ("1".equals(jumpToUser)) {
response.sendRedirect(request.getContextPath() + "/userQuery.do?init=1");
return WebUtils.NULLActionForward;
} else {
return mapping.findForward("cancel");
}
}
public ActionForward qryRoleAllByUser(ActionMapping mapping, UserInfoForm theform, HttpServletRequest request,
HttpServletResponse response) {
long userRrn = getInstanceRrn(theform.getInstanceId(), LocalContext.getFacilityRrn(), ObjectList.USER_KEY);
Collection userRoles = getUserRoles(userRrn);
theform.setPages(new Integer(1));
User user = new User();
user.setInstanceRrn(getInstanceRrn(WebUtils.getParameter("instanceId", request), LocalContext.getFacilityRrn(),
ObjectList.USER_KEY));
user.setRoleList(userRoles);
request.setAttribute(SessionNames.USERPROFILE_KEY, user);
return (new ActionForward(mapping.getInput()));
}
public ActionForward deleteUserGrantRole(ActionMapping mapping, UserInfoForm theform, HttpServletRequest request,
HttpServletResponse response) {
User user = new User();
user.setInstanceRrn(
getInstanceRrn(theform.getInstanceId(), LocalContext.getFacilityRrn(), ObjectList.USER_KEY));
String item = WebUtils.getParameter(Constants.ITEM_KEY, request);
Assert.isFalse(StringUtils.isBlank(item),
Errors.create().key(MessageIdList.USER_MISSING_DELETED_INFORMATION).content("删除的信息为空或者不存在!")
.build());
Role role = new Role();
role.setInstanceRrn(new Long(item).longValue());
removeUserToRole(user, role);
user.setRoleList(this.getUserRoles(user.getInstanceRrn()));
request.setAttribute(SessionNames.USERPROFILE_KEY, user);
return (new ActionForward(mapping.getInput()));
}
public ActionForward addUserGrantRole(ActionMapping mapping, UserInfoForm theform, HttpServletRequest request,
HttpServletResponse response) {
User user = new User();
user.setInstanceRrn(
getInstanceRrn(theform.getInstanceId(), LocalContext.getFacilityRrn(), ObjectList.USER_KEY));
String roleId = theform.getRoleId();
long roleRrn = getInstanceRrn(StringUtils.trimToUpperCase(roleId),
getNamedSpace(ObjectList.ROLE_KEY, LocalContext.getFacilityRrn()),
ObjectList.ROLE_KEY);
Assert.isFalse(StringUtils.isBlank(roleId) || roleRrn <= 0,
Errors.create().key(MessageIdList.ROLE_MISSING_ID).content("角色id为空或者不存在!").build());
Role role = new Role(StringUtils.trimToUpperCase(roleId),
getNamedSpace(ObjectList.ROLE_KEY, LocalContext.getFacilityRrn()), ObjectList.ROLE_KEY);
Assert.isFalse(role == null, Errors.create().key(MessageIdList.ROLE_MISSING).content("角色为空或者不存在!").build());
addUserToRole(user, role);
user.setRoleList(this.getUserRoles(user.getInstanceRrn()));
theform.setRoleId("");
request.setAttribute(SessionNames.USERPROFILE_KEY, user);
return (new ActionForward(mapping.getInput()));
}
protected List<Relation> getUserRoles(long userRrn) {
return securityService.getUserRoles(userRrn);
}
protected void removeUserToRole(User user, Role role) {
Relation relation = buildRelation(user, role);
Assert.isFalse(null == relation,
Errors.create().key(MessageIdList.USER_REMOVE_ERROR).content("从角色中删除用户错误!").build());
relation.setLinkType(LinkTypeList.USER_ROLE_KEY);
log.info("before remove");
log.info("relation " + relation.getFromRrn() + " " + relation.getToRrn());
securityService.removeUserFromRole(relation);
}
protected void addUserToRole(User user, Role role) {
Relation relation = buildRelation(user, role);
Assert.isFalse(null == relation,
Errors.create().key(MessageIdList.USER_MISSING_RELATION).content("relation为空!").build());
relation.setLinkType(LinkTypeList.USER_ROLE_KEY);
if (baseService.getRelation(relation) == null) {
securityService.addUserToRole(relation);
}
}
protected Relation buildRelation(NamedObject fromObject, NamedObject toObject) {
Relation relation = new Relation();
if (fromObject.getInstanceRrn() <= 0) {
long fromRrn = baseService.getNamedObjectRrn(fromObject);
Assert.isFalse(fromRrn <= 0,
Errors.create().key(MessageIdList.USER_MISSING_FROMRRN).content("没有找到fromRrn!").build());
relation.setFromRrn(fromRrn);
} else {
relation.setFromRrn(fromObject.getInstanceRrn());
}
if (toObject.getInstanceRrn() <= 0) {
long toRrn = baseService.getNamedObjectRrn(toObject);
Assert.isFalse(toRrn <= 0,
Errors.create().key(MessageIdList.USER_MISSING_TORRN).content("没有找到toRrn!").build());
relation.setToRrn(toRrn);
} else {
relation.setToRrn(toObject.getInstanceRrn());
}
return relation;
}
}