ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计
ASP.NET MVC+EF框架+EasyUI实现权限管系列
(开篇) (1):框架搭建 (2):数据库访问层的设计Demo (3):面向接口编程 (4 ):业务逻辑层的封装
(5):前台Jquery easyUI实现 (6):EF上下文实例管理 (7):DBSession的封装 (8):DBSession线程内唯一
(9):TT摸版的学习 (10):VSS源代码管理 (11):验证码实现和底层修改 (12):实现用户异步登录和T4模板
前言:前面的系列博客可以说是我们这个系列博客的精髓,那么今天写的这篇博客就是我们精髓中得精髓,因为这篇我开始分析一下权限的设计,如何设计一个好的权限并且为什么要这么设计,在这篇博客中我希望大家能够对我的设计提出意见,当然了权限这种东西在网上是在能搜到很多的资料,我也是基于别人的平台写的,在最后我会发出他的网址,希望大家能够支持我,那么我们今天来介绍我们今天的模块。
1. 什么是权限??
(1)对于很多刚学编程的人你说权限的话他会误以为你是在说用户的登录限制,我曾经遇到很多这样的人,小透漏一下,其实刚开始我也是这样以为的,我也以为权限就是用户登录,可是去年我在长春工作的时候我们的主任(许**),名字这里就不说了,设计个人的隐私(当然你们要是没事的话可以人肉一下),嘿嘿,他当时就让我研究这块,然后给写个文档,我花了好几天的时间整这个东西,最后我们小组讨论扩展成了我们项目的权限,所以大家不要以为权限就是用户登录,那是错误的,下面看我解释权限。
(2)权限跟用户登录是没有任何关系的,但是要用到用户的数据,权限就是在请求我们系统的一个服务(请求地址,请求方法,请求Action,请求WebService等)的时候,当在请求之前的时候我们先要去校验你这个用户有没有访问当前这个请求的权力,如果你有这个权力的话,我们就让你访问,负责你访问不了这个请求。
(3)那么我们举一个很典型的的例子来说明权限(我就不自己想了,到处都是,我那当初老马给我们讲的那个例子吧,记忆犹新),比如我们军队有武器的仓库,随便去一个士兵要到武器仓库中去取武器,能让他去取嘛?答案当然是肯定不能让了。为什么呢,比如这个士兵刚被他的领导人骂了一顿,这个士兵非常生气,直接去仓库说给我来一个导弹,然后拿着导弹把领导人一导弹不知道弄到哪里去了,这样可以吗?当然不行了,所以我们仓库里面的武器不能随便给人,当你去的时候首先管仓库的人看你有没有权限,如果没有,你当然进不去了,这就是一个很简单的权限的例子,也很牵强,不过理解一下还是可以的。记得当时老马讲的时候非常搞笑。
(4)权限里面最重要的实体也就只有三个(用户,角色,操作),他们之间最重要的也就是实体的关系,如果我们把他们三个之间的关系弄清楚了,权限这个模块你基本就算搞定了。
2.权限初步设计
(1)在上面我们就说了权限里面最重的就只有三张表(用户,角色,操作),其他的都是围绕着着这三个模块来扩展的一些关系表。
(2)下面我就分成好几个类来介绍一下各种创建权限之间的区别,我的这篇博客是参考玉开的写的,大致内容基本相同,只是我在其上面写了一些详细的信息,希望大家见谅。版权问题我一向挺重视的,所以我申明一下,下面我还是按照人家的步骤来解释吧。
3.基于角色的设计
(1)基于角色的设计就是有一张用户表(Kencery,HYL)存放的是用户的数据,一张角色表(超级管理员,普通管理员,普通客户)存放的是角色的信息,然后中间生成了一张中间表,这就是简单的基于角色的设计。
(2)上面这种设计方案是最常见的方案,尤其是在各个网站等权限不太明显的地方大部分使用的是上面的这种方案,也就是说某用户你只要有这个角色,你就可以访问某些页面,这种设计方案的话用户和角色的关系在数据库中的关系是多对多(一个人可以有多个角色,一个角色可以被多个人拥有),怎么来体现是多对多的关系呢,我们只能加一个中间的关联表。那么表结构如下:

(3)通过上面这张图就完完整整地诠释了我上面所解释的内容,因为这个比较简答,所以到这里也就解释完了,这里设计了数据库中多对多的关系,如果大家谁不太清楚的话,可以在下面给我留言或者直接加我的QQ群询问我(如果我再的话,一定回答),我就在这里不解释多对多了。
(4)这种设计方案的缺点就是权限控制力度小,如果时间长的话中间表会变得很庞大,很冗余,权限控制不精确。
4.基于操作的设计
(1)什么是操作的设计呢?就是把我们系统里面的每一个动作都抽象出来抽象成一个操作(Action),当我们点击某一个按钮的时候就是一个操作,一个动作,只要是我们对网站(或者系统)做任何的操作就是一个动作(Action),那么这个动作我们当前的用户有没有权力去操作,只有当动作和用户关联起来了,就允许我们去访问这个动作。
(2)如果按照上面这种设计的话,那么我们的动作将会非常的多,如果一个稍微大点的系统的话,那么这个动作就不知道多到哪里去了,这样的话我们的Action这张表的数据就会非常的大,这样还是不会达到我们的需求的,这种设计模式的表结构如下:

5.基于角色-操作的设计
(1)通过4的设计方案我们能够感觉到如果那样设计的话Action这张表的数据将会非常的大,那么我们能不能针对这个问题解决一下呢,当然是可以的,我们可以对这个动作(Action)再进行一次分组,这时候我们就提出来了角色,那么角色是怎么一回事呢,请继续看。
(2)角色:只要你创建一个角色,这个角色就会关联一组动作,那么如果只要用户加入这个角色,那么这个角色关联的所有动作是不是用户也都具有了呢,也就是你都可以去访问这个角色下面关联的这组动作。所以角色也可以说成是动作的分组。
(3)那么我们把角色和操作柔和到一块,这种设计方式的表结构如下:

6.将4和5组合起来的权限设计
(1)当我们看到上面基于角色-权限的设计的时候可能大部分都会认为这样的设计已经很好了啊,但是我要说的是虽然很好,还不够完美, 我们编程人员要的就是完美,那么哪里不完美了呢?下面我就举个例子来说一下:
(2)比如我们公司要找短期工,也就是干一两个月就走的这种人,当他们来到公司的时候,我们就要给这些员工我们公司内部系统的权限访问,这时候我们按照上面的设计的话,我们又要新增一个零时工的角色,但是这种零时工的角色完全是不必要的,因为他们在这里只是待一段时间,所以我认为没有必要再为他们创建角色,当离开的时候我们又要删除角色,那么此时我们就要设计一个更加符合这种规则的权限,也就诞生了将4和5组合起来的权限,下面看我详细解释一下这个权限的作用。
(3)这个权限是在用户和动作上面有加了一张表,这张表就是用户的特殊权限表,在前面的设计中我们用户和权限关联是通过角色来关联的(可以看第5种方法),而现在我们用户和动作之间又有了一张动作表。那么这种设计方式的表结构如下:

7.本系统权限设计
(1)通过上面(1),(2),(3),(4),(5),(6)的介绍,我相信大家对权限的设计现在已经理解的差不多了吧,那么大家可能会疑惑我用那种权限来实现呢,上面介绍了4种,这里我们当然是按照最后一种权限来设计的,只有这样的权限设计才能称得上是好的权限设计,那么我们废话就不多说了,我们开始就建立我们本项目的权限设计。
(2)在我们开发项目的时候我们的数据库字段很有可能不能考虑完全,这时候我们就需要在最后的时候添加字段,这种问题非常常见,因为用户的需求是变化的,所以我们开发人员也不要忌讳这点,我们只有将我们的项目做的可扩展性高或者额外的预留几个字段,但是大家也能想来这里的不好,我就不说了。
(3)MVC和WebForm设计的权限表是不一样的,我这里针对的是MVC设计的权限,如果大家要对WebForm设计权限的话还要在这个基础上面再考虑一些字段的加入。
(4)那么综上所述,我们用户权限最终的设计页面如图所示:

