权限系统(RBAC)的数据模型设计
前言:
RBAC是Role-Based Access Control的缩写, 它几乎成为权限系统的数据模型的选择标配.
之前写个两篇关于权限系统的文章, 主要涉及如何在应用中实现权限控制, 对权限系统本身的数据模型未着水墨. 权限系统的设计到现在为止, 非常的成熟, 而且网上的资料大而全. 比如这篇博文: 权限系统与RBAC模型概述, 其基本就涵盖了各类RBAC的权限数据模型的设计, 可根据小/中/大的业务场景进行定制.
本文结合自己的业务场景, 介绍一个小型的后台管理系统的权限系统(RBAC)的数据模型, 权做笔记, ^_^.
相关系列文章:
1. springmvc简单集成shiro
2. 类Shiro权限校验框架的设计和实现
设计目标:
最简化RBAC的数据模型, 同时为了给系统添加一定的灵活度, 即可以单独给用户赋予某个特定权限.
这边把权限定义为:
permission(权限) = resource(资源) + action(动作)
对于资源(resource), 不在细分为页面(page)级别, 甚至到按钮(menu)级别. 资源更像一个具体的业务/功能的标记.
对于动作(action), 可以简单分为read/write/update/delete.
这样权限(permission)就很容易定义和理解, 比如功能: 查看投诉, 其对应permission为: complaint:read.
role和user都相对独立, 即role没有继承和层次关系, 用户不再引入组group.
这样的话, 将大大减少权限的设计, 避免在中小型业务后端, 进行过度设计, 导致工作量膨胀且没明显增量收益.
为了系统一定的灵活度, 在单独引入user到permission的直接映射表, 用于扩展.
数据模型:
对了小型的后台管理系统, 用户不多, 表可以采用单库单表, 总之尽量简单, 这边的表都保留id字段(主键自增)作为约定.
作为最基础的RBAC表设计:

为了增加灵活性, 单独添加的用户到权限的双向映射表.

事实上, 如果业务规模真的不大, 且权限的粒度较粗, 完全退化为了用户/权限表模型, 也是可以完全满足需求的, 而且实现更快.
这边结合了两种, 算是一个小复合模式.
后记:
RBAC的权限确实很成熟, 不过还是那句老话, 纸上得来终觉浅, 绝知此事要躬行.
本文权做个人笔记了.
权限系统(RBAC)的数据模型设计的更多相关文章
- vue_cli下开发一个简单的模块权限系统之展现数据
这个页面是用户列表:userList就是第二张截图中的data里面的userList vue中只要改变存放数据的载体就会实现页面改变,mounted的意思是页面加载时执行这里面的函数,我们需要在页面加 ...
- 转:RBAC如何设计一个权限系统
前言 权限管理是所有后台系统的都会涉及的一个重要组成部分,主要目的是对不同的人访问资源进行权限的控制,避免因权限控制缺失或操作不当引发的风险问题,如操作错误,隐私数据泄露等问题.目前在公司负责权限这块 ...
- phpcms中的RBAC权限系统
PHPCMS中的RBAC权限系统主要用到了4张数据表:管理员表,角色表,菜单表,菜单权限表.先来看看数据库的数据表结构: admin 管理员表 ID 字段 类型 Null 默认 索引 额外 注释 1 ...
- 权限系统与RBAC模型概述
为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/3793894.html ...
- 权限系统与RBAC模型概述[绝对经典]
0. 前言 一年前,我负责的一个项目中需要权限管理.当时凭着自己的逻辑设计出了一套权限管理模型,基本原理与RBAC非常相似,只是过于简陋.当时google了一些权限管理的资料,从中了解到早就有了RBA ...
- [转]权限系统与RBAC模型概述[绝对经典]
转自:https://blog.csdn.net/yangwenxue_admin/article/details/73936803 0. 前言 一年前,我负责的一个项目中需要权限管理.当时凭着自己的 ...
- SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建
SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建 技术栈 : SpringBoot + shiro + jpa + freemark ,因为篇幅原因,这里只 ...
- TP支持菜单动态生成RBAC权限系统数据库结构设计方案
最简单基于RBAC权限系统数据库结构设计 包括如下几个表 1. 用户表 -- Table "t_user" DDL CREATE TABLE `t_user` ( `id` int ...
- 权限系统的设计模式 ACL RBAC ABAC
ACL(Access Control List):访问权限列表 如: user1-->AC1 user1-->AC2 user2-->AC1 此时权限汇总成一个列表 这种设计 ...
随机推荐
- Python IO内核交互了解
注:Unix \ Linux 环境下的network IO 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操作系 ...
- SIP 编解码器
编解码器,编码器 - 解码器的简称,做两个基本操作 - 首先,它将模拟语音信号转换为其等效数字形式,以便可以容易地发送. 此后,它将压缩的数字信号转换回其原始模拟形式,以便可以重放. 市场上有许多编解 ...
- Spring Boot系列一:默认日志logback配置解析
前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的,你呢 如何引入日志? 日志输出格式以及输出方式如何配置? 代码中如何使用? 正文 Sp ...
- org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: file:/input
原我是这样写的 //输入数据所在的文件目录 FileInputFormat.addInputPath(job, new Path("/input/")); //mapreduce执 ...
- Confluence 6 服务器硬件要求指南
服务器管理员可以通过本页面的指南来对在运行 Confluence 评估版本的最小服务器硬件需求进行评估.应为实际的服务器负载是很难进行预测的,所以最好的办法是通过实际运行一个 Confluence 实 ...
- linux中执行shell命令的几种常用方法
1 切换到shell脚本所在目录执行shell脚本: cd /test/shell ./test.sh 2 以绝对路径的方式执行shell脚本: /test/shell/test.sh 3 直接使用b ...
- [lightoj P1306] Solutions to an Equation
[lightoj P1306] Solutions to an Equation You have to find the number of solutions of the following e ...
- c# 转换成时间类型
if (rngFound.Value.ToString().Contains("/")) { closingdate = rngFound.Value; } else if (rn ...
- MySQL字符串列与整数比较
一.问题说明 为了简便在存储时我们经常将整型字段也以字符串形式存储(如id值),但在筛选比较时就需要将该字段转为数值类型. 二.处理办法 2.1 使用cast函数进行类型转换 cast函数格式---- ...
- Java入门自学笔记
一.变量 变量需要一个名字,变量的名字是一种“标识符”,意思是它是用来识别这个和那个的不同的名字. 标识符的构造规则:只能有字母.数字和下划线组成,数字不能在首位,java的关键字(保留字)不可以用做 ...