当前位置:网站首页 > 产品管理 > 正文

rbac权限管理系统(权限管理系统介绍)



目录

权限管理系统/通用权限管理系统

所使用的技术

环境要求

后端(主):

搭建后端项目环境

mybatis中自带的逻辑删除

Security的认证运作流程

 前端与后端请求关系图

权限分配

前端


——RBAC(Role-Based Access Control)

RBAC权限模型,即:基于角色的权限控制,模型中有几个关键的术语:

                用户:系统接口及访问操作者。

                权限:能够访问某接口或者做某操作的授权资格。

                角色:具有一类相同操作权限的用户的总称。

        一个用户拥有一个角色,一个角色拥有多个权限。

自主访问控制(DAC:Discretionary Access Control)

强制访问控制(MAC:Mandatory Access Control)

基于属性的权限验证(ABAC:Attribute-Based Control)

后端:spring Boot、Mybatis Plus、Spring Security、Jwt、Redis、MySql

前端:HTML5、CSS3、JavaScript、Vue、Element UI

其他:git

后端 : jdk 8 + maven 3.6 Spring Boot 2+

开发工具:idea git

前端: node.js 开发工具:WebStorm git

搭建后端项目环境

①所需的依赖

②实体类的生成

③Mapper、Service、Controller生成

        注:在每个Service实现类上加入@Transaction注解。

④封装统一结果类

        HttpResult

 

         HttpResultEnum

 

⑤编写MyBatis Plus配置类

 

⑥接口代码测试

        编写一个controller接口。

⑦编写跨域请求

 

mybatis中自带的逻辑删除

#isDelete:在.yml文件中,所有具备了isDelete的类都不能在数据库中被删除;也就意味着,如果我进行了删除,它会将数据库的isDelete字段从0变成1

 

#mybatis中的高级的特性
   乐观锁:给数据库里的每一个字段增加一个数字,用来预判对一条数据同时进行两种操作,避免这种情况。

Security的认证运作流程

        当要访问登录时,会被拦截器或是过滤器给拦住,然后跳转到UserDetailService,根据用户名查询到用户的信息;

        然后转到security里面去,认证处理器,这个验证时看不见的;是由它自己去做的,在SpringSecurityConfig里有一个额外的配置:认证处理器,会将查询到的用户与当前传进来的加密完成之后的密码做对比,只要两个属性都过了就代表认证成功;

        经过认证之后,就会跳转到对应的handler里去;

        如果认证失败了,就会跳转到handler中的认证失败LoginFailureHandler里去;很多情况都会导致认证失败。

        在认证的时候,UserController里的任何代码都不影响,就返回了个结果,但此结果也不是最终要用的,这个请求在认证流程中发生了转发,转发到UserDetailService去了,所以最终的结果不再是controller的结果了,而是handler的结果。

 前端与后端请求关系图

权限分配

        分配权限前需要回显当前角色拥有的权限信息。

        但我点击了权限分配,需要先把后端的权限全部拿过来;拿完后端的权限之后,还要拿出所有当前角色对应的权限;在分配角色的权限信息的时候,不能超出当前用户所拥有的权限信息。

        查询当前登录用户的信息,判断此用户是否是管理员,如果是管理员的话,就把所有的权限信息全查出来;如果此用户不是管理员,那就根据当前用户的id查询出他所拥有的全部权限信息。

@GetMapping("/getPermissionTree") public HttpResult<?> getPermissionTree(Long roleId) { //根据当前用户查询出可划分(拥有)的权限 //从SpringSecurity上下文获取用户信息 Authentication authentication = SecurityContextHolder .getContext() .getAuthentication(); //获取用户的信息 User user = (User) authentication.getPrincipal(); //将当前用户的角色可以分配的所有权限赋给list //做正常的权限分布 List<Permission> list = new ArrayList<>(); //如果当前用户是管理员 if(user.isAdmin()){ //直接查询所有权限 list = permissionService.list(); }else{ //否则:当前用户不是管理员,查询当前用户所具有的权限 //思路:用户 -> UserRole -> RolePermission -> Permission -> id //so,先拿到用户id,user_id //.eq:拿到的是一个流,把流进行一个map遍历 List<Long> user_id = userRoleService .list(new QueryWrapper<UserRole>().eq("user_id", user.getId())) .stream().map(UserRole::getRoleId) .collect(Collectors.toList()); //RolePermission -> Permission //next,通过用户id后拿到角色id,role_id List<Long> role_id = rolePermissionService .list(new QueryWrapper<RolePermission>().in("role_id", user_id)) .stream().map(RolePermission::getPermissionId) .collect(Collectors.toList()); //Permission -> id //finally,拿到角色所有的权限id,id list = permissionService.list(new QueryWrapper<Permission>().in("id", role_id)); } //查询出当前要分配的角色的权限 //数据回显,listIds List<Long> role_id = rolePermissionService .list(new QueryWrapper<RolePermission>().in("role_id", roleId)) .stream().map(RolePermission::getPermissionId) .collect(Collectors.toList()); //得到当前角色所有的权限 id,为了在前端显示权限菜单树之后能被选中 //选出当前角色的权限与要去修改的角色的权限的共有部分 List<Long> rps = new ArrayList<>(); //做一个权限数的判断 if(role_id.size()>0){ rps = permissionService .list(new QueryWrapper<Permission>().in("id", role_id)) .stream().map(Permission::getId) .collect(Collectors.toList()); }  //把需要在前端被选中的权限编号放进去 List<Long> ids = new ArrayList<Long>();  //需要获取 list,id 中都存在的共同 id,在前端让它被选中 List<Long> finalId = rps; list.forEach(p ->{ if(finalId.indexOf(p.getId())!=-1){ ids.add(p.getId()); } }); //进行数据的组合 RolePermissionVo vo = new RolePermissionVo();  //层级赋予 vo.setPermissionList(MenuTree.makeMenuTree(list,0L)); vo.setCheckList(ids); return HttpResult.ok(vo); }

首先下载vue-element-admin,需要用到git,如果没有安装git命令会报错。

到此这篇rbac权限管理系统(权限管理系统介绍)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 电脑进程管理器快捷键win10(电脑进程管理器快捷键win10怎么设置)2025-01-07 22:36:09
  • 小米电视的文件管理在哪里找(小米电视怎么看文件管理)2025-01-07 22:36:09
  • 苹果手机文件管理在哪里找(苹果手机下载完歌曲去哪找文件)2025-01-07 22:36:09
  • 文件管理的回收站在哪里(文件管理器的回收站在哪)2025-01-07 22:36:09
  • 产品经理快速入门(产品经理从入门到精通)2025-01-07 22:36:09
  • 小米电视的文件管理在哪里找(小米电视的文件管理在哪里找出来)2025-01-07 22:36:09
  • 日志管理工具(日志管理app)2025-01-07 22:36:09
  • 日志管理工具怎么用(日志管理是怎么实现的)2025-01-07 22:36:09
  • 任务管理器在哪里打开(任务管理器在哪里打开手机桌面)2025-01-07 22:36:09
  • 日志管理功能不包括(日志管理功能不包括哪些)2025-01-07 22:36:09
  • 全屏图片