基于角色管理(RBAC)的权限系统

这里的权限系统要区分2个概念:

粗粒度:表示类(model)别级,即仅考虑对象的类别(the type of object),不考虑对象的某个特定的实例。比如,对合同这个类别(contract)的管理中,创建、删除等操作,对所有的用户都一视同仁,并不区分具体的对象实例(销售合同,生产合同)。

细粒度:表示实例(instance)级别,即需要考虑具体对象的实例(the instance of object),当然,细粒度是在考虑粗粒度的对象类别之后才再考虑特定实例。比如,销售合同管理中,合同所有者拥有查看、修改、删除等权限,其他用户只有合同的查看权限。

 

权限系统的设计原则:权限逻辑配合业务逻辑。即权限系统以为业务逻辑提供服务为目标。

细粒度的权限问题因为其业务相关性而不具通用意义,它们被理解为是业务逻辑的一部分。比如,要求:某个合同只能被它的创建者删除,与创建者同组的用户可以修改,所有的用户能够浏览。这既是一个细粒度的权限问题,也是一个业务逻辑问题。在这里它是业务逻辑问题,在整个权限系统的架构设计之中不予考虑。当然,权限系统的构架设计也必须要能支持这样的业务逻辑。或者说,系统提供足够多但不是完全的控制能力。即,设计原则归结为:系统只提供粗粒度的权限,细粒度的权限被认为是业务逻辑的职责

权限逻辑 ßà 粗粒度

业务逻辑 ßà 细粒度

概念:

Object:  指系统中各种功能模块,业务模型(Model),业务对象(Object),界面元素等,它是主体能访问到的所有对象。由于对象的类型不同,被访问的权限也不同。

(1)      系统功能模块:系统中除了公用的界面,公用的模块外,其他均为业务功能模块,业务操作在设计阶段完成,因此不存在实例的概念。可以直接针对角色进行授权。

(2)      界面元素:除了功能菜单受到控制外,如要控制功能模块的界面元素其功能模块界面元素也需定义,大部分界面元素均包含有相关的业务功能操作,因此可以与数据模型统一来处理。

(3)      业务模型,业务对象:业务模型是我们的Domain Model,开发人员在设计开发阶段就已经定义好了相关的业务操作,也就是相应的权限。 业务对象是我们业务模型的实例化Domain Object。是用户在系统运行时创建的,因此它的权限也是用户在系统运行时创建的。

粗粒度

 

 

细粒度

 

 

Domain Model

业务模型,比如合同(Contract Model

Domain Object

业务模型的某个实例话对象,比如销售合同(Sell Contract Object

Privilege(Operative, Permission) : Object Related的操作。就是指,这个权限是绑定在特定的对象上的。比如说部门新闻的发布权限,叫做"部门新闻发布权限"。这就表明,该Privilege是一个发布权限,而且是针对部门新闻这种资源的一种发布权限。权限,包括系统定义权限和用户自定义权限,用户自定义权限之间可以指定排斥和包含关系(如:读取,修改,管理三个权限,管理 权限 包含 前两种权限)

Role: 是权限的集合,是粗粒度和细粒度(业务逻辑)的接口。一个基于粗粒度控制的权限框架软件,对外的接口应该是Role,具体业务实现可以直接继承或拓展丰富Role的内容,Role不是如同UserGroup的具体实体,它是接口概念,抽象的通称。Role的继承通过Group来体现,所以不考虑Role的继承关系。但是Role可以与相关的Group相关联,便于授权。

 

Group: 用户组,权限分配的单位与载体,直接映射组织关系。权限不考虑分配给特定的用户。组可以包括组(以实现权限的继承)。组可以包含用户,组内用户继承组的权限。Group要实现继承。即在创建时必须要指定该GroupParent是什么Group。在粗粒度控制上,可以认为,只要某用户直接或者间接的属于某个Group那么它就具备这个Group的所有操作许可。细粒度控制上,在业务逻辑的判断中,User仅应关注其直接属于的Group,用来判断是否同组

但是Group的继承导致的权限继承和组织关系正好相反,组织关系的上层相应的权限更大,所以是一种逆向继承。

User: 纯粹的用户,与权限(operative?permission?privilege)分离,只能通过Role去关联相应的权限。

关系:

 

Privilege ß n : 1 à Resource

Role ß n : n à Privilege

Group ß n : n à User

Group ß n : n à Role

User ß n : n à Role

权限系统的操作模式:

(1): 创造资源,权限:  这里要从粗,细粒度2方面来考虑

粗粒度:开发人员设计DomainModel的时候就定义好相关的操作。比如ContractModel

这个DomainModel,开发人员设计的时候就已经定义好了模型的相关操作,比如查看,修改等等。默认的情况下对所有的Role都是相同的。

         细粒度: 用户创建一个DomainModel的实例DomainObject的时候指定相关的权

限以及权限分配。比如销售合同只能创建者有修改的权限,同Group的人员只能拥有查看的权限。

(2): 分配权限: Administrator指定相关DomainModel的权限分配,创建Role,创建Group,给

Group分配User,给Group赋予某个Role等等。

(3): 使用权限: User 使用 Administrator分配的角色去使用相应的系统功能。

模块划分

1)        对象管理模块。此模块主要负责从粗细粒度对于系统中可提供的资源或资源实例进行管理。

2)        权限管理模块。此模块主要负责对资源权限进行管理。管理员可以在粗细粒度下对资源权限进行管理。用户可以对创建的资源实例进行权限的管理。

