权限管理系统(2)


开发BusinessService

UserService


    public class UserService {

        UserDao userDao = new UserDao();

        //添加用户
        public void addUser(User user) {

            userDao.addUser(user);
        }

        //根据id查找用户
        public User findUser(String id) {
            return userDao.find(id);
        }

        //得到所有的用户
        public List<User> getAllUser() {
            return userDao.getAll();
        }

        //获取用户所有的角色
        public List<Role> getUserRole(String user_id) {
            return userDao.getRoles(user_id);
        }

        //修改用户的角色
        public void updateUserRole(User user, List<Role> roles) {

            userDao.updateRole(user, roles);
        }

    }


RoleService


    public class RoleService {

        RoleDao roleDao = new RoleDao();

        //添加角色
        public void addRole(Role role) {

            roleDao.add(role);
        }

        //根据id查找角色
        public Role findRole(String id) {
            return roleDao.find(id);
        }

        //获取所有的角色
        public List<Role> getAllRole() {
            return roleDao.getAll();
        }

        //获取角色所有的权限
        public List<Privilege> getRolePrivilege(String role_id) {
            return roleDao.getPrivileges(role_id);
        }

        //修改角色的权限
        public void updateRolePrivilege(Role role, List<Privilege> privileges) {
            roleDao.addPrivilege2Role(role, privileges);
        }
    }


PrivilegeService


    public class PrivilegeService {

        PrivilegeDao privilegeDao = new PrivilegeDao();

        //添加权限
        public void addPrivilege(Privilege privilege) {
            privilegeDao.addPrivilege(privilege);
        }

        //根据id获得权限
        public Privilege findPrivilege(String id) {
            return privilegeDao.findPrivilege(id);
        }

        //获取所有的权限
        public List<Privilege> getAllPrivileges() {
            return privilegeDao.getAllPrivileges();
        }
    }


开发Web

用户模块

添加用户

  • 提供页面界面的Servlet
        //直接跳转到显示添加用户的界面
        request.getRequestDispatcher("/WEB-INF/jsp/addUser.jsp").forward(request, response);
  • 显示页面的JSP

    <form action="AddUserController" method="post">
        <table>
            <tr>
                <td>用户名:</td>
                <td><input type="text" name="username"></td>
            </tr>
            <tr>
                <td>密码:</td>
                <td><input type="password" name="password"></td>
            </tr>
            <tr>
                <td><input type="submit" value="添加用户"></td>
                <td><input type="reset" value="重置"></td>
            </tr>
        </table>
    </form>
  • 处理表单数据的Servlet

        //得到客户端传递进来的参数
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        User user = new User();
        user.setId(WebUtils.makeId());
        user.setUsername(username);
        user.setPassword(password);

        try {
            UserService userService = new UserService();
            userService.addUser(user);

            request.setAttribute("message","添加用户成功!");

        } catch (Exception e) {
            request.setAttribute("message", "添加用户失败!");
            throw new RuntimeException("在Controller添加客户失败");
        }
        request.getRequestDispatcher("/message.jsp").forward(request,response);

    }
  • 效果:

《权限管理系统(2)》

显示用户

  • 提供页面界面的Servlet

        UserService userService = new UserService();
        List<User> list = userService.getAllUser();
        request.setAttribute("list", list);

        //跳转到显示页面
        request.getRequestDispatcher("/WEB-INF/jsp/LookUser.jsp").forward(request, response);
  • 显示页面JSP

<c:if test="${empty(list)}">
    对不起,暂时没有任何客户
</c:if>

<c:if test="${!empty(list)}">
    <table border="1px">
        <tr>
            <td>用户名</td>
            <td>密码</td>
        </tr>
        <c:forEach items="${list}" var="user">
            <tr>
                <td>${user.username}</td>
                <td>${user.password}</td>
            </tr>
        </c:forEach>
    </table>

</c:if>
  • 效果:

《权限管理系统(2)》

为用户添加角色

