权限设计

数据库必知必会系列:数据库安全性与角色授权 作者:禅与计算机程序设计艺术 1.背景介绍 1.1数据库安全性概述 随着互联网信息化的发展、计算机网络的普及、对信息安全的重视,越来越多的人开始关注数据安全问题。数据安全主要体现在以下几个方面: 数据完整性:数据库中数 阅读详情
在任何系统中,权限设计是最基础的东西,本文给出一个基于角色的权限设计的循序渐进的设计方案。

  在权限系统中,功能(权限)是最小的单位,比如起草新闻、编辑新闻、审核新闻、删除新闻等,而角色是一类功能的集合,比如新闻编辑这个角色,他可能有起草新闻、编辑新闻等功能集合,而责任编辑他可能就有更多的权限,比如除了新闻编辑的功能,还有审核新闻、删除新闻等功能,给张三赋予新闻编辑的角色(其实我更愿意说把张三加入到新闻编辑这个角色中去),张三就可以起草新闻、编辑新闻了,给李四赋予责任编辑的角色,李四就可以起草新闻、编辑新闻、审核新闻、删除新闻了。

  我们来看看版本一的解决方案: 

 
 

  我们来模拟一下上面的数据:

  用户信息表:

UserID

UserName

U1

张三

U2

李四

  角色表:

RoleID

RoleName

R1

新闻编辑

R2

责任编辑

  角色用户表:

RoleID

UserID

R1

U1

R2

U2

  功能表:

FunctionID

FunctionName

F1

起草新闻

F2

编辑新闻

F3

审核新闻

F4

删除新闻

  角色功能表:

RoleID

FunctionID

R1

F1

R1

F2

R2

F1

R2

F2

R2

F3

R2

F4

  我们来看看如何判断一个用户具有某个功能权限:

  首先在用户张三登录的时候,获取张三的全部功能列表:

Select FunctionID From 角色功能表 Where RoleID In (Select RoleID From 用户角色表 Where UserID=’U1’)

  这样就可以得到张三的全部功能列表Functions,在起草新闻的页面我们就可以做如下判断:

Functions.Contain(‘F1’);//当然你可以把这个’F1’定义成一个常量:NewsFunction.Draft

  如果为true就说明张三有起草新闻的权限。

  当然对于web应用,您可以把Functions 用session保存起来,以避免每打开一个页面都去数据库中获取。

  似乎看起来是一个不错的解决方案。

  还是新闻系统,最初新闻系统没有分类,但是随着新闻的增加,没有分类的新闻看起来总是乱的,于是张三和李四给新闻添加了分类A、分类B,还是由张三负责起草,李四负责审核,以后又添加了更多的分类,并且也增加了人手,这个时候就有新的要求出来了:希望张三只负责分类A的起草,分类B的起草交给其他人做,李四呢也只负责分类A的审核(就相当于是一个栏目的责任编辑)。 

样的需求,版本一就无能为力了(当然你也可以增加几个功能:比如分类A的新闻起草和分类B的新闻起草,再把这个功能添加到相应的角色里面去,但是这个应该不是我们要得解决方案吧,不过版本二也是基于这个思想来解决的)。

其实比新闻更好的例子是论坛板块的版主。

下面是版本二的解决方案:

 
在版本二的功能表中加入了一个ResourceType这个字段,这个字段用来表示对某个资源的分类(比如新闻),我们同样来模拟一下(新闻分类A的ResourceType为:NTA,分类B为:NTB):

功能表:

FunctionID

ResourceType

FunctionName

F1

NTA

起草新闻:分类A

F2

NTA

编辑新闻:分类A

F3

NTA

审核新闻:分类A

F4

NTA

删除新闻:分类A

F1

NTB

起草新闻:分类B

F2

NTB

编辑新闻:分类B

F3

NTB

审核新闻:分类B

F4

NTB

删除新闻:分类B

然后在角色表添加相应的角色,在角色功能表中添加对应的功能。

获取Functions的语句也相应地做变化:

Select FunctionID  + ‘,’ + ResourceType From 角色功能表 Where RoleID In (Select RoleID From 用户角色表 Where UserID=’U1’)

权限的判断也就变成:

Functions.Contain(‘F1,NTA’);

