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

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

通用权限设计方案

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

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

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

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

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

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

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

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

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

    • 配置模块

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

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

    • 拦截模块

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

    • 权限初始化

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

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

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

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

    你可能感兴趣的文章
    mudbox卸载/完美解决安装失败/如何彻底卸载清除干净mudbox各种残留注册表和文件的方法...
    查看>>
    mysql 1264_关于mysql 出现 1264 Out of range value for column 错误的解决办法
    查看>>
    mysql 1593_Linux高可用(HA)之MySQL主从复制中出现1593错误码的低级错误
    查看>>
    mysql 5.6 修改端口_mysql5.6.24怎么修改端口号
    查看>>
    MySQL 8.0 恢复孤立文件每表ibd文件
    查看>>
    MySQL 8.0开始Group by不再排序
    查看>>
    mysql ansi nulls_SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON 什么意思
    查看>>
    multi swiper bug solution
    查看>>
    MySQL Binlog 日志监听与 Spring 集成实战
    查看>>
    MySQL binlog三种模式
    查看>>
    multi-angle cosine and sines
    查看>>
    Mysql Can't connect to MySQL server
    查看>>
    mysql case when 乱码_Mysql CASE WHEN 用法
    查看>>
    Multicast1
    查看>>
    mysql client library_MySQL数据库之zabbix3.x安装出现“configure: error: Not found mysqlclient library”的解决办法...
    查看>>
    MySQL Cluster 7.0.36 发布
    查看>>
    Multimodal Unsupervised Image-to-Image Translation多通道无监督图像翻译
    查看>>
    MySQL Cluster与MGR集群实战
    查看>>
    multipart/form-data与application/octet-stream的区别、application/x-www-form-urlencoded
    查看>>
    mysql cmake 报错,MySQL云服务器应用及cmake报错解决办法
    查看>>