zoukankan      html  css  js  c++  java
  • 【JavaWeb项目】一个众筹网站的开发(六)后台用户权限控制

    登陆成功进入控制面板后

    • 左侧的菜单是共同的元素,抽取出来做静态包含
    • 要求必须是按照不同的用户得到不同的菜单
    • 用户做了权限限制,哪个用户能操作哪些内容(链接、按钮、内容)

    一、RBAC权限模型

    权限管理是大部分软件系统都会涉及的,而且权限管理的需求本质往往是一样的,不同的角色拥有不同的权限,只要你充当了某个角色,你就拥有了相对应的功能。

      RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色域权限进行关联。简单而言,一个用户拥有若干角色,每个角色拥有若干权限,这样就形成了“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限(功能)之间,一般是多对多的关系。
              用户:每个人都是一个用户;
              角色:公司(职务);系统(角色):如,管理员,会员,项目经理...
              权限:能操作哪些东西;
              
              举例: 我,秦始皇,钱;
                        我是谁?leifengyang(用户)
                        来到公司;职务 :讲师(角色)
                        能干什么?:  讲课,给学生解决问题;(权限)
             
              用户-----角色;(多对多)  一个用户有很多角色;一个角色下也是很多用户;    
              用户---用户_角色中间表---角色
              角色----权限(菜单)(多对多);一个角色能操作很多菜单;一个菜单很多角色都能操作
              角色(用户身份)---角色_权限_中间表---权限(菜单)
             
              RBAC:基于角色
              用户---(角色)---权限:用户如果直接对应权限,同一类的用户他们操作的菜单都一样,我们并没有将共同因素抽取出来,如果有100万个用户,每个用户都有很多权限,用户和权限直接对应,中              间表非常庞大臃肿
                   直接对应;
                        layerui(弹出层插件)
     

    扩展模型

     RBAC0

    核心级别,其他级别都建立在该级别上

    RBAC1

    进行了角色的分层,角色有上下级关系

     RBAC2基于RBAC0,进行了角色的访问控制

     RBAC3

    最全面的权限管理,基于RBAC0的基础上,将RBAC1和RBAC2进行了整合

    二、ztree

    zTree 是一个依靠 jQuery 实现的多功能 “树插件”。优异的性能、灵活的配置、多种功能的组合是 zTree 最大优点

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title></title>
            <script type="text/javascript" src="js/jquery-3.2.1.min.js"></script>
            <script type="text/javascript" src="zTree_v3-3.5.28/js/jquery.ztree.all.js"></script>
            <link rel="stylesheet" href="zTree_v3-3.5.28/css/zTreeStyle/zTreeStyle.css" />
        </head>
        <body>
            <h1>树形结构</h1>
            <ul id="myztree" class="ztree"></ul>
        </body>
        <script>
            //ztree的一些设置
            var setting = {
                data: {
                    simpleData:{
                        enable: true
                    }
                }
            };
            
            var zNodes =[
                {id:1, pId:0, name:"系统权限菜单", open:true},
                {id:2, pId:1, name:"控制面板"},
                {id:3, pId:1, name:"消息管理"},
                {id:4, pId:1, name:"权限管理"},
                {id:5, pId:4, name:"用户管理"},
                {id:6, pId:4, name:"角色维护"},
                {id:7, pId:4, name:"许可维护"},
            ];
            $(function(){
                $.fn.zTree.init($("#myztree"), setting, zNodes);
            })
        </script>
    </html>

    三、处理重定向

     注册完,进入控制面板,刷新后会重新提交表单

    要用重定向

    重定向的main.jsp在WEB-INF的manager文件夹下

    需要写一个处理重定向请求的控制器

    package com.atguigu.scw.manager.controller;
    
    import javax.servlet.http.HttpSession;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import com.atguigu.scw.manager.constant.Constants;
    
    @Controller
    public class DispatcherController {
       // 伪静态化效果
        @RequestMapping(value = "/main.html")
        public String toMainPage(HttpSession session) {
            // 校验,只有登陆的用户才可以到main
            // 判断session中是否有这个用户,如果没有去登录页面
            Object object = session.getAttribute(Constants.LOGIN_USER);
            if (object == null) {
                // 用户没登陆
                return "redirect:/login.jsp";
            }else {
                // 用户登陆
                return "manager/main";
            }
            
        }
    }

    UserController中的return "manager/main";均改为return "redirect:/main.html";

    package com.atguigu.scw.manager.controller.permission;
    
    import javax.servlet.http.HttpSession;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import com.atguigu.scw.manager.bean.TUser;
    import com.atguigu.scw.manager.constant.Constants;
    import com.atguigu.scw.manager.service.UserService;
    
    //处理所有/permission/user下的请求
    @RequestMapping("/permission/user")
    @Controller
    public class UserController {
    
        private final String MANAGER_MAIN = "manager/main";
        @Autowired
        UserService userService;
    
        @RequestMapping("/login")
        public String login(TUser user, HttpSession session) {
            // 登陆后返回的用户要放在session中,用TUser
            TUser login = userService.login(user);
            if (login == null) {
                // 登陆失败
                session.setAttribute("errorUser", user);
                session.setAttribute("msg", "登陆失败");
                return "redirect:/login.jsp";
            }
            // 登陆成功
            // 1.将用户放在session中
            session.setAttribute(Constants.LOGIN_USER, login);
            return "redirect:/main.html";
        }
    
        // /permission/user/reg
        @RequestMapping("/reg")
        public String reg(TUser user, Model model, HttpSession session) {
            System.out.println("用户注册..." + user);
            // 1.注册成功后来到控制面板页面
            // 1.注册用户
            boolean flag = userService.register(user);
            if (flag == true) {
                // 1.注册成功,来到控制面板
                // 用户保存的数据在user对象中,id是数据库生成的自增主键
                // 需要修改mybatis的mapper文件,让其使用自动生成的id
                session.setAttribute(Constants.LOGIN_USER, user);
    
                return "redirect:/main.html";
            } else {
                // 2.注册失败
                model.addAttribute("regError", "用户名已经被使用");
                // 3.来到页面要回显user之前输入的内容
                // 4.user先从隐含模型中拿的;只要pojo,确定完值以后会自动放在隐含模型中
                // 用的key是类名首字母小写${tUser.loginacct }
                return "forward:/reg.jsp";
            }
    
        }
    }

    注册后的网址变化了

  • 相关阅读:
    前端提示“页面正在载入”的功能实现
    JSON那些事
    如何让nodejs同步操作
    nodejs的一些局限
    《javascript高级程序设计》读书笔记——作用域
    svn教程
    从雷军谈小米中的一些思考
    云Vps安全设置
    不同服务器数据库之间的数据操作
    C#语言的Excel文件导入导出
  • 原文地址:https://www.cnblogs.com/aidata/p/11475763.html
Copyright © 2011-2022 走看看