Java-中软-5 ssm——用户权限控制&用户注销

用户权限管理
数据库
tb_user
在这里插入图片描述
tb_role
在这里插入图片描述
user_role
在这里插入图片描述
实现
Role:实体类,存储角色相关信息

public class Role {
    private int id;
    private String rolename;
    private String roledesc;
    public Role() {
    }
    public Role(int id, String rolename, String roledesc) {
        this.id = id;
        this.rolename = rolename;
        this.roledesc = roledesc;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getRolename() {
        return rolename;
    }
    public void setRolename(String rolename) {
        this.rolename = rolename;
    }
    public String getRoledesc() {
        return roledesc;
    }
    public void setRoledesc(String roledesc) {
        this.roledesc = roledesc;
    }
    @Override
    public String toString() {
        return "Role{" +
                "id=" + id +
                ", rolename='" + rolename + '\'' +
                ", roledesc='" + roledesc + '\'' +
                '}';
    }
}

UserRole:实体类,存储用户角色相关信息

public class UserRole {
    private int userId;
    private int roleId;
    public int getUserId() {
        return userId;
    }
    public void setUserId(int userId) {
        this.userId = userId;
    }
    public int getRoleId() {
        return roleId;
    }
    public void setRoleId(int roleId) {
        this.roleId = roleId;
    }
    @Override
    public String toString() {
        return "UserRole{" +
                "userId=" + userId +
                ", roleId=" + roleId +
                '}';
    }
}

根据用户的角色,显示不同的主界面(有/无角色管理模块)&添加角色
1、在IRoleDao中创建相应的接口

public interface IRoleDao {
    List<Integer> findRoleIdsByUserId(int id);
    List<Role> findNotRoleByUserId(int id);
}

2、在RoleMapper中实现Dao接口,也就是对数据库进行操作

<mapper namespace="com.summer.dao.IRoleDao">
    <select id="findRoleIdsByUserId" parameterType="int" resultType="int">
        select roleId from user_role where userId=#{id}
    </select>
    <select id="findNotRoleByUserId" parameterType="int" resultType="role">
        select * from tb_role where id not in (select roleId from user_role where userId=#{id});
    </select>
</mapper>

3、在IRoleService中声明服务的接口

public interface IRoleService {
    List<Integer> findRoleByUserId(int id);    
    List<Role> findNotRoleByUserId(int id);
    void addRole(List<Integer> ids,int userId);
}

4、在UserServiceImpl中实现IUserService中声明的接口

    @Override
    public int login(String username, String password) {
        User user = userDao.findUserByUsername(username);
        if(user!=null&&user.getPassword().equals(password)){
            return user.getId();
        }
        return -1;
    }

在RoleServiceImpl中实现IRoleService中声明的接口

@Service
public class RoleServiceImpl implements IRoleService {
    @Autowired
    private IRoleDao roleDao;
    @Override
    public List<Integer> findRoleByUserId(int id) {
        return roleDao.findRoleIdsByUserId(id);
    }
    @Override
    public List<Role> findNotRoleByUserId(int id) {
        return roleDao.findNotRoleByUserId(id);
    }
    @Override
    public void addRole(List<Integer> ids,int userId) {
        for(int i:ids){
            UserRole userRole=new UserRole();
            userRole.setRoleId(i);
            userRole.setUserId(userId);
        }
    }
}

5、在UserController中控制不同页面的跳转。
根据用户的角色,显示不同的主界面(有/无角色管理模块)

    @Autowired
    private IRoleService roleService;
    @RequestMapping("login.do")
    public ModelAndView login(User user, HttpSession session){
        int  id= userService.login(user.getUsername(),user.getPassword());
        ModelAndView modelAndView=new ModelAndView();
        if(id!=-1){
            List<Integer> roleIds=roleService.findRoleByUserId(id);
            session.setAttribute("user",user);
            session.setAttribute("roleIds",roleIds);
            modelAndView.setViewName("main");
        }else {
            modelAndView.setViewName("../failer");
        }
        return modelAndView;
    }

添加角色

    @RequestMapping("toAddRole.do")
    public ModelAndView toAddRole(int id){
        List<Role> roleList=roleService.findNotRoleByUserId(id);
        ModelAndView modelAndView=new ModelAndView();
        modelAndView.addObject("roles",roleList);
        modelAndView.setViewName("user-role-add");
        modelAndView.addObject("id",id);
        return modelAndView;
    }
    @RequestMapping("addRole.do")
    public String addRole(String roleIds,String userId){
        String[] strs = roleIds.split(",");
        List<Integer> ids=new ArrayList<>();
        for(String s:strs){
            ids.add(Integer.parseInt(s));
        }
        roleService.addRole(ids,Integer.parseInt(userId));
        return "redirect:findAll.do";
    }

界面
aside.jsp:判断用户是否为管理员
如果用户是管理员,他能进行角色管理;
否则,他不能进行角色管理

                    <%
						List<Integer> roleIds= (List<Integer>) session.getAttribute("roleIds");
						if(roleIds.contains(1)){
					%>
					<li id="system-setting1"><a
						href="#"> <i
							class="fa fa-circle-o"></i> 角色管理
					</a></li>
					<%
						}
					%>

user-role-add.jsp:添加角色

        function addRoles() {
			var checkNum=$("input[name='roleId']:checked").length;
			if(checkNum==0){
				alert("请至少选择1个角色添加");
				return;
			}
			if(confirm("你确认要添加这些角色吗?")){

				var roleList=new Array();
				$("input[name='roleId']:checked").each(
						function () {
							roleList.push($(this).val())
						}
				);
				var userId=$("input[name='userId']").val();
				alert(userId);
				location.href="/user/addRole.do?roleIds="+roleList.toString()+"&userId="+userId;
			}
		}

用户注销
实现
在UserController中控制不同页面的跳转。
点击注销,移除session的user属性,用户不再是登录状态,并跳转到登录界面

    @RequestMapping("logout.do")
    public String logout(HttpSession session){
        session.removeAttribute("user");
        return "../login";
    }

界面
header.jsp:注销

                            <div class="pull-right">
								<a href="/user/logout.do"
									class="btn btn-default btn-flat">注销</a>
							</div>



管理员登录
在这里插入图片描述
普通用户登录
在这里插入图片描述
添加角色
在这里插入图片描述
注销:跳转到登录界面
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43296415/article/details/107585067