一直以来,我对用户/权限的理解和使用都是基于以下方法. 刚好在网络上看到该blog,特用为知发上来. 做个总结.接下来
准备用shiro来处理类似的问题.
 
基于角色-页面模型的WEB用户访问控制方法
1:在管理信息系统(MIS:Management Information System)中,针对用于控制
各种用户使用系统的权限和访问的用户授权及权限管理机制的研究得到了普遍
的关注。目前用户权限管理通常采用三种方法:强制访问控制(MAC:Mandatory Access  Control),自主访问控制(DAC:Discretionary Access Control),和基于角色的访问
控制(RBAC:Role-Based Access Control)。其中第三种方式由于其灵活性和相对容易
维护性而被广泛的接受和使用。
2:RBAC模型简介
RBAC的模型图如下:

------------------

模型中主要定义了:用户(User),角色(Role)和用户权限(Permission)
三个主要实体,以及会话(Session)和限制(Constraint)的概念及其之间的关系。
其中,权限是指针对信息系统的操作权利,不同的角色或者不同级别的角色被赋予不同的权限,系统
用户又被赋予一定的(一个或多个)角色。从而用户与角色之间,角色和权限之间均是一个多对多的
关系,用户和权限之间则没有直接的关系,而是根据所具有的责任被赋予某种角色,从而拥有角色相
应的权限。其授权模型示意图如上图所示。
在RBAC模型中,角色是一个相对的概念,用户与角色之间是多对多的关系,并且这一关系可以迅速变化,即用户所"扮演"的角色可以经常的发生变化;角色与权限之间也是多对多的关系,但是这一关系的变化则相对比较的缓慢,即角色拥有的权限是相对稳定。
会话集合中的每个黑点代表一个会话,它控制一个用户的多个角色,有效的控制角色之间的冲突。
即当一个被赋予多个角色的用户使用系统时,这些角色将分为属于若干个会话。用户在任一时间内,
只激活一个会话,从而用户在该时间类仅能扮演该激活会话中所包含的角色,其他角色在该段时间
将为禁用。
使用RBAC模型能够通过用户授权(给用户指定角色)和角色授权(给角色分配操作权限)二个步骤实现
完善的用户权限管理。
3:B/S引用模型下的角色-页面模型
RBAC模型是针对一般的信息系统提出的一个通用的用户权限管理模型,尽管与其他主流模型相比,
它具有了灵活性和易维护性。但是由于该模型中用户与角色,角色和权限之间多对多关系的存在,
其在实际应用的实现中仍然是十分的繁琐的。随着B/S应用模式的系统迅速增加并成为当前信息系统
的主流应用模式,RBAC模型在WEB应用中实现的繁琐性也越来越明显。
大型信息系统中由于用户数量,角色种类,操作权限,还是系统的功能,显示的页面都十分的复杂。
考略WEB应用的页面特性后,该系统的RBAC模型对应的实体-关系模型如图:

------------------------------------------------------------------

B/S应用模式用户权限管理E-R模型。
在该模型中,除了用户-角色,角色-权限之间的多对多关系外,又增加了页面-实体之间的多对多关系,从而表明上看来,用户权限管理的实现变得更加复杂。
但是,可以看出B/S医用模式具有独特特性:用户与应用的交互总是通过浏览器端页面请求和
服务器应用响应来实现,用户的所有操作都是通过对web页面的访问来完成的。
此外,在WEB应用中,WEB页面的创建十分灵活:多个业务逻辑可以放置在一个页面中;同时
,一个业务逻辑可以有一组的多个页面来实现。因此,如果能够按照一定的页面设计原则来创建页
面,把一个用户角色授权的权限所能进行的操作对应到WEB应用中某一个或者某一组页面所能够完成
的功能上面去,则可以通过控制这个或者这组页面对用户的可进行来实现对用户权限的管理,从而大大
的简化上图2的用户权限管理模型。
根据B/S模式的引用特点,可以将RBAC理论进行简化,提出角色-页面模型,并制定如
下模型原则:
原则1:对于一个页面要实现的功能,应该有尽量细粒度的划为,确保在某一页面上
实现的一个或者多个功能值对应某一权限所允许的访问。
根据原则1,则图2的关系可以简化为角色-页面之间多对多的关系,简化后的
模型为:

----------------------------

在图3所示的角色-页面关系模型中,RBAC模型的用户-角色-权限关系在WEB
应用的页面设计符合原则1的条件下,转化成了用户-角色-页面的关系。这
一转化,使web应用中的用户访问权限管理变得容易实现。
4:实际中的一个例子:
 下面是一个系统中的基于角色-页面模型的用户访问权限管理以5张数据库表格为
基础实现。

当一个已登录用户提出对某一面的访问时,应用程序执行如下操作:
1):从页面获取用户ID,若没有获得用户ID,则导向出错提示页面;
2):根据其用户ID从用户-角色关系表格中获得其角色ID;
3):通过角色ID,查询角色-页面关系表格,获得对于该角色时候具备访问该页面权
的判断;
4):如果获得判断是用户具有访问该页面的权利,则显示页面,否则导出错误提示。
其中(1)(4)步骤代码可以放在一个页面片段中,以java为例子:
以"include"的方式引入到需要访问控制的动态页面中;(2)(3)步骤代码放在
javabean或类似程序中。如此使得用户对页面访问控制代码得到大量重用,页面
编程人员几乎不必须花时间来处理访问控制。
(2)(3)步实现的JavaBean部分代码如下:
UserManager.java
public class UserManger{
//判断数据库中是否存在某个用户
public boolean isUserExist(userid){
//查询数据库用户信息,如果存在此用户ID,返回true,否则false
.....
}
//查询某个用户是否具有访问某一页面的权利,如果有则返回true,否则返回false
public boolean hasRight (String userId,String pageId) {
//连接数据库,查询userId的roleId
//查询角色-页面表格中是否存在(userId,pageId)这对记录
}
}
(4)步骤的jsp片段内容如下:
rightjudge.jsp
<%
String userId = (String)Session.getValue("userId");
UserManager um = new UserManager();
if (userId == null || (! um,isUserExist(userId))) {
response.sendRedirect("xxxx.jsp");
}
if (!um.hasRight(userId,"pageId")) {
response.sendRedirect("xxx.jsp");
}
%>
5:总结:
在B/S引用模型下,建立角色和页面的对应关系,通过控制页面对用户是否可见来实现用户权限的管理,
其最大优势在于:简化了RBAC模型的思想,减少了应用编程思想中繁琐的权限判断逻辑代码,大量减少了编程
工作量,使Web引用的开发更加的迅速。
缺点:由于这种方式将页面功能和用户的角色绑定起来,权限控制的粒度取决于对于页面实现功能的划分:
页面实现的功能越少,控制粒度越细,灵活性和扩展性就高,但是造成应用的页面过多,开发和管理困难;
反之,页面的功能越强,但灵活性和扩展性就越差。因此,该方法需要在设计阶段必须有合适的页面-功能
的划分,这一点对于应用的实施来说具有相当大的难度。

更多 0