在新添加一个分类的时候,同时也在功能表中增加相应的记录(当然不是在数据库里面直接添加,由和功能相关的函数来添加)。

使用这种解决方案可以简单地对有分类的应用(比如论坛系统)的每个分类实行不同的控制(比如VIP板块,就只能拥有VIP角色的用户才能浏览、发表等,而其他板块只要是注册用户就可以使用了)。

在实际应用中FunctionID并不是随便的一个字符串,而是进行了编码,其编码中包含了模块ID以及能够体现出父子关系,举个例子来说:对于论坛系统,我们给它一个模块ID为”30”,论坛的功能我们先分成2类,一类是管理类(比如删除帖子),一类是使用类(比如发帖、回帖、浏览帖子等),给管理类一个编码:01,使用类一个编码:02,我们就对FunctionID进行如下的编码:

300101:删除帖子

300201:发帖

300202:回帖

300203:浏览帖子

对于资源(比如某个板块1,板块的ID为:01),我们可以组合出如下的Functions(当然这个组合你也可以不用逗号分隔,用其他的组合方式也可以,不过不要产生歧义):

300101,01:板块1删除帖子的功能

300201,01:板块1发帖的功能

……

    对于RoleID也是采用的编码方式,也能体现角色的父子关系,也可以实现角色功能的继承等(当然获取角色功能列表的SQL语句就不是现在这么简单了)。在我现在的应用里面没有实现角色的继承(虽然角色的编码体现出了角色的父子关系)。


药物吸收仿真软件:Caco-2_(9).Caco-2模型在药物开发中的案例分析 通过以上五个案例,我们可以看到Caco-2模型在药物开发中的重要作用。它不仅能够帮助我们预测药物的肠道吸收情况,还能够用于优化药物配方、评估代谢稳定性、研究药物相互作用以及转运蛋白的影响。这些体外实验和仿真分析的结果为药物的进一步临床研究提供了重要的参考依据,有助于缩短药物开发周期,提高研发效率。 阅读详情

相关推荐

深入RK3588嵌入式Linux开发:uboot源码定制化移植实战

本文详细介绍了RK3588嵌入式Linux开发中,如何绕过庞大的官方SDK,从官方仓库获取纯净U-Boot源码并进行定制化移植的完整实战流程。内容包括编译环境搭建、交叉工具链配置、源码结构解析、设备树(Device Tree)修改、环境变量定制、编译脚本编写以及常见问题调试技巧,旨在帮助开发者深入理解系统引导过程,掌握为定制硬件适配U-Boot的核心技能。

weixin_29169505的博客 424

权限设计(转)

