首页>代码>ssm+apache shiro实现按钮级别的网站权限控制项目实例>/SSMShiro/src/main/java/com/sharainy/contoller/UserController.java
package com.sharainy.contoller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.sharainy.pojo.Resource;
import com.sharainy.pojo.Role;
import com.sharainy.pojo.User;
import com.sharainy.service.IRoleService;
import com.sharainy.service.IUserService;

/**
 *@标题UserController
 * @作者: Sharainy
 * @创建时间: 2018-06-29 0029
 * @描述: 
 */
@Controller
@RequestMapping(value = "/admin/user")
public class UserController {
    private static final Logger logger = LoggerFactory.getLogger(UserController.class);
    @Autowired
    private IUserService userService;
    @Autowired
    private IRoleService roleService;

    @RequestMapping(value = "/list",method = RequestMethod.GET)
    public String list(Model model){
        model.addAttribute("list",userService.list());
        return "user/list";
    }

    /**
     * 跳转到添加用户的页面
     * @param model
     * @return
     */
    @RequiresPermissions("admin:*")
    @RequestMapping(value = "/add",method = RequestMethod.GET)
    public String add(Model model){
        logger.debug("跳转到添加用户的页面");
        model.addAttribute("user",new User());
        model.addAttribute("roles",roleService.list());
        return "user/add";
    }

    /**
     * 添加用户保存的方法
     * @param user
     * @param request
     * @return
     */
    @RequiresPermissions("user:add")
    @RequestMapping(value = "/add",method = RequestMethod.POST)
    public String add(User user, HttpServletRequest request){
        logger.debug("添加用户 post 方法");
        logger.debug(user.toString());
        List<Integer> roleIdList = new ArrayList<>();
        String[] roldIds = request.getParameterValues("roleId");
        for(String roleId:roldIds){
            roleIdList.add(Integer.parseInt(roleId));
        }
        userService.add(user,roleIdList);
        // 重定向到本 Controller 的 list 方法(Get 方式)
        return "redirect:list";
    }

    @ResponseBody
    @RequiresPermissions("user:update")
    @RequestMapping(value = "/updateStatus",method = RequestMethod.POST)
    public Map<String,Object> updateStatus(User user){
        User u = userService.update(user);
        Map<String,Object> result = new HashMap<>();
        if(u != null){
            result.put("success",true);
        }else {
            result.put("success",false);
            result.put("errorInfo","更新状态失败");
        }
        return result;
    }

    /**
     * 跳转到用户信息更新页面
     * @param id
     * @param model
     * @return
     */
    @RequestMapping(value = "/update/{id}",method = RequestMethod.GET)
    public String update(@PathVariable("id") Integer id,Model model){
        // 要从数据库查询对象进行回显
        User user = userService.load(id);
        model.addAttribute("user",user);
        // 所有的角色列表
        model.addAttribute("roles",roleService.list());

        /**
         * 根据用户 id 查询用户的所有角色
         */
        List<Role> hasRoles = userService.listUserRole(id);
        /**
         * 将用户的所有角色 id 添加到一个字符串中
         */
        List<Integer> rids = new ArrayList<>();
        for(Role r:hasRoles) {
            rids.add(r.getId());
        }
        // 指定用户拥有的角色信息
        model.addAttribute("hasRole", rids);
        return "user/update";
    }

    /**
     * 更新用户的信息(包括更新用户绑定的角色)
     * @param user
     * @return
     */
    @RequiresPermissions("user:update")
    @RequestMapping(value = "/update/{id}",method = RequestMethod.POST)
    public String update(User user,HttpServletRequest request){
        // // TODO: 2016/9/18 这个过程还是可以优化的,如果属性没有发生变化的地方,是不须要更新的
        logger.debug("user => " + user);
        String[] roleIds = request.getParameterValues("roleId");
        List<Integer> roleIdList = new ArrayList<>();
        for(String roleId:roleIds){
            roleIdList.add(Integer.valueOf(roleId));
        }
        userService.update(user,roleIdList);
        return "redirect:/admin/user/list";
    }

    /**
     *  根据用户 id 跳转到用户权限的列表页面
     * @return
     */
    @RequestMapping(value = "/resources/{id}",method = RequestMethod.GET)
    public String listResources(@PathVariable("id") Integer userId,Model model){
        List<Resource> resourceList = userService.listAllResource(userId);
        User user = userService.load(userId);
        model.addAttribute("resources",resourceList);
        model.addAttribute("user",user);
        return "user/resources";
    }

    /**
     * 批量删除用户
     * 1、删除用户数据
     * 2、删除用户绑定的角色数据
     * @param userIds
     * @return
     */
    @RequiresPermissions("user:delete")
    @ResponseBody
    @RequestMapping(value = "/delete",method = RequestMethod.POST)
    public Map<String,Object> delete(
            @RequestParam("userIds[]") List<Integer> userIds){
        Map<String,Object> result = new HashMap<>();
        try{
            userService.deleteUserAndRole(userIds);
            result.put("success",true);
        }catch (RuntimeException e){
            e.printStackTrace();
            result.put("success",false);
            result.put("errorInfo",e.getMessage());
        }
        return result;
    }
}
最近下载更多
sweetbox  LV10 2022年7月11日
caozongan  LV19 2022年2月16日
543666826  LV33 2021年11月20日
Seem丶君  LV3 2021年10月18日
缘------  LV9 2021年6月28日
ericxu1116  LV24 2021年6月11日
黄雨地里  LV4 2021年5月15日
缓缓归来  LV11 2021年5月5日
panbiao  LV11 2021年3月31日
jiaerkai  LV10 2020年11月29日
最近浏览更多
xuweiwowzy  LV5 1月14日
Hachi6  LV13 2023年10月11日
矿泉水  LV30 2023年8月20日
dongzhan  LV12 2023年6月30日
wiston 2023年3月30日
暂无贡献等级
一颗葡萄 2022年11月22日
暂无贡献等级
sweetbox  LV10 2022年7月11日
暂无贡献等级
huaua7676  LV30 2022年4月17日
caozongan  LV19 2022年2月16日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友