在显示用户的基础上,应该添加为用户授权角色的超链接。


    <table border="1px">
        <tr>
            <td>用户名</td>
            <td>密码</td>
            <td>操作</td>
        </tr>
        <c:forEach items="${list}" var="user">
            <tr>
                <td>${user.username}</td>
                <td>${user.password}</td>
                <td>
                    <a href="${pageContext.request.contextPath}/LookUserRole?user_id=${user.id}">
                        为用户授权角色
                    </a>
                    <a href="#">修改用户</a>
                    <a href="#">删除用户</a>

                </td>
            </tr>
        </c:forEach>
    </table>
  • 效果:

《权限管理系统(2)》

  • 处理显示授权页面的Servlet

        //得到客户端传递过来的user_id
        String user_id = request.getParameter("user_id");

        //获取该用户所有的角色
        UserService userService = new UserService();
        List<Role> userRoles = userService.getUserRole(user_id);

        //得到全部的角色
        RoleService roleService = new RoleService();
        List<Role> allRoles = roleService.getAllRole();

        //为用户授权的JSP页面也应该显示用户的信息,所以把User对象也传递过去给JSP页面
        User user = userService.findUser(user_id);

        request.setAttribute("user", user);
        request.setAttribute("userRoles", userRoles);
        request.setAttribute("allRoles", allRoles);

        //跳转到显示页面
        request.getRequestDispatcher("/WEB-INF/jsp/LookUserRole.jsp").forward(request, response);
  • 授权页面JSP

<table border="1px">
    <tr>
        <td>当前用户名称</td>
        <td>${user.username}</td>
    </tr>

    <tr>
        <td>当前用户所拥有的角色</td>
        <td>
            <c:forEach items="${userRoles}" var="userRole">
                ${userRole.name}
            </c:forEach>
        </td>
    </tr>

    <tr>
        <td>当前系统所拥有的角色</td>
        <td>
            <form method="post" action="${pageContext.request.contextPath}/AddUserRole">

                <%--要为用户添加角色,需要知道是哪一个用户,通过hidden传递过去用户的id--%>
                <input type="hidden" name="user_id" value="${user.id}">

                <c:forEach items="${allRoles}" var="roles">
                    <input type="checkbox" name="role_id" value="${roles.id}">${roles.name}
                </c:forEach>

                <input type="submit" value="添加角色!">
            </form>
        </td>
    </tr>

</table>
  • 效果:

《权限管理系统(2)》

  • 处理表单数据并为用户添加角色的Servlet

        //得到传递进来的role_id
        String[] ids = request.getParameterValues("role_id");

        try {
            //得到想要修改哪个用户的id
            String user_id = request.getParameter("user_id");

            //通过id获取得到User对象
            UserService userService = new UserService();
            User user = userService.findUser(user_id);

            //通过id获取得到Role对象,再把对象用List集合装载起来
            RoleService roleService = new RoleService();
            List<Role> list = new ArrayList<>();
            for (String id : ids) {
                Role role = roleService.findRole(id);
                list.add(role);
            }

            //更新用户所拥有的角色
            userService.updateUserRole(user, list);

            request.setAttribute("message","添加角色成功!");

        } catch (Exception e) {
            e.printStackTrace();
            request.setAttribute("message","添加角色失败!");
        }
        request.getRequestDispatcher("/message.jsp").forward(request,response);
  • 效果:

《权限管理系统(2)》


角色模块