在任何系统中,权限设计是最基础的东西,本文给出一个基于角色的权限设计的循序渐进的设计方案。   在权限系统中,功能(权限)是最小的单位,比如起草新闻、编辑新闻、审核新闻、删除新闻等,而角色是一类功能的集合,比如新闻编辑这个角色,他可能有起草新闻、编辑新闻等功能集合,而责任编辑他可能就有更多的权限,比如除了新闻编辑的功能,还有审核新闻、删除新闻等功能,给张三赋予新闻编辑的角色(其实我更...

weixin_30610755的博客 397

STM32F407 BootLoader实战:从零搭建到OTA升级(附完整源码)

本文详细介绍了为STM32F407微控制器从零搭建BootLoader并实现稳定OTA升级的完整实战指南。内容涵盖Flash分区规划、链接脚本配置、核心跳转逻辑、中断向量表重定向、可靠的升级流程设计,并深入探讨了双备份与回滚机制以提升工业级可靠性。文章提供了可直接使用的代码框架,并分享了关键调试技巧,帮助开发者快速掌握STM32远程固件更新技术。

weixin_29192211的博客 445

【转载】JAVA用户角色权限设计(功能权限)

**实现业务系统中的用户权限管理**  B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台计算机都已具备的,如果不建立一个完整的权限检测,那么一个“非法用户”很可能就能通过浏览器轻易访问到B/S系统中的所有功能。因此B/S业务系统都需要有一个或多个权限系统来实现访问权限检测,让经过授权的用户可以正常合法的使用已授权功能,而对那些未经授权的“非法用户”将会将他们彻底的“拒之门外”。下面就让

青山师 4572

六自由度机械臂运动学分析及其轨迹规划

六自由度机械臂轨迹规划 通过对比三次多项式插值法与五次多项式插值法的效果,选取后者对机械臂进行轨迹规划,将运动学解导入Matlab Robotics Toolbox仿真,得到各关节角度、速度和加速度与时间关系曲线。 三次多项式插值法 三次多项式有4个待定系数,可同时对起始点和目标点的角度和角速度给出约束条件。 数学公式 MATLAB代码 五次多项式插值法 五次多项式有6个待定系数,可同时对起始点和...

两条眉毛 6万+

别再死磕官方文档了!用宿舍开黑的故事,5分钟搞懂Autosar CanNM网管报文

本文通过宿舍开黑游戏的生动类比,深入浅出地解析了Autosar CanNM网管报文的工作原理。从游戏队友协作到汽车ECU节点的同步机制,详细介绍了网管报文的唤醒流程、通信协议及休眠策略,帮助读者快速掌握这一关键技术。

weixin_30463341的博客 262

用户、角色、权限、菜单--数据库设计

role_id------------角色ID(自定义)可设置唯一索引UNIQUE。user_id--------------用户ID(可设置唯一索引UNIQUE)is_deleted---- -------状态(0:未删除 1:删除)style----------------样式(可设置css图标)id------------------------主键。id---------------------主键。remark-----------------说明。

zgscwxd的博客 8693

【光子 AI 】LangGraph:Graph = 有向有环图 + 状态机实现原理详解:数据结构模型与核心算法代码实现逻辑解析

LangGraph核心原理解析:基于Pregel模型的消息传递图,结合有向有环图和状态机特性。关键实现包括:1) 共享状态机制(TypedDict/Pydantic模型)配合Reducer逻辑实现状态更新;2) 图拓扑结构通过邻接表维护节点和条件边;3) 检查点机制支持状态持久化和恢复。运行时采用Pregel循环算法,通过超级步迭代执行节点函数、应用状态归约、条件路由下一批节点,同时支持人工中断和异步并行处理。该架构使LangGraph具备循环执行、条件跳转等DAG无法实现的动态流程控制能力。

AI天才研究院 1041

RBAC模型整合数据权限

在项目实际开发中我们不光要控制一个用户能访问哪些资源,还需要控制用户只能访问资源中的某部分数据。控制一个用户能访问哪些资源我们有很成熟的权限管理模型即RBAC,但是控制用户只能访问某部分资...

飘渺Jam的博客 6530

【WRFDA教程第四期】雷达数据同化(Radar Data Assimilation)

雷达数据同化(Radar Data Assimilation)

WW、forever的博客 1761

基于CrossSim的存储硬件原型机ANN仿真:MNIST手写数字识别实现与分析

本项目基于CrossSim仿真平台,在存储硬件原型机上实现了MNIST手写数字识别的ANN模型。通过搭建CrossSim仿真环境,设计传统ANN基准模型和考虑硬件非理想特性的CrossSim模型,对比分析了不同配置下的识别性能。实验结果表明,在引入硬件噪声和器件变异的情况下,模型准确率仍能达到95%以上,验证了存储内计算架构的可行性。研究为存储硬件与计算单元融合提供了实验依据,展示了CrossSim在神经形态计算系统仿真中的实用价值。

huanghm88的专栏 597

数据权限设计思路_权限设计数据权限

任何一个系统中,都离不开权限的设计 权限设计 = 功能权限 + 数据权限+字段权限 【功能权限】:能做什么的问题。如查询、增删改信息【数据权限】:能看到哪些数据的问题。如查看本人、部门团队、区域或者整个公司、甚至整个系统的数据【字段权限】:能看到哪些信息的问题。如联系人姓名,但是不能查看到联系人地址、联系人电话这样的 1.功能权限设计 常常是基于RBAC(Role-Based Access Control)的一套设计方案 2.数据权限设计 2.1数据权限设计分析 ...

Turn X7 1万+

检测头篇 | 手把手教你如何去更换YOLOv8的检测头为ASFF_Detect

