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

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

通用权限设计方案

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

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

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

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

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

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

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

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

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

    • 配置模块

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

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

    • 拦截模块

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

    • 权限初始化

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

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

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

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

    你可能感兴趣的文章
    mysql 如何给SQL添加索引
    查看>>
    mysql 字段区分大小写
    查看>>
    mysql 字段合并问题(group_concat)
    查看>>
    mysql 字段类型类型
    查看>>
    MySQL 字符串截取函数,字段截取,字符串截取
    查看>>
    MySQL 存储引擎
    查看>>
    mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
    查看>>
    MySQL 存储过程参数:in、out、inout
    查看>>
    mysql 存储过程每隔一段时间执行一次
    查看>>
    mysql 存在update不存在insert
    查看>>
    Mysql 学习总结(86)—— Mysql 的 JSON 数据类型正确使用姿势
    查看>>
    Mysql 学习总结(87)—— Mysql 执行计划(Explain)再总结
    查看>>
    Mysql 学习总结(88)—— Mysql 官方为什么不推荐用雪花 id 和 uuid 做 MySQL 主键
    查看>>
    Mysql 学习总结(89)—— Mysql 库表容量统计
    查看>>
    mysql 实现主从复制/主从同步
    查看>>
    mysql 审核_审核MySQL数据库上的登录
    查看>>
    mysql 导入 sql 文件时 ERROR 1046 (3D000) no database selected 错误的解决
    查看>>
    mysql 导入导出大文件
    查看>>
    MySQL 导出数据
    查看>>
    mysql 将null转代为0
    查看>>