3)        角色管理模块。此模块主要负责对角色进行相应的管理(包括添加、删除、修改);对角色所拥有的权限进行相应的管理(包括授予、删除所拥有的权限);对用户和组赋予相应的角色等等

4)        用户管理模块。此模块主要负责对用户进行管理(包括添加、删除、修改);对用户所属的角色进行管理(包括添加、删除);对用户所属的组进行管理。

5)        组管理模块。组映射组织机构,提供对于部门组织机构维护(添加、修改、删除);对组的成员进行维护;对组所拥有的角色进行管理。

笔记

  •  权限与对应资源的对应关系;
  •  权限集合,包含了此系统的所有权限。这个权限只和特定的资源有关,和用户角色没有关系。
  •  角色(Role)管理。一个接口,起到筛选的功能。通过筛选,特定的角色只有特定的权限。
  •  群组权限(Group)。一个用户(User)如果属于一个群组,这个用户(User)自动继承了群组的权限。
  •  权限管理(Privilege),管理员(Administrator)可以动态的修改权限集合和权限的分配情况。

关系图:

 
我们开发业务系统的时候,基本上都会涉及到权限管理模块,要求不同的人看到不同的菜单,操作不同的按钮,看到不同的数据。很多初学者面对这样的需求不知道如何下手,特别是稍微复杂点的权限,更是找不到方向,为此我们夜鹰教程网特别推出了这套基于角色权限管理视频教程,通过给用户分配角色,给角色分配权限,来实现权限管理。这样一来,可以实现不同的人管理不同的菜单,操作不同的按钮,看到不同的数据。可以划分权限组,每个组的成员拥有相同的权限。也可以把同一个人分配到不同的权限组,具有多个权限组的权限,实现权限的组合。 本套教程通过c-s和b-s两种模式讲解,如果没有学过winform开发的学员可以通过本套教程补充下winform开发知识,以桌面程序的方式实现数据的CRUD操作,同时还可以学会一些常用控件的使用,特别是树形菜单的使用,以及递归的编程思想。 C-S部分目录 001 课程介绍 002 效果演示 003 新建项目 004 用户表 005 角色表 006 功能权限表 007 用户分配角色的表 008 角色拥有的菜单权限 009 登录界面设计 010 控件name 011 数据库操作类 012 登录操作 013 用户类 014 新建主窗体 015 主窗体布局 016 树形菜单 017 加载数据 018 递归调用 019 点击事件 020 密码修改 021 设备管理 022 角色列表 023 用户列表 024 新增用户 025 插入用户数据 026 显示用户数据 027 查询用户数据 028 用户数据分页 029 编辑用户数据 030 保存用户数据 031 删除用户数据 032 角色主数据 033 表单验证 034 编辑角色 035 角色数据分页 036 删除角色数据 037 设备列表 038 新增设备 039 设备分页 040 编辑设备 041 删除设备 042 点击菜单打开对应窗体 043 用户参数传递 044 通过构造函数传递参数 045 验证旧密码 046 通过菜单打开用户列表 047 菜单权限 048 权限主数据 049 给用户分配角色 050 显示待分配的菜单权限 051 角色用有菜单权限 052 取消菜单权限 053 保存菜单权限 054 清空旧的菜单权限 055 加载旧的菜单权限 056 功能权限配置 057 加载待分配的功能权限 058 加载已分配的功能权限 059 移动功能权限 060 保存功能权限 061 清空旧功能权限 062 分配数据权限 063 拼接已经分配的权限 064 移除权限 065 角色数据权限保存 066 给用户分配角色 067 待分配的角色 068 判断用户拥有的权限 069 获取功能权限 070 控制功能按钮是否可用 071 不能的用户看到不同的数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值