自适应空间特征融合(ASFF)的主要原理旨在解决单次检测器中不同尺度特征的不一致性问题。具体来说,ASFF通过动态调整来自不同尺度特征金字塔层的特征贡献,确保每个检测对象的特征表示是一致且最优的。本文所做出的改进是将YOLOv8的检测头更换为ASFF_Detect。🌈

小哥谈 2500

角色权限设计

角色权限设计一 ·RBAC模型1.基本的RBAC模型2.引入用户组概念的RBAC模型3. 角色继承的RBAC模型4. 限制的RBAC模型二·权限的拆分与设计三·需要注意的Tips 一 ·RBAC模型 1.基本的RBAC模型 RBAC(Role-Base Access Control,基于角色的访问控制),就是用户通过角色和权限进行关联。简单的说,一个用户拥有多个角色,一个角色拥有多个权限。这样,就...

ding_fang的博客 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【产品设计】RBAC权限设计

内置角色:角色的名称和权限由系统内置好,用户仅可查看无法修改。

自学吧 5297

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

权限设计文档

 权限设计文档权限设计通常包括数据库设计、应用程序接口(API)设计、程序实现三个部分。这三个部分相互依存,密不可分,要实现完善的权限管理体系,必须考虑到每一个环节可行性与复杂程度甚至执行效率。    权限分类:1、   功能(服务级别):它可以包括例如统计等所有非直接数据存取操作2、   数据表存取的权限(表级别):通常有录入、浏览、修改、删除四种,3、   字段的存

shuijinglianyi的专栏 7267

权限管理设计总结

权限设置一定要根据具体情况进行设计,不要千篇一律,更不要化简为繁,像继承,多角色等,目前我们公司没有,一个用户只有一个角色,管理起来很方便;而数据权限又是完全独立一套设计,基本思路也大差不差的!

游士的博客 4635

权限管理设计之菜单权限

 权限菜单的显示   MVC框架:struts2 + spring + hibernate 实现功能:后台管理系统中,每个登录的用户,有多个不同的角色,而每个角色都有不同的权限,针对每个用户所拥有的权限列表,根据其中菜单权限的等级进行划分归类,显示在操作菜单栏中。 菜单结构如下:   权限表设计如下:       涉及的实体有部门、用户、角色及权限 ,部门-用户 是一对多关系,...

iteye_6573的博客 7627

java权限管理与用户角色权限设计

java权限管理与用户角色权限设计2016年10月29日 19:24:41阅读数:12545实现业务系统中的用户权限管理 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台计算机都已具备的,如果不建立一个完整的权限检测,那么一个“非法用户”很可能就能通过浏览器轻易访问到B/S系统...

Junit的博客 4万+

权限表设计

所谓权限:指的是系统中的资源,资源包括菜单资源(学习情况报表,账号审核…)以及按钮资源 所谓角色:指的是系统中的权限集合(1) 1.用户表 create table t_user( userid varchar(18) primary key, 用户id username varchar(18), 用户名 userpwd varchar(16), 密码 roleId varchar(18) 角...

jiang25810的博客 2596

RBAC权限设计

权限管理是B端产品绕不开的话题,本文总结了我对权限管理的设计经验与设计方法,共分为4个部分:权限管理的概念梳理RBAC权限设计的一般步骤设计功能权限的三板斧:基础版(权限、角色、用户管理)、进阶版(部门、职位、菜单管理)、拓展(版本管理)如何设计数据权限所有内容均根据自身思考实践及经验借鉴而来,如有错误欢迎指正。第一章:权限管理的概念梳理一、权限是什么权限包括了功能权限和数据权限:功能权限是系统执行权限控制的基本单元,包括页面权限、菜单权限、按钮权限等数据权限包

zlc1990628的博客 2640

关于权限设计的探讨

关于权限设计的探讨(寻求数据库设计者和开发人员的帮助)zealberg (冰山)     2003-04-13 09:20:35 在 企业开发 / 企业信息化 提问关于权限设计的探讨               但凡涉及多用户不同权限的网络或者单机程序,都会有权限管理的问题,比较突出的是MIS系统。           下面我要说的是MIS系统权限管理的数据库设计及实现,当然,这些

Hank_Huang的专栏 3011
上一篇: 通用数据权限管理系统设计
下一篇: log4j
zljjava
博客等级 码龄15年 155粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值