WEB用户访问控制方法的更多相关文章

  1. 转 Web用户的身份验证及WebApi权限验证流程的设计和实现

    前言:Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能,一个功能复杂的业务应用系统,通过角色授权来控制用户访问,本文通过Form认证,Mvc的Controller基类及Action的权 ...

  2. SQLServer控制用户访问权限表

    连接地址:http://www.cnblogs.com/yxyht/archive/2013/03/22/2975880.html 一.需求 在管理数据库过程中,我们经常需要控制某个用户访问数据库的权 ...

  3. 如何测试本机的公网IP能否被Internet用户访问

    声明:本机的公网IP是指ADSL拨号方式取得的公网IP,并非指固定公网IP. 一.新建IIS站点 xp系统需要有安装包才能安装IIS服务 windows7及以上与系统直接在windows->控制 ...

  4. 使用iptables防火墙限制web的访问PV

    使用iptables防火墙限制web的访问PV #!/bin/bash while true;do awk '{print $1}' /tmp/test/access.log| grep -v &qu ...

  5. httpd 配置用户访问认证

    需求:单用户访问网站的某个目录,需要使用帐号密码来登录才能访问. 一.编辑虚拟主机的配置文件,添加目录级访问限制 <Directory "/var/www/html/demo" ...

  6. YII设置用户访问过滤

    设置用户访问过滤 1.哪个控制器设置访问过滤,就在哪个控制器中添加如下代码 class XxxController extends Controller { //当前控制器是否使用过滤功能 publi ...

  7. Web用户自定义控件

    在新建项的时候,选择Web用户控件,可用来自定义自己的控件,做好后,直接拖到页面即可使用自定义控件与WEB交互,需要在 自定义控件里面 写 属性,如: public string CityID { g ...

  8. oracle授权另外一个用户访问自己创建的数据对象

    oracle安装好之后,有一个默认的scott用户,该用户有一个默认的emp表,怎样让新创建的用户也能够访问这个表呢? 授权xiaoming这个用户访问emp表,但是xiaoming只有select权 ...

  9. SAMBA用户访问指定的目录

    指定某个用户访问一个特定的共享文件夹sfx 用户可以访问abc目录 别的用户不可以访问abc目录 先创建一个用户命令useradd sfx 创建一个smbpasswd用户 在创建这个用户时要先创建一个 ...

随机推荐

  1. IOS 杂笔-16 (-(void)scrollViewDidEndScrollingAnimation:方法使用注意)

    今天在写项目的时候,遇到了一件令人抓狂的事情. 正如标题所示,被这个方法弄的团团转. -(void)scrollViewDidEndScrollingAnimation:是协议里的方法. 意味当动画结 ...

  2. 支付宝Andfix 原理解析

    支付宝Andfix 原理解析 使用参考地址: http://blog.csdn.net/qxs965266509/article/details/49802429 原理参考地址: http://blo ...

  3. Data import/export of Netezza using external table

    Introduction External table is a special table in Netezza system, which could be  used to import/exp ...

  4. Win7(32bit)下Qt5.5.0和OpenCV2.4.9环境的搭建

    之前一直基于Windows平台(Win 7 32bit)使用VS2010做OpenCV的开发,现在开始学习在Windows 下使用Qt做OpenCV的开发.本文主要讲述Windows平台下(Win 7 ...

  5. jQuery Ready 与 Window onload 的区别(转)

    “我们都知道,很多时候,在页面加载完后都需要做一些相应的初始化动作.例如,运行某些js特效,设置表单等等.怎么知道页面加载完了呢?一 般情况下都是设置body标签的onload监听window的loa ...

  6. 用ASP.NET Core 1.0中实现邮件发送功能

    准备将一些项目迁移到 asp.net core 先从封装类库入手,在遇到邮件发送类时发现在 asp.net core 1.0中并示提供SMTP相关类库,于是网上一搜发现了MailKit 好东西一定要试 ...

  7. 洛谷P2633 王后万岁

    题目描述 byteland的王后深受百姓爱戴.为了表达他们的爱,国民们打算占领一个新的国家,并以王后的名字命名.这个国家有n座城市.城市之间有双向道路连接,且每两个城市之间有且仅有一条道路.每座城市对 ...

  8. 导出Excel Gridview

    /// <summary>    /// 定义导出Excel的函数    /// </summary>    /// <param name="FileType ...

  9. MATLAB新手教程

    MATLAB新手教程   .MATLAB的基本知识 1-1.基本运算与函数    在MATLAB下进行基本数学运算,仅仅需将运算式直接打入提示号(>>)之後,并按入Enter键就可以.比如 ...

  10. oracle object_id和data_object_id的区别

    Oracle的数据字典表dba_objects包含了两个字段,object_id, data_object_id,官方文档上的解释是: object_id: Dictionary object num ...