RBAC权限模型概述

RBAC即role-based access control,基于角色的访问控制

通过角色来管理用户对系统资源的访问权限。RBAC是一种权限管理模型,核心思想是分离用户与具体权限,通过角色作为中介来实现用户与权限的关联

RBAC的三个基本元素

User:访问者

Role:User和Permission的桥梁,他是权限的集合,用户通过被赋予不同的角色来获取相应的权限

Permission:对系统资源的访问能力/执行特定操作的能力

优点:

简化权限管理:只需要分配角色给访问者即可

安全并且易于维护与拓展

实现方式:

数据库设计:

  • 用户表
  • 角色表
  • 权限表
  • 用户-角色关联表
  • 角色-权限关联表

 个人样例代码,

    private List<String> searchAuthoritiesByUserId(Long id) {
        // 根据user_id获取role_id
        List<Long> roles_id = userRolerMapper
                .selectList(new LambdaQueryWrapper<SysUserRole>().eq(SysUserRole::getUserId, id))
                .stream()
                .map(SysUserRole::getRoleId)
                .collect(Collectors.toList());
        // 根据role_id获取menu_id
        Set<SysRoleMenu> menus=new HashSet<>();
        roles_id.forEach(role_id->{
            List<SysRoleMenu> sysRoleMenus = roleMenuMapper.selectList(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getRoleId, role_id));
            menus.addAll(sysRoleMenus);
        });
        // 根据menu_id获取具体的menu_name
        List<String>menuNames=new ArrayList<>();
        menus.forEach(menu->{
            Long roleId = menu.getRoleId();
            menuNames.add(menuMapper.selectById(roleId).getMenuName());
        });
        return menuNames;
    }

 

posted @ 2024-07-22 18:27  天启A  阅读(95)  评论(0)    收藏  举报