8.小结
(1)这篇博客我们就将我们的权限模型设计好了,如上图展示,相信大部分用户还是能看明白的,这篇博客其实主要还是参考玉开的那篇博客所写,只不过是写的更加的针对我这个项目,并且更加的详细,希望搭建能够喜欢。
(2)从下篇博客我们开始讲述前台EasyUI框架的搭建,搭建这个框架的时候,我刚开始举个例子,后面的我就是截图展示给大家,希望大家能够谅解。
(3)今天就写到这里吧,希望大家能对我的博客提出宝贵的意见,我将非常乐意来和大家共同探讨,如果有问题的话可以加我的群,在群里找我我们共同研究。
参考文档:这是玉开写的一篇博客,我的也是从人家的上面参考而来。http://www.cnblogs.com/yukaizhao/archive/2007/04/15/user_role_action_permission.html
Kencery返回本系列开篇
相信自己,你就是下一个奇迹!
ASP.NET MVC+EF框架+EasyUI实现权限管理系列(13)-权限设计的更多相关文章
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(24)-权限组的设计和实现(附源码)(终结)
ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2):数据库访问层的设计Demo (3):面向接口编程 (4 ):业务逻辑层的封装 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(23)-设置角色遗留问题和为权限设置角色以及EasyUI Tabs的使用
ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2):数据库访问层的设计Demo (3):面向接口编程 (4 ):业务逻辑层的封装 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(22)-为用户设置角色
ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2):数据库访问层的设计Demo (3):面向接口编程 (4 ):业务逻辑层的封装 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列
http://www.cnblogs.com/hanyinglong/archive/2013/03/22/2976478.html ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(21)-用户角色权限基本的实现说明 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(20)-多条件模糊查询和回收站还原的实现 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(19)-用户信息的修改和浏览
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(19)-用户信息的修改和浏览 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除)
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(18)-过滤器的使用和批量删除数据(伪删除和直接删除) ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证)
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(17)-注册用户功能的细节处理(各种验证) ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框 ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(16)-类库架构扩展以及DLL文件生成修改和用户的简单添加 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) ...
随机推荐
- Codeforces Round #258 (Div. 2) B. Sort the Array
题目链接:http://codeforces.com/contest/451/problem/B 思路:首先找下降段的个数,假设下降段是大于等于2的,那么就直接输出no,假设下降段的个数为1,那么就把 ...
- OTN&互换amp; P-OTN有效降低100G 网络成本 (两)
OTN互换& P-OTN有效降低100G 网络成本 (两) 在全球范围内.网流量的增长速度是空前的,导致此现象的缘由包含云服务的增长.移动宽带和基于互联网的视频点播服务的增长. Cisco估计 ...
- HTML5实际和离线应用分析
当前离线Web申请书,即,该装置不能访问因特网时的应用的执行.HTML5离线应用重点,主要开发人员希望.步骤离线应用开发有:首先我们应该知道设备是否可以连接;然后,它也应该可以访问某些资源(像.CSS ...
- S如何解决安卓DK无法下载Package问题
安装一些用户Android SDK后.打开Android SDK Manager下载API当总是显示"Done loading packages"却迟迟不能前进.自己也出现了这样的 ...
- CentOS7.0 安装JAVA周围环境
CentOS7.0 安装JAVA周围环境 安装JDK 1.配置JDK环境变量 把下载好的JDK(jdk-7u75-linux-x64.gz)文件上传到 Reg: /home/p2pweb/java/ ...
- 他们主动布局(autolayout)环境的图像编辑器
hi,all: 在经过了一番犹豫之后.我决定将我自己做的这个小APP的源代码发布给大家: 其出发点是和大家一起学习iOS开发.仅供学习參考之用. 之前代码是托管与gitlab 上的,今天我将其pull ...
- 告别乱码,针对GBK、UTF-8两种编码的智能URL解码器的java实现(转)
效果图 字符 字符是早于计算机而存在,从人类有文明那时起,人们就用一个个符号代表世间万象.如ABC,如“一.二.三”. 字符集 字符集是所有字符的集合. XXX字符集 给字符集中的每一个字符套上一个序 ...
- GitLab一键式安装bitnami
https://bitnami.com/stack/gitlab/installer https://bitnami.com/redirect/to/96764/bitnami-gitlab-8.5. ...
- LINQ之路(3):LINQ扩展
本篇文章将从三个方面来进行LINQ扩展的阐述:扩展查询操作符.自定义查询操作符和简单模拟LINQ to SQL. 1.扩展查询操作符 在实际的使用过程中,Enumerable或Queryable中的扩 ...
- nodejs 复制、移动文件
对路径没有做验证 复制文件 var fs = require('fs'); var path = require('path'); var fileName = "coverflow-3.0 ...