package com.jmfy.controller; import com.jmfy.WebSecurityConfig; import com.jmfy.dao.CUserDao; import com.jmfy.dao.ChannelInfoDao; import com.jmfy.model.CAdmin; import com.jmfy.model.ChannelInfo; import com.jmfy.model.vo.IdentityEnum; import com.jmfy.model.vo.IdentityVo; import com.jmfy.model.vo.PowersEnum; import com.jmfy.model.vo.PowersVo; import com.jmfy.utils.DateUtil; import com.jmfy.utils.JsonUtil; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.*; import javax.annotation.PostConstruct; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.*; import java.util.stream.Collectors; /** * Created by huangds on 2017/10/24. */ @Controller public class LoginController { @Resource private CUserDao cUserDao; @Resource private ChannelInfoDao channelInfoDao; static final String ROOT = "root"; @GetMapping("/") public String index(){ return "index"; } @GetMapping("/login") public String login(){ return "login"; } /** * 欢迎界面 * @return */ @RequestMapping(value = "/welcome", method = {RequestMethod.POST, RequestMethod.GET}) public String welcome() { return "welcome"; } /** * 登陆验证 * @param userName * @param session * @param map * @return * @throws Exception */ @RequestMapping(value = "/loginVerify", method = {RequestMethod.POST, RequestMethod.GET}) public String loginVerify(String userName,String password,HttpSession session,ModelMap map) throws Exception { boolean verify = false; CAdmin admin = cUserDao.findAdmin(userName); if (admin != null){ // 验证密码 if (password.equals(admin.getPassword())) { rootAccount(admin); verify = true; } } // 登陆成功,并添加session if (verify) { session.setAttribute(WebSecurityConfig.SESSION_KEY, userName); map.put("admin",admin); map.put("sidebar",PowersVo.create2(admin.getPowers())); return "index"; } else { return "redirect:/login"; } } /** * 退出登陆 * @param session * @return */ @GetMapping("/logout") public String logout(HttpSession session){ session.removeAttribute(WebSecurityConfig.SESSION_KEY); return "redirect:/login"; } /** * root账号特殊处理,登陆或注册获取全部权限 * @param admin */ private void rootAccount(CAdmin admin) throws Exception { if (ROOT.equals(admin.getUserName())){ // 权限 Set allPowers = PowersEnum.getAllPowers(); // 渠道包 List infoList = channelInfoDao.getChannelInfoList(); Set collect = infoList.stream().map(ChannelInfo::getId).collect(Collectors.toSet()); // 赋予root账号全部权限 admin.setPowers(allPowers); admin.setChannelPack(collect); // 赋予root账号总管理员权限 admin.setIdentity(IdentityEnum.SYSTEM_ADMIN.getId()); cUserDao.updateUser(admin); } } /** * 注册 * @param session * @param request * @return * 1: 成功 * 0: 账号已存在 * 2: session缓存异常 * 3: 没有创建账号的身份或者权限 * @throws Exception */ @PostMapping("/register") public @ResponseBody int register(HttpSession session, HttpServletRequest request) throws Exception { // 当前账号 String account = (String) session.getAttribute(WebSecurityConfig.SESSION_KEY); if (account == null){ return 2; } // 参数 HashMap parameterMap = JsonUtil.getInstence().getParameterMap(request); String userName = parameterMap.get("userName"); String password = parameterMap.get("password"); String identity = parameterMap.get("identity"); // 验证账号名是否存在 CAdmin admin = cUserDao.findAdmin(userName); if (admin != null){ return 0; } // 是否拥有创建账号的身份和权限 CAdmin cUser = cUserDao.findAdmin(account); if (cUser.getIdentity() == 2 || !cUser.getPowers().contains(PowersEnum.ADD_ACCOUNT.getId())){ return 3; } admin = new CAdmin(userName,password,Integer.parseInt(identity)); admin.setCreateTime(DateUtil.nowString()); // 注册,入库 cUserDao.registerAdmin(admin); // 添加子账号 cUser.getSubAccount().add(userName); cUserDao.updateUser(cUser); // root账号处理 rootAccount(admin); return 1; } /** * 注册初始化 * @return * 1: 成功 * 0: 账号已存在 * 2: session缓存异常 * 3: 没有创建账号的身份或者权限 * @throws Exception */ @PostConstruct public void registerInit(){ try { // 验证账号名是否存在 CAdmin admin = cUserDao.findAdmin(ROOT); if (admin != null){ return; } // 初始化 admin = new CAdmin(); admin.setUserName(ROOT); admin.setPassword("123456"); admin.setCreateTime(DateUtil.nowString()); // root账号处理 rootAccount(admin); // 注册,入库 cUserDao.registerAdmin(admin); System.out.println("============root账号初始化完成"); }catch (Exception e){ e.printStackTrace(); } } /** * 获取用户列表 * @param map * @return * @throws Exception */ @RequestMapping(value = "/findMemberList", method = {RequestMethod.POST, RequestMethod.GET}) public String findMemberList(ModelMap map,HttpSession session) throws Exception { List adminList = new ArrayList<>(); String account = (String) session.getAttribute(WebSecurityConfig.SESSION_KEY); // root账号可以查看全部用户 if (ROOT.equals(account)){ adminList = cUserDao.findAdminList(); } else { CAdmin admin = cUserDao.findAdmin(account); if (admin != null){ // 查找账号,获取子账号列表 Iterator iterator = admin.getSubAccount().iterator(); while (iterator.hasNext()){ String next = iterator.next(); CAdmin admin1 = cUserDao.findAdmin(next); // 找不到的删除,可能是被root账号删掉了 if (admin1 == null){ iterator.remove(); continue; } adminList.add(admin1); } } } map.addAttribute("adminList",adminList); return "member-list"; } /** * 删除用户 * @param request * @return * 1: 成功 * 0: 用户不存在 * 2: 权限验证失败 * @throws Exception */ @RequestMapping(value = "/deleteUser", method = {RequestMethod.POST, RequestMethod.GET}) public @ResponseBody int deleteUser(HttpServletRequest request) throws Exception { HashMap parameterMap = JsonUtil.getInstence().getParameterMap(request); String id = parameterMap.get("id"); // 查找用户是否存在 CAdmin adminById = cUserDao.findAdminById(id); if (adminById == null || ROOT.equals(adminById.getUserName())) { return 0; } // 权限验证 String userName = (String) request.getSession().getAttribute("username"); CAdmin cAdmin = cUserDao.findAdmin(userName); if (cAdmin == null){ return 2; } // 非root账号操作 if (!ROOT.equals(userName)){ if (!cAdmin.getSubAccount().contains(adminById.getUserName())){ return 2; } // 删除子账号 cAdmin.getSubAccount().remove(adminById.getUserName()); cUserDao.updateUser(cAdmin); } // 删除用户 cUserDao.delUser(adminById); return 1; } /** * 修改用户权限 * @param request * @return * 0: 用户找不到 * 1: 成功 * 2: root账号不能修改 * @throws Exception */ @RequestMapping(value = "/updateUserPower", method = {RequestMethod.POST, RequestMethod.GET}) public @ResponseBody int updateUserPower(HttpServletRequest request) throws Exception { HashMap parameterMap = JsonUtil.getInstence().getParameterMap(request); String id = parameterMap.get("id"); String[] powers = request.getParameterValues("power[]"); // 查找用户 CAdmin cAdmin = cUserDao.findAdminById(id); if (cAdmin == null){ return 0; } // 系统管理员账号不允许修改权限,默认拥有全部权限 if (cAdmin.getUserName().equals(ROOT)){ return 2; } TreeSet set = new TreeSet<>(); if (powers != null){ // string数组转treeSet Arrays.stream(powers).forEach(v->set.add(Integer.valueOf(v))); } cAdmin.setPowers(set); // 修改 cUserDao.updateUser(cAdmin); return 1; } /** * 修改用户权限 * @param request * @return * 0: 用户找不到 * 1: 成功 * 2: root账号不能修改 * @throws Exception */ @RequestMapping(value = "/updateUserChannelPack", method = {RequestMethod.POST, RequestMethod.GET}) public @ResponseBody int updateUserChannelPack(HttpServletRequest request) throws Exception { HashMap parameterMap = JsonUtil.getInstence().getParameterMap(request); String id = parameterMap.get("id"); String[] packs = request.getParameterValues("pack[]"); // 查找用户 CAdmin cAdmin = cUserDao.findAdminById(id); if (cAdmin == null){ return 0; } // 系统管理员账号不允许修改权限,默认拥有全部权限 if (cAdmin.getUserName().equals(ROOT)){ return 2; } TreeSet set = new TreeSet<>(); if (packs != null){ // string数组转treeSet set.addAll(Arrays.asList(packs)); } cAdmin.setChannelPack(set); // 修改 cUserDao.updateUser(cAdmin); return 1; } /** * 获取用户权限 * @param map * @param request * @return * @throws Exception */ @RequestMapping(value ="/getUserPower",method = {RequestMethod.POST, RequestMethod.GET}) public String getUserPower(ModelMap map,HttpServletRequest request) throws Exception { HashMap parameterMap = JsonUtil.getInstence().getParameterMap(request); String id = parameterMap.get("id"); String userName = (String) request.getSession().getAttribute("username"); CAdmin admin = cUserDao.findAdmin(userName); CAdmin cAdmin = cUserDao.findAdminById(id); map.addAttribute("id",id); // 赋予者的权限列表 map.addAttribute("powersMap", PowersVo.create(admin.getPowers())); // 被赋予者的权限列表 map.addAttribute("powersMap2", cAdmin.getPowers()); return "permission-setting"; } /** * 获取用户渠道包权限 * @param map * @param request * @return * @throws Exception */ @RequestMapping(value ="/getUserChannelPack",method = {RequestMethod.POST, RequestMethod.GET}) public String getUserChannelPack(ModelMap map,HttpServletRequest request) throws Exception { HashMap parameterMap = JsonUtil.getInstence().getParameterMap(request); String id = parameterMap.get("id"); map.addAttribute("id",id); // 赋予者的权限列表 String userName = (String) request.getSession().getAttribute("username"); CAdmin admin = cUserDao.findAdmin(userName); List ids = channelInfoDao.getChannelInfoListByIds(admin.getChannelPack()); map.addAttribute("channelPack", ids); // 被赋予者的权限列表 CAdmin cAdmin = cUserDao.findAdminById(id); List ids1 = channelInfoDao.getChannelInfoListByIds(cAdmin.getChannelPack()); request.setAttribute("channelPack2", ids1); return "channelPack-setting"; } /** * 修改密码 * @param request * @return * 1:成功 * @throws Exception */ @RequestMapping(value = "/resetPassword",method = {RequestMethod.POST, RequestMethod.GET}) public @ResponseBody int resetPassword(HttpServletRequest request) throws Exception{ HashMap parameterMap = JsonUtil.getInstence().getParameterMap(request); String id = parameterMap.get("id"); CAdmin admin = cUserDao.findAdminById(id); admin.setPassword("123456"); cUserDao.updateUser(admin); return 1; } /** * 验证是否可以使用添加账号功能 * @param session * @return * 0: 失败,权限不足 * 1: 成功 * @throws Exception */ @RequestMapping(value = "/verifyAddAdmin",method = {RequestMethod.POST, RequestMethod.GET}) public @ResponseBody int verifyAddAdmin(HttpSession session) throws Exception{ String account = (String) session.getAttribute(WebSecurityConfig.SESSION_KEY); CAdmin admin = cUserDao.findAdmin(account); if (admin == null || admin.getIdentity() == IdentityEnum.GENERAL_ACCOUNT.getId()){ return 0; } return 1; } /** * 添加用户 * @param map * @param session * @return * @throws Exception */ @RequestMapping(value = "/addAdmin",method = {RequestMethod.POST, RequestMethod.GET}) public String addAdmin(ModelMap map,HttpSession session) throws Exception{ String account = (String) session.getAttribute(WebSecurityConfig.SESSION_KEY); CAdmin admin = cUserDao.findAdmin(account); List list = IdentityVo.create(admin.getIdentity()); map.addAttribute("identityList",list); return "member-add"; } }