package cc.mrbird.febs.system.controller; import cc.mrbird.febs.common.authentication.ShiroHelper; import cc.mrbird.febs.common.controller.BaseController; import cc.mrbird.febs.common.entity.FebsConstant; import cc.mrbird.febs.common.utils.DateUtil; import cc.mrbird.febs.common.utils.FebsUtil; import cc.mrbird.febs.system.entity.User; import cc.mrbird.febs.system.service.IUserDataPermissionService; import cc.mrbird.febs.system.service.IUserService; import lombok.RequiredArgsConstructor; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.session.ExpiredSessionException; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; /** * @author MrBird */ @Controller("systemView") @RequiredArgsConstructor public class ViewController extends BaseController { private final IUserService userService; private final ShiroHelper shiroHelper; private final IUserDataPermissionService userDataPermissionService; @GetMapping("login") @ResponseBody public Object login(HttpServletRequest request) { if (FebsUtil.isAjaxRequest(request)) { throw new ExpiredSessionException(); } else { ModelAndView mav = new ModelAndView(); mav.setViewName(FebsUtil.view("login")); return mav; } } @GetMapping("unauthorized") public String unauthorized() { return FebsUtil.view("error/403"); } @GetMapping("/") public String redirectIndex() { return "redirect:/index"; } @GetMapping("index") public String index(Model model) { AuthorizationInfo authorizationInfo = shiroHelper.getCurrentUserAuthorizationInfo(); User user = super.getCurrentUser(); User currentUserDetail = userService.findByName(user.getUsername()); currentUserDetail.setPassword("It's a secret"); model.addAttribute("user", currentUserDetail); model.addAttribute("permissions", authorizationInfo.getStringPermissions()); model.addAttribute("roles", authorizationInfo.getRoles()); return "index"; } @GetMapping(FebsConstant.VIEW_PREFIX + "layout") public String layout() { return FebsUtil.view("layout"); } @GetMapping(FebsConstant.VIEW_PREFIX + "password/update") public String passwordUpdate() { return FebsUtil.view("system/user/passwordUpdate"); } @GetMapping(FebsConstant.VIEW_PREFIX + "user/profile") public String userProfile() { return FebsUtil.view("system/user/userProfile"); } @GetMapping(FebsConstant.VIEW_PREFIX + "user/avatar") public String userAvatar() { return FebsUtil.view("system/user/avatar"); } @GetMapping(FebsConstant.VIEW_PREFIX + "user/profile/update") public String profileUpdate() { return FebsUtil.view("system/user/profileUpdate"); } @GetMapping(FebsConstant.VIEW_PREFIX + "system/user") @RequiresPermissions("user:view") public String systemUser() { return FebsUtil.view("system/user/user"); } @GetMapping(FebsConstant.VIEW_PREFIX + "system/user/add") @RequiresPermissions("user:add") public String systemUserAdd() { return FebsUtil.view("system/user/userAdd"); } @GetMapping(FebsConstant.VIEW_PREFIX + "system/user/detail/{username}") @RequiresPermissions("user:view") public String systemUserDetail(@PathVariable String username, Model model) { resolveUserModel(username, model, true); return FebsUtil.view("system/user/userDetail"); } @GetMapping(FebsConstant.VIEW_PREFIX + "system/user/update/{username}") @RequiresPermissions("user:update") public String systemUserUpdate(@PathVariable String username, Model model) { resolveUserModel(username, model, false); return FebsUtil.view("system/user/userUpdate"); } @GetMapping(FebsConstant.VIEW_PREFIX + "system/role") @RequiresPermissions("role:view") public String systemRole() { return FebsUtil.view("system/role/role"); } @GetMapping(FebsConstant.VIEW_PREFIX + "system/menu") @RequiresPermissions("menu:view") public String systemMenu() { return FebsUtil.view("system/menu/menu"); } @GetMapping(FebsConstant.VIEW_PREFIX + "system/dept") @RequiresPermissions("dept:view") public String systemDept() { return FebsUtil.view("system/dept/dept"); } @RequestMapping(FebsConstant.VIEW_PREFIX + "index") public String pageIndex() { return FebsUtil.view("index"); } @GetMapping(FebsConstant.VIEW_PREFIX + "404") public String error404() { return FebsUtil.view("error/404"); } @GetMapping(FebsConstant.VIEW_PREFIX + "403") public String error403() { return FebsUtil.view("error/403"); } @GetMapping(FebsConstant.VIEW_PREFIX + "500") public String error500() { return FebsUtil.view("error/500"); } private void resolveUserModel(String username, Model model, Boolean transform) { User user = userService.findByName(username); String deptIds = userDataPermissionService.findByUserId(String.valueOf(user.getUserId())); user.setDeptIds(deptIds); model.addAttribute("user", user); if (transform) { String sex = user.getSex(); if (User.SEX_MALE.equals(sex)) { user.setSex("男"); } else if (User.SEX_FEMALE.equals(sex)) { user.setSex("女"); } else { user.setSex("保密"); } } if (user.getLastLoginTime() != null) { model.addAttribute("lastLoginTime", DateUtil.getDateFormat(user.getLastLoginTime(), DateUtil.FULL_TIME_SPLIT_PATTERN)); } } }