欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

简单的权限管理

程序员文章站 2022-04-26 11:45:55
...

 

     首先,在设计权限管理之前,先要对数据库进行一定的理解和设计,就论坛的模块来分析:

     游客:能够访问首页,可以进行用户注册,用户登录,找回用户密码,能查看公开帖子,相关评论,能够进入论坛的一些开放板块。

     用户:有以上游客所有的功能,在此基础上还能设置个人信息,修改密码,认证个人用户等等;能够发布自己写的帖子,查看其它用户回复的消息,删除自己的帖子,能够和论坛好友进行聊天,能够删除自己帖子的任何回复信息,大致也就是这些功能。

     管理员:能够进行用户信息的管理操作,修改用户的访问权限,设置用户的权限,设置论坛版块的开放权限,操作/审核用户提交的帖子,设计论坛模块等等,

简单的权限管理 

用户权限是多对多的关系,在数据库中是就如上图所示一样,用外键来连接约束

简单的权限管理      简单的权限管理

以上就是权限管理的游客,用户,管理员的一些相关分析;

在项目开始时要给所有页面用 Filter来过滤所有的页面,防止权限不足也能操作用户或者管理员页面。

@WebFilter("/*")
public class PermiFilter implements Filter {
	public void destroy() {
	}
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		HttpServletRequest req = (HttpServletRequest) request;
		HttpServletResponse res = (HttpServletResponse) response;
		Role role = null;
		Object user = req.getSession().getAttribute("user");
		if (user == null) {
			// 未登录状态
			role = new Role();
			// 设置权限为游客
			role.setId(1);
		} else {
			// 登录
			role = ((User) user).getRole();
		}
		// 获取访问路径
		String path = req.getRequestURI();
		path=path.replaceAll(req.getContextPath(),"");
		// 检查权限
		boolean flog = new RoleService().check(role, path);
		if (flog) {
			chain.doFilter(req, res);
		} else {
			req.setAttribute("msg", "权限不足");
			req.getRequestDispatcher("/info.jsp").forward(req, res);
		}
	}
}

在过滤所有页面后,就需要相关的权限来操作各个页面,而这些页面就需要用户登录,然后在过滤器中识别该用户有哪些权限,然后并对相关的页面进行开放访问。

@WebServlet("/UserServlet")
public class UserServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取用户名
		String name = request.getParameter("name");
		//获取密码
		String pwd = request.getParameter("pwd");
		//去数据库查该用户
		User user = new UserService().get(name,pwd);
		String msg=null;
		//用户信息不为空时
		if(user!=null) {
			//打包用户
			request.getSession().setAttribute("user",user);
			msg= "登录成功";
		}else {
			msg="登录失败";
		}
		//跳转到异常页
		request.setAttribute("msg", msg);
		//转发
		request.getRequestDispatcher("/info.jsp").forward(request, response);
    }
}

对于用户的操作也没几个功能,主要就是管理员对用户的管理功能进行操作。

      在设置用户权限的功能里面,我们要在servlet里面进行操作,先查询所有的用户信息,然后转发到一个能显示用户的jsp页面,然后通过修改按钮获取某个用户的相关信息,并在数据库中查询用户组的所有角色,并回显该用户属于什么权限,

    进行修改的时候,通过传递过来的Id来进行数据库中的操作,然后并把用户信息通过request打包到jsp页面再进行查询,回显。

//用户组权限管理
	protected void user_control(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//查看所有的用户组
		List<User> users =new UserService().getAllUser();
		request.setAttribute("users", users);
		request.getRequestDispatcher("/user_control.jsp").forward(request, response);
	}
	//查看用户所在的权限组
	protected void update_control(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String uid = request.getParameter("id");
		List<Role> roles = new RoleService().getRole();
		User getUser = new UserService().getupUser(Integer.parseInt(uid));
		request.setAttribute("roles", roles);
		request.setAttribute("getUser", getUser);
		request.setAttribute("uid", uid);
		request.getRequestDispatcher("/control_update.jsp").forward(request, response);
	}
	//更新用户组
	protected void update_control_submit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String uid = request.getParameter("uid");
		String rId = request.getParameter("rId");
		//更新
		new UserService().update_submit(Integer.parseInt(uid),Integer.parseInt(rId));
		request.setAttribute("msg", "修改成功");
		request.getRequestDispatcher("/info.jsp").forward(request, response);
	}

在用户组里,就要对每个用户对应的用户组对应的相关权限进行操作

//查询用户组
	protected void getAllPageGroup(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//查询要修改的角色对象
		String id = request.getParameter("id");
		//查询所有权限组
		List<PageGroup> pgs = new PageGroupService().getAll();
		//查询该角色的权限组
		Role role=new PageGroupService().getRole(Integer.parseInt(id));
		request.setAttribute("pgs", pgs);
		request.setAttribute("role", role);
		request.getRequestDispatcher("/user_group.jsp").forward(request, response);
	}
	//修改用户组的相关权限
	protected void updatePageGroup(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//获取一个id
		String id = request.getParameter("id");
		//获取权限组
		String[] page = request.getParameterValues("pgs");
		//更新用户组对应的权限
		new PageGroupService().updateUserPageGrup(Integer.parseInt(id),page);
		request.setAttribute("msg", "修改成功");
		request.getRequestDispatcher("/info.jsp").forward(request, response);
	}

通过查询所有的权限组对应的访问权限地址来限制用户的访问权限。

//查询权限组
	protected void getAllPage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String pageid=request.getParameter("id");
		PageGroup pagp = new PageGroupService().getPageGroup(Integer.parseInt(pageid));
//		Page page =new PageGroupService().getAllPage();
		request.setAttribute("pagp", pagp);
//		request.setAttribute("page", page);
		request.getRequestDispatcher("/supersu_pro.jsp").forward(request, response);
	}
	//删除访问权限页
	protected void deletePage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String pageid = request.getParameter("id");
		new PageGroupService().deletePage(Integer.parseInt(pageid));
		request.setAttribute("msg", "删除成功");
		request.getRequestDispatcher("/info.jsp").forward(request, response);
	}
	//添加页面的访问权限
	protected void addPage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String id = request.getParameter("id");
		String name = request.getParameter("name");
		String path = request.getParameter("path");
		Page page = new Page();
		page.setName(name);
		page.setPath(path);
		//添加页面权限
		new PageGroupService().addPage(page);
		//获取页面权限
		Page pg = new PageGroupService().selectPage(name,path);
		new PageGroupService().addPageGrup(Integer.parseInt(id),pg);
		request.setAttribute("msg", "添加成功");
		request.getRequestDispatcher("/info.jsp").forward(request, response);
	}