1
0
mirror of https://github.com/chatopera/cosin.git synced 2025-08-05 20:41:34 +08:00

Fix UserRoleRepository related class

This commit is contained in:
dengchao@xgtl 2020-04-17 09:46:39 +08:00
parent 04cab0db80
commit ad6946e859
4 changed files with 536 additions and 580 deletions

View File

@ -21,12 +21,10 @@ import com.chatopera.cc.basic.Constants;
import com.chatopera.cc.basic.MainContext; import com.chatopera.cc.basic.MainContext;
import com.chatopera.cc.basic.MainUtils; import com.chatopera.cc.basic.MainUtils;
import com.chatopera.cc.basic.auth.AuthToken; import com.chatopera.cc.basic.auth.AuthToken;
import com.chatopera.cc.cache.Cache;
import com.chatopera.cc.model.AgentStatus; import com.chatopera.cc.model.AgentStatus;
import com.chatopera.cc.model.SystemConfig; import com.chatopera.cc.model.SystemConfig;
import com.chatopera.cc.model.User; import com.chatopera.cc.model.User;
import com.chatopera.cc.model.UserRole; import com.chatopera.cc.model.UserRole;
import com.chatopera.cc.persistence.repository.AgentStatusRepository;
import com.chatopera.cc.persistence.repository.UserRepository; import com.chatopera.cc.persistence.repository.UserRepository;
import com.chatopera.cc.persistence.repository.UserRoleRepository; import com.chatopera.cc.persistence.repository.UserRoleRepository;
import com.chatopera.cc.proxy.AgentProxy; import com.chatopera.cc.proxy.AgentProxy;
@ -34,11 +32,12 @@ import com.chatopera.cc.proxy.AgentSessionProxy;
import com.chatopera.cc.proxy.OnlineUserProxy; import com.chatopera.cc.proxy.OnlineUserProxy;
import com.chatopera.cc.proxy.UserProxy; import com.chatopera.cc.proxy.UserProxy;
import com.chatopera.cc.util.Menu; import com.chatopera.cc.util.Menu;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.jasypt.exceptions.EncryptionOperationNotPossibleException; import org.jasypt.exceptions.EncryptionOperationNotPossibleException;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.lang.NonNull;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@ -50,59 +49,46 @@ 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.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Optional;
/** /**
* @author CSKefu * @author CSKefu
* @version 1.0.1 * @version 1.0.1
*/ */
@Controller @Controller
@RequiredArgsConstructor
public class LoginController extends Handler { public class LoginController extends Handler {
private final static Logger logger = LoggerFactory.getLogger(LoginController.class); private final static Logger logger = LoggerFactory.getLogger(LoginController.class);
@Autowired @NonNull
private UserRepository userRepository; private final UserRepository userRepository;
@Autowired @NonNull
private UserRoleRepository userRoleRes; private final UserRoleRepository userRoleRes;
@Autowired @NonNull
private AuthToken authToken; private final AuthToken authToken;
@Autowired @NonNull
private AgentStatusRepository agentStatusRes; private final AgentProxy agentProxy;
@Autowired @NonNull
private Cache cache; private final AgentSessionProxy agentSessionProxy;
@Autowired @NonNull
private AgentProxy agentProxy; private final UserProxy userProxy;
@Autowired @NonNull
private AgentSessionProxy agentSessionProxy; private final ACDWorkMonitor acdWorkMonitor;
@Autowired
private UserProxy userProxy;
@Autowired
private ACDWorkMonitor acdWorkMonitor;
/** /**
* 登录页面 * 登录页面
*
* @param request
* @param response
* @param referer
* @param msg
* @return
* @throws NoSuchAlgorithmException
*/ */
@RequestMapping(value = "/login", method = RequestMethod.GET) @RequestMapping(value = "/login", method = RequestMethod.GET)
@Menu(type = "apps", subtype = "user", access = true) @Menu(type = "apps", subtype = "user", access = true)
public ModelAndView login(HttpServletRequest request, HttpServletResponse response, @RequestHeader(value = "referer", required = false) String referer, @Valid String msg) { public ModelAndView login(HttpServletRequest request, @RequestHeader(value = "referer", required = false) String referer, @Valid String msg) {
ModelAndView view = new ModelAndView("redirect:/"); ModelAndView view = new ModelAndView("redirect:/");
if (request.getSession(true).getAttribute(Constants.USER_SESSION_NAME) == null) { if (request.getSession(true).getAttribute(Constants.USER_SESSION_NAME) == null) {
view = new ModelAndView("/login"); view = new ModelAndView("/login");
@ -122,17 +108,15 @@ public class LoginController extends Handler {
try { try {
flagid = MainUtils.decryption(cookie.getValue()); flagid = MainUtils.decryption(cookie.getValue());
if (StringUtils.isNotBlank(flagid)) { if (StringUtils.isNotBlank(flagid)) {
User user = userRepository.findById(flagid); Optional<User> optional = userRepository.findById(flagid);
if (user != null) { if (optional.isPresent()) {
view = this.processLogin(request, user, referer); view = this.processLogin(request, optional.get(), referer);
} }
} }
} catch (EncryptionOperationNotPossibleException e) { } catch (EncryptionOperationNotPossibleException e) {
logger.error("[login] error:", e); logger.error("[login] error:", e);
view = request(super.createRequestPageTempletResponse("/public/clearcookie")); view = request(super.createRequestPageTempletResponse("/public/clearcookie"));
return view; return view;
} catch (NoSuchAlgorithmException e) {
logger.error("[login] error:", e);
} }
} }
} }
@ -154,14 +138,6 @@ public class LoginController extends Handler {
/** /**
* 提交登录表单 * 提交登录表单
*
* @param request
* @param response
* @param user
* @param referer
* @param sla
* @return
* @throws NoSuchAlgorithmException
*/ */
@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)
@ -170,7 +146,7 @@ public class LoginController extends Handler {
final HttpServletResponse response, final HttpServletResponse response,
@Valid User user, @Valid User user,
@Valid String referer, @Valid String referer,
@Valid String sla) throws NoSuchAlgorithmException { @Valid String sla) {
ModelAndView view = new ModelAndView("redirect:/"); ModelAndView view = new ModelAndView("redirect:/");
if (request.getSession(true).getAttribute(Constants.USER_SESSION_NAME) == null) { if (request.getSession(true).getAttribute(Constants.USER_SESSION_NAME) == null) {
if (user != null && user.getUsername() != null) { if (user != null && user.getUsername() != null) {
@ -197,12 +173,12 @@ public class LoginController extends Handler {
// 该登录用户是坐席并且具有坐席对话的角色 // 该登录用户是坐席并且具有坐席对话的角色
if ((loginUser.isAgent() && if ((loginUser.isAgent() &&
loginUser.getRoleAuthMap().containsKey("A01") && loginUser.getRoleAuthMap().containsKey("A01") &&
((boolean) loginUser.getRoleAuthMap().get("A01") == true)) ((boolean) loginUser.getRoleAuthMap().get("A01")))
|| loginUser.isAdmin()) { || loginUser.isAdmin()) {
try { try {
/**************************************** //****************************************
* 登录成功设置该坐席为就绪状态默认 //* 登录成功设置该坐席为就绪状态默认
****************************************/ //****************************************
// https://gitlab.chatopera.com/chatopera/cosinee.w4l/issues/306 // https://gitlab.chatopera.com/chatopera/cosinee.w4l/issues/306
final AgentStatus agentStatus = agentProxy.resolveAgentStatusByAgentnoAndOrgi( final AgentStatus agentStatus = agentProxy.resolveAgentStatusByAgentnoAndOrgi(
loginUser.getId(), orgi, loginUser.getSkills()); loginUser.getId(), orgi, loginUser.getSkills());
@ -246,11 +222,6 @@ public class LoginController extends Handler {
/** /**
* 处理登录事件 * 处理登录事件
*
* @param request
* @param loginUser
* @param referer
* @return
*/ */
private ModelAndView processLogin(final HttpServletRequest request, final User loginUser, String referer) { private ModelAndView processLogin(final HttpServletRequest request, final User loginUser, String referer) {
ModelAndView view = new ModelAndView(); ModelAndView view = new ModelAndView();
@ -306,14 +277,10 @@ public class LoginController extends Handler {
* 登出用户 * 登出用户
* code代表登出的原因 * code代表登出的原因
* *
* @param request
* @param response
* @param code 登出的代码 * @param code 登出的代码
* @return
*/ */
@RequestMapping("/logout") @RequestMapping("/logout")
public String logout(HttpServletRequest request, HttpServletResponse response, @RequestParam(value = "code", required = false) String code) throws UnsupportedEncodingException { public String logout(HttpServletRequest request, HttpServletResponse response, @RequestParam(value = "code", required = false) String code) {
final User user = super.getUser(request);
request.getSession().removeAttribute(Constants.USER_SESSION_NAME); request.getSession().removeAttribute(Constants.USER_SESSION_NAME);
request.getSession().invalidate(); request.getSession().invalidate();
Cookie[] cookies = request.getCookies(); Cookie[] cookies = request.getCookies();
@ -338,7 +305,7 @@ public class LoginController extends Handler {
@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, @Valid String msg) {
ModelAndView view = request(super.createRequestPageTempletResponse("redirect:/")); ModelAndView view = request(super.createRequestPageTempletResponse("redirect:/"));
if (request.getSession(true).getAttribute(Constants.USER_SESSION_NAME) == null) { if (request.getSession(true).getAttribute(Constants.USER_SESSION_NAME) == null) {
view = request(super.createRequestPageTempletResponse("/register")); view = request(super.createRequestPageTempletResponse("/register"));
@ -351,9 +318,8 @@ public class LoginController extends Handler {
@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, @Valid User user) {
String msg = ""; String msg = validUser(user);
msg = validUser(user);
if (StringUtils.isNotBlank(msg)) { if (StringUtils.isNotBlank(msg)) {
return request(super.createRequestPageTempletResponse("redirect:/register.html?msg=" + msg)); return request(super.createRequestPageTempletResponse("redirect:/register.html?msg=" + msg));
} else { } else {

View File

@ -23,11 +23,11 @@ import com.chatopera.cc.persistence.repository.UserRepository;
import com.chatopera.cc.persistence.repository.UserRoleRepository; import com.chatopera.cc.persistence.repository.UserRoleRepository;
import com.chatopera.cc.proxy.OnlineUserProxy; import com.chatopera.cc.proxy.OnlineUserProxy;
import com.chatopera.cc.util.Menu; import com.chatopera.cc.util.Menu;
import org.slf4j.Logger; import lombok.RequiredArgsConstructor;
import org.slf4j.LoggerFactory; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@ -35,28 +35,27 @@ import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid; import javax.validation.Valid;
import java.io.IOException;
import java.util.List; import java.util.List;
/** /**
* @author 程序猿DD * @author <a href="http://blog.didispace.com>程序猿DD</a>
* @version 1.0.0 * @version 1.0.0
* @blog http://blog.didispace.com
*/ */
@Slf4j
@Controller @Controller
@RequestMapping("/admin/user") @RequestMapping("/admin/user")
@RequiredArgsConstructor
public class UsersController extends Handler { public class UsersController extends Handler {
private final static Logger logger = LoggerFactory.getLogger(UsersController.class);
@Autowired @NonNull
private UserRepository userRepository; private final UserRepository userRepository;
@Autowired @NonNull
private UserRoleRepository userRoleRes; private final UserRoleRepository userRoleRes;
@RequestMapping("/index") @RequestMapping("/index")
@Menu(type = "admin", subtype = "user") @Menu(type = "admin", subtype = "user")
public ModelAndView index(ModelMap map, HttpServletRequest request) throws IOException { public ModelAndView index(ModelMap map, HttpServletRequest request) {
map.addAttribute( map.addAttribute(
"userList", "userList",
userRepository.findByDatastatusAndOrgiAndOrgidAndSuperadminNot( userRepository.findByDatastatusAndOrgiAndOrgidAndSuperadminNot(
@ -77,13 +76,13 @@ public class UsersController extends Handler {
@RequestMapping("/add") @RequestMapping("/add")
@Menu(type = "admin", subtype = "user") @Menu(type = "admin", subtype = "user")
public ModelAndView add(ModelMap map, HttpServletRequest request) { public ModelAndView add() {
return request(super.createRequestPageTempletResponse("/admin/user/add")); return request(super.createRequestPageTempletResponse("/admin/user/add"));
} }
@RequestMapping("/edit") @RequestMapping("/edit")
@Menu(type = "admin", subtype = "user") @Menu(type = "admin", subtype = "user")
public ModelAndView edit(ModelMap map, HttpServletRequest request, @Valid String id) { public ModelAndView edit(HttpServletRequest request, @Valid String id) {
ModelAndView view = request(super.createRequestPageTempletResponse("/admin/user/edit")); ModelAndView view = request(super.createRequestPageTempletResponse("/admin/user/edit"));
view.addObject("userData", userRepository.findByIdAndOrgi(id, super.getOrgiByTenantshare(request))); view.addObject("userData", userRepository.findByIdAndOrgi(id, super.getOrgiByTenantshare(request)));
return view; return view;
@ -95,7 +94,7 @@ public class UsersController extends Handler {
String msg = "admin_user_delete"; String msg = "admin_user_delete";
if (user != null) { if (user != null) {
List<UserRole> userRole = userRoleRes.findByOrgiAndUser(super.getOrgiByTenantshare(request), user); List<UserRole> userRole = userRoleRes.findByOrgiAndUser(super.getOrgiByTenantshare(request), user);
userRoleRes.delete(userRole); //删除用户的时候同时删除用户对应的 userRoleRes.deleteAll(userRole); //删除用户的时候同时删除用户对应的
user = userRepository.getOne(user.getId()); user = userRepository.getOne(user.getId());
user.setDatastatus(true); user.setDatastatus(true);
userRepository.save(user); userRepository.save(user);

View File

@ -18,19 +18,18 @@ package com.chatopera.cc.controller.api.auth;
import com.chatopera.cc.basic.MainUtils; import com.chatopera.cc.basic.MainUtils;
import com.chatopera.cc.basic.auth.AuthToken; import com.chatopera.cc.basic.auth.AuthToken;
import com.chatopera.cc.cache.Cache;
import com.chatopera.cc.controller.Handler; import com.chatopera.cc.controller.Handler;
import com.chatopera.cc.model.User; import com.chatopera.cc.model.User;
import com.chatopera.cc.model.UserRole; import com.chatopera.cc.model.UserRole;
import com.chatopera.cc.persistence.repository.UserRepository; import com.chatopera.cc.persistence.repository.UserRepository;
import com.chatopera.cc.persistence.repository.UserRoleRepository; import com.chatopera.cc.persistence.repository.UserRoleRepository;
import com.chatopera.cc.util.Menu; import com.chatopera.cc.util.Menu;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.lang.NonNull;
import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
@ -46,38 +45,30 @@ import java.util.List;
/** /**
* 账号密码登录 * 账号密码登录
*/ */
@Slf4j
@RestController @RestController
@RequestMapping("/tokens") @RequestMapping("/tokens")
@RequiredArgsConstructor
public class ApiLoginController extends Handler { public class ApiLoginController extends Handler {
private final static Logger logger = LoggerFactory.getLogger(ApiLoginController.class);
@Autowired @NonNull
private UserRepository userRepository; private final UserRepository userRepository;
@Autowired @NonNull
private UserRoleRepository userRoleRes; private final UserRoleRepository userRoleRes;
@Autowired @NonNull
private Cache cache; private final AuthToken authToken;
@Autowired
private AuthToken authToken;
/** /**
* 登录服务传入登录账号和密码 * 登录服务传入登录账号和密码
*
* @param request
* @param response
* @param username
* @param password
* @return
*/ */
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
@RequestMapping(method = RequestMethod.POST) @RequestMapping(method = RequestMethod.POST)
@Menu(type = "apps", subtype = "token", access = true) @Menu(type = "apps", subtype = "token", access = true)
public ResponseEntity login(HttpServletRequest request, HttpServletResponse response, @Valid String username, @Valid String password) { public ResponseEntity login(HttpServletResponse response, @Valid String username, @Valid String password) {
User loginUser = userRepository.findByUsernameAndPassword(username, MainUtils.md5(password)); User loginUser = userRepository.findByUsernameAndPassword(username, MainUtils.md5(password));
ResponseEntity entity = null; ResponseEntity entity;
if (loginUser != null && !StringUtils.isBlank(loginUser.getId())) { if (loginUser != null && !StringUtils.isBlank(loginUser.getId())) {
loginUser.setLogin(true); loginUser.setLogin(true);
List<UserRole> userRoleList = userRoleRes.findByOrgiAndUser(loginUser.getOrgi(), loginUser); List<UserRole> userRoleList = userRoleRes.findByOrgiAndUser(loginUser.getOrgi(), loginUser);
@ -111,7 +102,7 @@ public class ApiLoginController extends Handler {
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
@RequestMapping(method = RequestMethod.DELETE) @RequestMapping(method = RequestMethod.DELETE)
public ResponseEntity logout(HttpServletRequest request, @RequestHeader(value = "authorization") String authorization) { public ResponseEntity logout(@RequestHeader(value = "authorization") String authorization) {
authToken.deleteUserByAuth(authorization); authToken.deleteUserByAuth(authorization);
return new ResponseEntity<>(HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK);
} }

View File

@ -26,8 +26,7 @@ import org.springframework.data.jpa.repository.Query;
import java.util.List; import java.util.List;
public interface UserRoleRepository extends JpaRepository<UserRole, String> public interface UserRoleRepository extends JpaRepository<UserRole, String> {
{
Page<UserRole> findByOrgiAndRole(String orgi, Role role, Pageable paramPageable); Page<UserRole> findByOrgiAndRole(String orgi, Role role, Pageable paramPageable);
@ -35,6 +34,7 @@ public interface UserRoleRepository extends JpaRepository<UserRole, String>
List<UserRole> findByOrgiAndUser(String orgi, User user); List<UserRole> findByOrgiAndUser(String orgi, User user);
@SuppressWarnings("SpringDataRepositoryMethodReturnTypeInspection")
@Query(value = "SELECT u.user_id FROM uk_userrole u WHERE u.orgi = ?1 AND u.role_id = ?2", nativeQuery = true) @Query(value = "SELECT u.user_id FROM uk_userrole u WHERE u.orgi = ?1 AND u.role_id = ?2", nativeQuery = true)
List<String> findByOrgiAndRoleId(final String orgi, final String roleid); List<String> findByOrgiAndRoleId(final String orgi, final String roleid);