针对这样的需求,版本一就无能为力了(当然你也可以增加几个功能:比如分类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语句就不是现在这么简单了)。在我现在的应用里面没有实现角色的继承(虽然角色的编码体现出了角色的父子关系)。

基于角色的权限设计(二)相关推荐

  1. 基于角色的权限设计(一)

    在任何系统中,权限设计是最基础的东西,本文给出一个基于角色的权限设计的循序渐进的设计方案. 在权限系统中,功能(权限)是最小的单位,比如起草新闻.编辑新闻.审核新闻.删除新闻等,而角色是一类功能的集合 ...

  2. OAuth2在分布式微服务架构下基于角色的权限设计(RBAC)

    在前两节的基础上,对权限控制作进一步的分析与设计. RBAC(Role-Base Access Control,基于角色的访问控制) 本篇内容基于个人理解,不当之处,欢迎批评指正. 前两篇内容: [图 ...

  3. 基于角色的权限控制模型RBAC

    本文来说下基于角色的权限控制模型RBAC 文章目录 概述 RBAC权限模型简介 RBAC的演化进程 用户与权限直接关联 一个用户拥有一个角色 一个用户一个或多个角色 页面访问权限与操作权限 数据权限 ...

  4. 数据库管理员用户角色组权限设计

    一.引言 因为做过的一些系统的权限管理的功能虽然在逐步完善,但总有些不尽人意的地方,总想抽个时间来更好的思考一下权限系统的设计. 权限系统一直以来是我们应用系统不可缺少的一个部分,若每个应用系统都重新 ...

  5. RBAC(Role-Based Access control)权限模型--基于角色的权限分配解决方案

    一.背景 为了达成不同的帐号登陆系统后能看到不同的页面,能执行不同的功能的目标,我们有很多种解决方案,RBAC(Role-Based Access control)权限模型 ,也就是基于角色的权限分配 ...

  6. 基于RBAC的权限设计

    来源:http://www.phpchina.com/html/73/5173_itemid_10049.html 基于RBAC 的权限设计模型: 1        RBAC 介绍   RBAC 模型 ...

  7. RBAC(基于角色的权限访问控制)

    第一节.RBAC简介 英文全称(Role-Based Access Control) 中文全称:基于角色的权限访问控制 rbac: 一种数据库设计思想,根据设计数据库设计方案,完成项目的权限控制. 经 ...

  8. AspNetForums中基于角色的权限控制

    AspNetForums中基于角色的权限控制 http://blog.joycode.com/dotey/archive/2005/02/24/44791.aspx asp.net页面如何控制页面依据 ...

  9. 后台产品基本功:RBAC权限后台角色与权限设计

    原创: Kevin改变世界的点滴 Kevin改变世界的点滴 昨天 后台产品经理在设计系统中,随着业务与用户量起来后.都会考虑系统的角色与权限设计.借此经典的角色 与权限设计:RBAC,基于角色的权限访 ...

最新文章

  1. 您试图从目录中执行CGI、ISAPI 或其他可执行程序,但该目录不允许执行程序
  2. Java的从业方向是什么?好找工作吗?
  3. 定了!2022考研时间公布!
  4. Algorithm -- 全排列
  5. php pod模式,k8s pod的4种网络模式最佳实战(externalIPs )
  6. 程序员面试金典——7.2碰撞的蚂蚁
  7. MOSEK优化包的安装、使用及注册:以Matlab中的二次规划为例
  8. 机器学习系列(11)_决策树挖掘NBA冠军球队数据
  9. window下webrtc编译m84
  10. matlab里逻辑符号,下列符号中不属于MATLAB逻辑操作符的是()
  11. 【滴水逆向笔记】C语言指针
  12. jsp汽车零配件销售进销存系统
  13. 【H5+ Quick-cocos2dx整合】之iOS 二 集成H5+ SDK
  14. python做性能测试框架_python常用web框架简单性能测试结果分享(包含dja
  15. ChatGPT原理解析以及使用方法介绍
  16. 合天——SQL注入实验一
  17. 《目标检测蓝皮书》第3篇 卷积神经网络
  18. oracle数据库的基本教程 pdf,Oracle数据库技术基础教程 PDF 下载
  19. 百度区块链“度宇宙”百度“图腾”都是区块链,有什么不同呢?
  20. 离散化传递函数c语言,连续传递函数离散化的方法与原理

热门文章

  1. piaoxue/feixue驱动程序分析
  2. 测试工具/PostMan
  3. mysqlsla slow-query常用用法
  4. HDU——1498 50 years, 50 colors
  5. android view自定义
  6. Broadcast Receiver广播接收器
  7. 剑指Offer(Java版):扑克牌的顺序
  8. linux的套接口和管道
  9. [收藏] 王永民先生:自我白描
  10. Radware:当前,CDN安全远远不足