添加角色

  • 提供添加角色页面的Servlet

        //直接跳转到jsp页面即可
        request.getRequestDispatcher("WEB-INF/jsp/AddRole.jsp").forward(request, response);
  • 显示页面JSP

    <form action="${pageContext.request.contextPath}/AddRoleController" method="post">
        <table border="1px">
            <tr>
                <td>角色名称</td>
                <td><input type="text" name="name"></td>
            </tr>
            <tr>
                <td>详细描述</td>
                <td><textarea name="description"  cols="30" rows="10"></textarea></td>
            </tr>

            <tr>
                <td>
                    <input type="submit" value="添加角色">
                </td>
            </tr>
        </table>

    </form>
  • 处理表单数据并添加角色的Servlet

        //得到客户端带过来的数据
        String name = request.getParameter("name");
        String description = request.getParameter("description");

        try {
            //创建对象并封装数据
            Role role = new Role();
            role.setId(WebUtils.makeId());
            role.setName(name);
            role.setDescription(description);

            //调用Service方法,完成功能
            RoleService roleService = new RoleService();
            roleService.addRole(role);

            request.setAttribute("message","添加角色成功!");
        } catch (Exception e) {
            request.setAttribute("message","添加角色失败!");
            e.printStackTrace();
        }

        request.getRequestDispatcher("/message.jsp").forward(request, response);
  • 效果:

《权限管理系统(2)》

查看所有的角色

  • 提供页面的Servlet

        //得到所有的角色
        RoleService roleService = new RoleService();
        List<Role> list = roleService.getAllRole();

        request.setAttribute("list", list);
        request.getRequestDispatcher("/WEB-INF/jsp/LookRoles.jsp").forward(request, response);
  • 显示页面JSP

    <c:if test="${empty(list)}">
        您还没有任何角色,请添加!
    </c:if>

    <c:if test="${!empty(list)}">
        <table border="1px">
            <tr>
                <td>角色名称</td>
                <td>描述</td>
            </tr>

            <c:forEach items="${list}" var="role">
                <tr>
                    <td>${role.name}</td>
                    <td>${role.description}</td>
                </tr>
            </c:forEach>
        </table>

    </c:if>
  • 效果

《权限管理系统(2)》

为角色授权

与上面是类似的,我们要在查看角色的时候,添加授权的功能!


        <c:forEach items="${list}" var="role">
            <tr>
                <td>${role.name}</td>
                <td>${role.description}</td>
                <td>
                    <a href="${pageContext.request.contextPath}/LookRolePrivilege?role_id=${role.id}">
                        为角色授权
                    </a>
                    <a href="#">删除角色</a>
                    <a href="#">修改角色</a>
                </td>
            </tr>
        </c:forEach>
  • 效果:

《权限管理系统(2)》

  • 提供显示权利页面的Servlet

        //得到浏览器想要查看的角色id
        String role_id = request.getParameter("role_id");
        RoleService roleService = new RoleService();

        //根据id获取得到Role对象
        Role role = roleService.findRole(role_id);

        //得到当前角色所有的权利
        List<Privilege> rolePrivilege = roleService.getRolePrivilege(role_id);

        //得到系统所有的权利
        PrivilegeService privilegeService = new PrivilegeService();
        List<Privilege> allPrivilege = privilegeService.getAllPrivileges();

        request.setAttribute("role", role);
        request.setAttribute("rolePrivilege", rolePrivilege);
        request.setAttribute("allPrivilege", allPrivilege);

        //跳转到显示页面
        request.getRequestDispatcher("/WEB-INF/jsp/LookRolePrivilege.jsp").forward(request, response);
  • 显示页面JSP

    <table border="1px">
        <tr>
            <td>角色名称</td>
            <td>${role.name}</td>
        </tr>

        <tr>
            <td>当前角色拥有的权利</td>
            <td>
                <c:forEach items="${rolePrivilege}" var="privi">
                    ${privi.name}
                </c:forEach>
            </td>
        </tr>

        <tr>
            <td>系统拥有的所有权利</td>
            <td>
                <form action="${pageContext.request.contextPath}/AddRolePrivilegeController" method="post">
                    <%--让服务器知道要修改哪一个用户,就要把用户的id传递过去--%>
                    <input type="hidden" name="role_id" value="${role.id}">

                    <c:forEach items="${allPrivilege}" var="privileges">
                        <input type="checkbox" name="privilege" value="${privileges.id}">${privileges.name}
                    </c:forEach>
                    <input type="submit" value="添加权利">
                </form>
            </td>
        </tr>
    </table>
  • 效果:

《权限管理系统(2)》

点赞