1
0
mirror of https://github.com/chatopera/cosin.git synced 2025-08-01 16:38:02 +08:00

#61 add myorgans into loginUser

This commit is contained in:
Hai Liang Wang 2018-09-07 17:07:16 +08:00
parent 2cdbc8a386
commit 0efb7615e0
3 changed files with 271 additions and 254 deletions

View File

@ -16,10 +16,26 @@
*/ */
package com.chatopera.cc.webim.web.handler; package com.chatopera.cc.webim.web.handler;
import java.security.NoSuchAlgorithmException; import com.chatopera.cc.core.UKDataContext;
import java.util.ArrayList; import com.chatopera.cc.util.Menu;
import java.util.Date; import com.chatopera.cc.util.UKTools;
import java.util.List; import com.chatopera.cc.webim.service.cache.CacheHelper;
import com.chatopera.cc.webim.service.repository.OrganRepository;
import com.chatopera.cc.webim.service.repository.RoleAuthRepository;
import com.chatopera.cc.webim.service.repository.UserRepository;
import com.chatopera.cc.webim.service.repository.UserRoleRepository;
import com.chatopera.cc.webim.util.OnlineUserUtils;
import com.chatopera.cc.webim.web.model.*;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.CriteriaQuery;
@ -29,80 +45,68 @@ import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid; import javax.validation.Valid;
import java.security.NoSuchAlgorithmException;
import com.chatopera.cc.core.UKDataContext; import java.util.ArrayList;
import com.chatopera.cc.util.Menu; import java.util.Date;
import com.chatopera.cc.webim.service.cache.CacheHelper; import java.util.List;
import com.chatopera.cc.webim.service.repository.OrganRepository;
import com.chatopera.cc.webim.service.repository.OrganRoleRepository;
import com.chatopera.cc.webim.service.repository.RoleAuthRepository;
import com.chatopera.cc.webim.service.repository.UserRoleRepository;
import com.chatopera.cc.webim.util.OnlineUserUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import com.chatopera.cc.util.UKTools;
import com.chatopera.cc.webim.service.repository.UserRepository;
import com.chatopera.cc.webim.web.model.Organ;
import com.chatopera.cc.webim.web.model.OrganRole;
import com.chatopera.cc.webim.web.model.Role;
import com.chatopera.cc.webim.web.model.RoleAuth;
import com.chatopera.cc.webim.web.model.SystemConfig;
import com.chatopera.cc.webim.web.model.User;
import com.chatopera.cc.webim.web.model.UserRole;
/** /**
*
* @author UK * @author UK
* @version 1.0.0 * @version 1.0.0
*
*/ */
@Controller @Controller
public class LoginController extends Handler{ public class LoginController extends Handler {
private final static Logger logger = LoggerFactory.getLogger(LoginController.class);
@Autowired @Autowired
private UserRepository userRepository; private UserRepository userRepository;
@Autowired @Autowired
private OrganRoleRepository organRoleRes ; private UserRoleRepository userRoleRes;
@Autowired @Autowired
private UserRoleRepository userRoleRes ; private RoleAuthRepository roleAuthRes;
@Autowired
private RoleAuthRepository roleAuthRes ;
@Autowired @Autowired
private OrganRepository organRepository; private OrganRepository organRepository;
@RequestMapping(value = "/login" , method=RequestMethod.GET) /**
@Menu(type = "apps" , subtype = "user" , access = true) * 获取一个用户所拥有的所有部门ID
public ModelAndView login(HttpServletRequest request, HttpServletResponse response , @RequestHeader(value = "referer", required = false) String referer , @Valid String msg) throws NoSuchAlgorithmException { *
ModelAndView view = request(super.createRequestPageTempletResponse("redirect:/")); * @param user
if(request.getSession(true).getAttribute(UKDataContext.USER_SESSION_NAME) ==null){ */
view = request(super.createRequestPageTempletResponse("/login")); private void organs(final User user, final String organ) {
if(!StringUtils.isBlank(request.getParameter("referer"))){ if (organ == null)
referer = request.getParameter("referer") ; return;
user.getMyorgans().add(organ);
List<Organ> y = organRepository.findByOrgiAndParent(user.getOrgi(), organ);
for (Organ x : y) {
organs(user, x.getId());
} }
if(!StringUtils.isBlank(referer)){ }
view.addObject("referer", referer) ;
@RequestMapping(value = "/login", method = RequestMethod.GET)
@Menu(type = "apps", subtype = "user", access = true)
public ModelAndView login(HttpServletRequest request, HttpServletResponse response, @RequestHeader(value = "referer", required = false) String referer, @Valid String msg) throws NoSuchAlgorithmException {
ModelAndView view = request(super.createRequestPageTempletResponse("redirect:/"));
if (request.getSession(true).getAttribute(UKDataContext.USER_SESSION_NAME) == null) {
view = request(super.createRequestPageTempletResponse("/login"));
if (!StringUtils.isBlank(request.getParameter("referer"))) {
referer = request.getParameter("referer");
}
if (!StringUtils.isBlank(referer)) {
view.addObject("referer", referer);
} }
Cookie[] cookies = request.getCookies();//这样便可以获取一个cookie数组 Cookie[] cookies = request.getCookies();//这样便可以获取一个cookie数组
if(cookies!=null) { if (cookies != null) {
for(Cookie cookie : cookies){ for (Cookie cookie : cookies) {
if(cookie!=null && !StringUtils.isBlank(cookie.getName()) && !StringUtils.isBlank(cookie.getValue())){ if (cookie != null && !StringUtils.isBlank(cookie.getName()) && !StringUtils.isBlank(cookie.getValue())) {
if(cookie.getName().equals(UKDataContext.UKEFU_SYSTEM_COOKIES_FLAG)){ if (cookie.getName().equals(UKDataContext.UKEFU_SYSTEM_COOKIES_FLAG)) {
String flagid = UKTools.decryption(cookie.getValue()); String flagid = UKTools.decryption(cookie.getValue());
if(!StringUtils.isBlank(flagid)) { if (!StringUtils.isBlank(flagid)) {
User user = userRepository.findById(flagid) ; User user = userRepository.findById(flagid);
if(user!=null) { if (user != null) {
view = this.processLogin(request, response, view, user, referer) ; view = this.processLogin(request, response, view, user, referer);
} }
} }
} }
@ -110,118 +114,124 @@ public class LoginController extends Handler{
} }
} }
} }
if(!StringUtils.isBlank(msg)){ if (!StringUtils.isBlank(msg)) {
view.addObject("msg", msg) ; view.addObject("msg", msg);
} }
SystemConfig systemConfig = UKTools.getSystemConfig(); SystemConfig systemConfig = UKTools.getSystemConfig();
if(systemConfig!=null&&systemConfig.isEnableregorgi()) { if (systemConfig != null && systemConfig.isEnableregorgi()) {
view.addObject("show", true); view.addObject("show", true);
} }
if(systemConfig != null){ if (systemConfig != null) {
view.addObject("systemConfig", systemConfig) ; view.addObject("systemConfig", systemConfig);
} }
return view; return view;
} }
@RequestMapping(value = "/login" , method=RequestMethod.POST) @RequestMapping(value = "/login", method = RequestMethod.POST)
@Menu(type = "apps" , subtype = "user" , access = true) @Menu(type = "apps", subtype = "user", access = true)
public ModelAndView login(HttpServletRequest request, HttpServletResponse response , @Valid User user ,@Valid String referer,@Valid String sla) throws NoSuchAlgorithmException { public ModelAndView login(HttpServletRequest request, HttpServletResponse response, @Valid User user, @Valid String referer, @Valid String sla) throws NoSuchAlgorithmException {
ModelAndView view = request(super.createRequestPageTempletResponse("redirect:/")); ModelAndView view = request(super.createRequestPageTempletResponse("redirect:/"));
if(request.getSession(true).getAttribute(UKDataContext.USER_SESSION_NAME) ==null){ if (request.getSession(true).getAttribute(UKDataContext.USER_SESSION_NAME) == null) {
if(user!=null && user.getUsername()!=null){ if (user != null && user.getUsername() != null) {
final User loginUser = userRepository.findByUsernameAndPasswordAndDatastatus(user.getUsername() , UKTools.md5(user.getPassword()),false) ; final User loginUser = userRepository.findByUsernameAndPasswordAndDatastatus(user.getUsername(), UKTools.md5(user.getPassword()), false);
if(loginUser!=null && !StringUtils.isBlank(loginUser.getId())){ if (loginUser != null && !StringUtils.isBlank(loginUser.getId())) {
view = this.processLogin(request, response, view, loginUser, referer) ; view = this.processLogin(request, response, view, loginUser, referer);
if(!StringUtils.isBlank(sla) && sla.equals("1")) { if (!StringUtils.isBlank(sla) && sla.equals("1")) {
Cookie flagid = new Cookie(UKDataContext.UKEFU_SYSTEM_COOKIES_FLAG,UKTools.encryption(loginUser.getId())); Cookie flagid = new Cookie(UKDataContext.UKEFU_SYSTEM_COOKIES_FLAG, UKTools.encryption(loginUser.getId()));
flagid.setMaxAge(7*24*60*60); flagid.setMaxAge(7 * 24 * 60 * 60);
response.addCookie(flagid); response.addCookie(flagid);
// add authorization code for rest api // add authorization code for rest api
String auth = UKTools.getUUID(); String auth = UKTools.getUUID();
CacheHelper.getApiUserCacheBean().put(auth, loginUser, UKDataContext.SYSTEM_ORGI); CacheHelper.getApiUserCacheBean().put(auth, loginUser, UKDataContext.SYSTEM_ORGI);
response.addCookie((new Cookie("authorization", auth))); response.addCookie((new Cookie("authorization", auth)));
} }
}else{ } else {
view = request(super.createRequestPageTempletResponse("/login")); view = request(super.createRequestPageTempletResponse("/login"));
if(!StringUtils.isBlank(referer)){ if (!StringUtils.isBlank(referer)) {
view.addObject("referer", referer) ; view.addObject("referer", referer);
} }
view.addObject("msg", "0") ; view.addObject("msg", "0");
} }
} }
} }
SystemConfig systemConfig = UKTools.getSystemConfig(); SystemConfig systemConfig = UKTools.getSystemConfig();
if(systemConfig!=null&&systemConfig.isEnableregorgi()) { if (systemConfig != null && systemConfig.isEnableregorgi()) {
view.addObject("show", true); view.addObject("show", true);
} }
if(systemConfig != null){ if (systemConfig != null) {
view.addObject("systemConfig", systemConfig) ; view.addObject("systemConfig", systemConfig);
} }
return view; return view;
} }
private ModelAndView processLogin(HttpServletRequest request, HttpServletResponse response , ModelAndView view ,final User loginUser , String referer) { private ModelAndView processLogin(HttpServletRequest request, HttpServletResponse response, ModelAndView view, final User loginUser, String referer) {
if(loginUser!=null) { if (loginUser != null) {
loginUser.setLogin(true); loginUser.setLogin(true);
if(!StringUtils.isBlank(referer)){ if (!StringUtils.isBlank(referer)) {
view = request(super.createRequestPageTempletResponse("redirect:"+referer)); view = request(super.createRequestPageTempletResponse("redirect:" + referer));
}else { } else {
view = request(super.createRequestPageTempletResponse("redirect:/")); view = request(super.createRequestPageTempletResponse("redirect:/"));
} }
//登录成功 判断是否进入多租户页面 //登录成功 判断是否进入多租户页面
SystemConfig systemConfig = UKTools.getSystemConfig(); SystemConfig systemConfig = UKTools.getSystemConfig();
if(systemConfig!=null&&systemConfig.isEnabletneant() && systemConfig.isTenantconsole() &&!loginUser.isSuperuser()) { if (systemConfig != null && systemConfig.isEnabletneant() && systemConfig.isTenantconsole() && !loginUser.isSuperuser()) {
view = request(super.createRequestPageTempletResponse("redirect:/apps/tenant/index")); view = request(super.createRequestPageTempletResponse("redirect:/apps/tenant/index"));
} }
List<UserRole> userRoleList = userRoleRes.findByOrgiAndUser(loginUser.getOrgi(), loginUser); List<UserRole> userRoleList = userRoleRes.findByOrgiAndUser(loginUser.getOrgi(), loginUser);
if(userRoleList!=null && userRoleList.size()>0){ if (userRoleList != null && userRoleList.size() > 0) {
for(UserRole userRole : userRoleList){ for (UserRole userRole : userRoleList) {
loginUser.getRoleList().add(userRole.getRole()) ; loginUser.getRoleList().add(userRole.getRole());
} }
} }
//获取用户的角色权限进行授权 // 获取用户部门以及下级部门
List<RoleAuth> roleAuthList = roleAuthRes.findAll(new Specification<RoleAuth>(){ organs(loginUser, loginUser.getOrgan()); // 添加部门到myorgans中
// 获取用户的角色权限进行授权
List<RoleAuth> roleAuthList = roleAuthRes.findAll(new Specification<RoleAuth>() {
@Override @Override
public Predicate toPredicate(Root<RoleAuth> root, CriteriaQuery<?> query, public Predicate toPredicate(Root<RoleAuth> root, CriteriaQuery<?> query,
CriteriaBuilder cb) { CriteriaBuilder cb) {
List<Predicate> list = new ArrayList<Predicate>(); List<Predicate> list = new ArrayList<Predicate>();
if(loginUser.getRoleList()!=null && loginUser.getRoleList().size() > 0){ if (loginUser.getRoleList() != null && loginUser.getRoleList().size() > 0) {
for(Role role : loginUser.getRoleList()){ for (Role role : loginUser.getRoleList()) {
list.add(cb.equal(root.get("roleid").as(String.class), role.getId())) ; list.add(cb.equal(root.get("roleid").as(String.class), role.getId()));
} }
} }
Predicate[] p = new Predicate[list.size()]; Predicate[] p = new Predicate[list.size()];
cb.and(cb.equal(root.get("orgi").as(String.class), loginUser.getOrgi())) ; cb.and(cb.equal(root.get("orgi").as(String.class), loginUser.getOrgi()));
return cb.or(list.toArray(p)); return cb.or(list.toArray(p));
}}) ; }
if(roleAuthList!=null) { });
for(RoleAuth roleAuth:roleAuthList) {
if (roleAuthList != null) {
for (RoleAuth roleAuth : roleAuthList) {
loginUser.getRoleAuthMap().put(roleAuth.getDicvalue(), true); loginUser.getRoleAuthMap().put(roleAuth.getDicvalue(), true);
} }
} }
loginUser.setLastlogintime(new Date()); loginUser.setLastlogintime(new Date());
if(!StringUtils.isBlank(loginUser.getId())){ if (!StringUtils.isBlank(loginUser.getId())) {
userRepository.save(loginUser) ; userRepository.save(loginUser);
} }
super.setUser(request, loginUser); super.setUser(request, loginUser);
//当前用户 企业id为空 调到创建企业页面 //当前用户 企业id为空 调到创建企业页面
if(StringUtils.isBlank(loginUser.getOrgid())) { if (StringUtils.isBlank(loginUser.getOrgid())) {
view = request(super.createRequestPageTempletResponse("redirect:/apps/organization/add.html")); view = request(super.createRequestPageTempletResponse("redirect:/apps/organization/add.html"));
} }
} }
return view ; return view;
} }
@RequestMapping("/logout") @RequestMapping("/logout")
public String logout(HttpServletRequest request , HttpServletResponse response){ public String logout(HttpServletRequest request, HttpServletResponse response) {
request.getSession().removeAttribute(UKDataContext.USER_SESSION_NAME) ; request.getSession().removeAttribute(UKDataContext.USER_SESSION_NAME);
Cookie[] cookies = request.getCookies(); Cookie[] cookies = request.getCookies();
if(cookies!=null) { if (cookies != null) {
for(Cookie cookie : cookies){ for (Cookie cookie : cookies) {
if(cookie!=null && !StringUtils.isBlank(cookie.getName()) && !StringUtils.isBlank(cookie.getValue())){ if (cookie != null && !StringUtils.isBlank(cookie.getName()) && !StringUtils.isBlank(cookie.getValue())) {
if(cookie.getName().equals(UKDataContext.UKEFU_SYSTEM_COOKIES_FLAG)){ if (cookie.getName().equals(UKDataContext.UKEFU_SYSTEM_COOKIES_FLAG)) {
cookie.setMaxAge(0); cookie.setMaxAge(0);
response.addCookie(cookie); response.addCookie(cookie);
} }
@ -231,30 +241,30 @@ public class LoginController extends Handler{
return "redirect:/"; return "redirect:/";
} }
@RequestMapping(value = "/register" ) @RequestMapping(value = "/register")
@Menu(type = "apps" , subtype = "user" , access = true) @Menu(type = "apps", subtype = "user", access = true)
public ModelAndView register(HttpServletRequest request, HttpServletResponse response,@Valid String msg) { public ModelAndView register(HttpServletRequest request, HttpServletResponse response, @Valid String msg) {
ModelAndView view = request(super.createRequestPageTempletResponse("redirect:/")); ModelAndView view = request(super.createRequestPageTempletResponse("redirect:/"));
if(request.getSession(true).getAttribute(UKDataContext.USER_SESSION_NAME) ==null){ if (request.getSession(true).getAttribute(UKDataContext.USER_SESSION_NAME) == null) {
view = request(super.createRequestPageTempletResponse("/register")); view = request(super.createRequestPageTempletResponse("/register"));
} }
if(!StringUtils.isBlank(msg)){ if (!StringUtils.isBlank(msg)) {
view.addObject("msg", msg) ; view.addObject("msg", msg);
} }
return view; return view;
} }
@RequestMapping("/addAdmin") @RequestMapping("/addAdmin")
@Menu(type = "apps" , subtype = "user",access=true) @Menu(type = "apps", subtype = "user", access = true)
public ModelAndView addAdmin(HttpServletRequest request ,HttpServletResponse response,@Valid User user) { public ModelAndView addAdmin(HttpServletRequest request, HttpServletResponse response, @Valid User user) {
String msg = "" ; String msg = "";
msg = validUser(user); msg = validUser(user);
if(!StringUtils.isBlank(msg)){ if (!StringUtils.isBlank(msg)) {
return request(super.createRequestPageTempletResponse("redirect:/register.html?msg="+msg)); return request(super.createRequestPageTempletResponse("redirect:/register.html?msg=" + msg));
}else{ } else {
user.setUname(user.getUsername()); user.setUname(user.getUsername());
user.setUsertype("0"); user.setUsertype("0");
if(!StringUtils.isBlank(user.getPassword())){ if (!StringUtils.isBlank(user.getPassword())) {
user.setPassword(UKTools.md5(user.getPassword())); user.setPassword(UKTools.md5(user.getPassword()));
} }
user.setOrgi(super.getOrgiByTenantshare(request)); user.setOrgi(super.getOrgiByTenantshare(request));
@ -263,13 +273,13 @@ public class LoginController extends Handler{
}else { }else {
user.setOrgid(UKDataContext.SYSTEM_ORGI); user.setOrgid(UKDataContext.SYSTEM_ORGI);
}*/ }*/
userRepository.save(user) ; userRepository.save(user);
OnlineUserUtils.clean(super.getOrgi(request)); OnlineUserUtils.clean(super.getOrgi(request));
} }
ModelAndView view = this.processLogin(request, response, request(super.createRequestPageTempletResponse("redirect:/")), user, ""); ModelAndView view = this.processLogin(request, response, request(super.createRequestPageTempletResponse("redirect:/")), user, "");
//当前用户 企业id为空 调到创建企业页面 //当前用户 企业id为空 调到创建企业页面
if(StringUtils.isBlank(user.getOrgid())) { if (StringUtils.isBlank(user.getOrgid())) {
view = request(super.createRequestPageTempletResponse("redirect:/apps/organization/add.html")); view = request(super.createRequestPageTempletResponse("redirect:/apps/organization/add.html"));
} }
return view; return view;
@ -277,18 +287,18 @@ public class LoginController extends Handler{
private String validUser(User user) { private String validUser(User user) {
String msg = ""; String msg = "";
User tempUser = userRepository.findByUsernameAndDatastatus(user.getUsername(),false) ; User tempUser = userRepository.findByUsernameAndDatastatus(user.getUsername(), false);
if(tempUser!=null) { if (tempUser != null) {
msg = "username_exist"; msg = "username_exist";
return msg; return msg;
} }
tempUser = userRepository.findByEmailAndDatastatus(user.getEmail(),false) ; tempUser = userRepository.findByEmailAndDatastatus(user.getEmail(), false);
if(tempUser!=null) { if (tempUser != null) {
msg = "email_exist"; msg = "email_exist";
return msg; return msg;
} }
tempUser = userRepository.findByMobileAndDatastatus(user.getMobile(),false) ; tempUser = userRepository.findByMobileAndDatastatus(user.getMobile(), false);
if(tempUser!=null) { if (tempUser != null) {
msg = "mobile_exist"; msg = "mobile_exist";
return msg; return msg;
} }

View File

@ -217,6 +217,7 @@ public class AppsController extends Handler {
User sessionUser = super.getUser(request) ; User sessionUser = super.getUser(request) ;
tempUser.setRoleList(sessionUser.getRoleList()) ; tempUser.setRoleList(sessionUser.getRoleList()) ;
tempUser.setRoleAuthMap(sessionUser.getRoleAuthMap()); tempUser.setRoleAuthMap(sessionUser.getRoleAuthMap());
tempUser.setMyorgans(sessionUser.getMyorgans());
User u = tempUser; User u = tempUser;
u.setOrgi(super.getOrgi(request)); u.setOrgi(super.getOrgi(request));
super.setUser(request, u); super.setUser(request, u);

View File

@ -17,11 +17,7 @@
package com.chatopera.cc.webim.web.model; package com.chatopera.cc.webim.web.model;
import java.util.ArrayList; import java.util.*;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
@ -104,6 +100,7 @@ public class User implements java.io.Serializable{
private int fans; //粉丝 private int fans; //粉丝
private int follows; //关注 private int follows; //关注
private int integral; //积分 private int integral; //积分
private HashSet<String> myorgans = new HashSet<>();
private List<Role> roleList = new ArrayList<Role>(); private List<Role> roleList = new ArrayList<Role>();
private Map<String ,Object> roleAuthMap = new HashMap<String ,Object>(); private Map<String ,Object> roleAuthMap = new HashMap<String ,Object>();
@ -517,4 +514,13 @@ public class User implements java.io.Serializable{
public void setOrdertype(String ordertype) { public void setOrdertype(String ordertype) {
this.ordertype = ordertype; this.ordertype = ordertype;
} }
@Transient
public HashSet<String> getMyorgans() {
return myorgans;
}
public void setMyorgans(HashSet<String> myorgans) {
this.myorgans = myorgans;
}
} }