简单的权限管理

 

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

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

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

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

 

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

      

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

在项目开始时要给所有页面用 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);
	}

 

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

By丶小辉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值