博客
关于我
通用权限解决方案介绍
阅读量:787 次
发布时间:2019-03-24

本文共 1118 字,大约阅读时间需要 3 分钟。

通用权限设计方案

在现有的权限框架如Shiro和Spring Security中,虽然方便快捷,但在定制化方面往往显得不够支持各个业务独特需求。对于不同的业务,权限管理方式各有不同,在这种情况下,自定义的通用权限设计显得尤为重要。

权限拦截的主要对象包括菜单(控制台左侧的菜单)、路由、接口以及按钮等。这些点需要在用户操作时进行权限控制。权限的作用是控制用户对系统资源的访问,主要操作包括配置、读取和拦截三个层面的权限管理。

在设计权限管理时,通常会考虑三种核心概念:用户、角色和资源。基于这三个核心概念,可以进行灵活的权限管理。具体来说,可以采用以下设计思路:

  • 简单模型:100用户 × 100资源

    这种简单的用户-资源关联方式适用于小型项目,通过直接关联用户和资源,可以快速实现权限管理。每个用户可以被赋予对特定资源的访问权限。

  • 经典模型:用户-角色-资源

    这种模型分为两层关联:用户与角色以及角色与资源。用户可以通过角色来继承权限,具体操作如下:

    • 2个角色 + 100资源
    • 用户与角色之间的关系
    • 角色的访问权可以被灵活分配
  • 这样一来,用户之间的权限可以通过角色进行集中管理,而不需要每个用户都硬编码权限,实现了灵活性和可扩展性。

    功能上,我们需要实现以下几个模块:

    • 配置模块

      • 用户管理:用户表和用户管理界面
      • 资源配置:资源表和资源配置界面
      • 角色管理:角色表和角色管理界面
      • 用户角色关联配置:通过用户角色关联表,实现用户权限的分配
      • 角色资源关联配置:通过角色资源关联表,实现资源权限的分配
    • 读取模块

      用户权限的读取可以在登录时完成。具体来说,用户登录时,通过用户角色关联表,获取当前用户的角色信息。再通过角色资源关联表,可以查询到该用户可以访问的所有资源。

    • 拦截模块

    在用户操作资源时,需要进行权限拦截。从前端来看,这涉及菜单、路由、按钮等用户界面元素的控制;后端则需要对接口进行保护,如通过Gateway的过滤器进行拦截。这种双重层面的控制可以确保系统安全,也避免了前端界面与实际接口存在的不一致问题。

    • 权限初始化

      系统上线时,需要初始化数据库中的五张表数据。这些表包括:用户表、角色表、资源表、用户角色关联表和角色资源关连表。初始时,系统会有一个默认用户账号(管理员账号),其拥有管理角色,能够管理所有资源和配置必要的权限。

    关于前端双重拦截的问题,如果仅靠前端对接口进行隐街控制,可能会存在被逆向工程、代码修改等安全隐患。因此,在后端也进行接口拦截,能够有效提升系统安全性。

    通过这样的设计,可以实现对用户的精细化权限管理。这种设计方法既支持定制化,又保持了灵活性,能够适配不同业务的需求。这是实现整体系统安全管理的关键所在。

    转载地址:http://eprkk.baihongyu.com/

    你可能感兴趣的文章
    ntelliJ IDEA 报错:找不到包或者找不到符号
    查看>>
    NTFS文件权限管理实战
    查看>>
    ntko web firefox跨浏览器插件_深度比较:2019年6个最好的跨浏览器测试工具
    查看>>
    ntko文件存取错误_苹果推送 macOS 10.15.4:iCloud 云盘文件夹共享终于来了
    查看>>
    ntp server 用法小结
    查看>>
    ntpdate 通过外网同步时间
    查看>>
    ntpdate同步配置文件调整详解
    查看>>
    NTPD使用/etc/ntp.conf配置时钟同步详解
    查看>>
    NTP及Chrony时间同步服务设置
    查看>>
    NTP服务器
    查看>>
    NTP配置
    查看>>
    NUC1077 Humble Numbers【数学计算+打表】
    查看>>
    NuGet Gallery 开源项目快速入门指南
    查看>>
    NuGet(微软.NET开发平台的软件包管理工具)在VisualStudio中的安装的使用
    查看>>
    nuget.org 无法加载源 https://api.nuget.org/v3/index.json 的服务索引
    查看>>
    Nuget~管理自己的包包
    查看>>
    NuGet学习笔记001---了解使用NuGet给net快速获取引用
    查看>>
    nullnullHuge Pages
    查看>>
    NullPointerException Cannot invoke setSkipOutputConversion(boolean) because functionToInvoke is null
    查看>>
    null可以转换成任意非基本类型(int/short/long/float/boolean/byte/double/char以外)
    查看>>