﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-小菜毛毛技术分享-文章分类-rbac 权限管理模型</title><link>http://www.blogjava.net/caizh2009/category/39578.html</link><description>与大家共同成长</description><language>zh-cn</language><lastBuildDate>Thu, 14 May 2009 11:44:15 GMT</lastBuildDate><pubDate>Thu, 14 May 2009 11:44:15 GMT</pubDate><ttl>60</ttl><item><title>基于rbac 的权限设计</title><link>http://www.blogjava.net/caizh2009/articles/270622.html</link><dc:creator>小菜毛毛</dc:creator><author>小菜毛毛</author><pubDate>Thu, 14 May 2009 07:47:00 GMT</pubDate><guid>http://www.blogjava.net/caizh2009/articles/270622.html</guid><wfw:comment>http://www.blogjava.net/caizh2009/comments/270622.html</wfw:comment><comments>http://www.blogjava.net/caizh2009/articles/270622.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caizh2009/comments/commentRss/270622.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caizh2009/services/trackbacks/270622.html</trackback:ping><description><![CDATA[<p style="margin: 0cm 0cm 0pt 21.25pt; text-indent: -21.25pt; line-height: 150%; text-align: left; tab-stops: list 21.25pt" align="left"><span style="font-size: 16pt; line-height: 150%; font-family: 宋体"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">基于<span>RBAC的权限设计模型：<span> </span></span></span></span>
<p style="margin: 0cm 0cm 0pt 21.25pt; text-indent: -21.25pt; line-height: 150%; text-align: left; tab-stops: list 21.25pt" align="left"><strong><span style="font-size: 16pt; line-height: 150%; font-family: 宋体">1<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></strong><strong><span style="font-size: 16pt; line-height: 150%; font-family: 宋体">RBAC</span></strong><strong><span style="font-size: 16pt; line-height: 150%; font-family: 宋体">介绍<span> </span></span></strong>
<p style="margin: 0cm 0cm 0pt 35.45pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">RBAC</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">模型作为目前最为广泛接受的权限模型。<span> </span></span>
<p style="margin: 0cm 0cm 0pt 35.45pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">NIST</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">（The National Institute of Standards and Technology，美国国家标准与<a onclick="javascript:tagshow(event, '%BC%BC%CA%F5');" href="javascript:;" target="_self"><u><strong>技术</strong></u></a>研究院）标准RBAC模型由4个部件模型组成，这4个部件模型分别是基本模型RBAC0（Core RBAC）、角色分级模型RBAC1（Hierarchal RBAC）、角色限制模型RBAC2（Constraint RBAC）和统一模型RBAC3（Combines RBAC）<sup>[1]</sup>。RBAC0模型如图1所示。<span> </span></span>
<p style="margin: 0cm 0cm 0pt; text-align: center" align="center"><span style="font-size: 10pt; font-family: 黑体"><shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600">
</formulas>
</shapetype><shape id="_x0000_i1025" style="width: 361.5pt; height: 108pt" alt="RBAC 0模型.JPG" type="#_x0000_t75"><imagedata o:href="/images/blogjava_net/bluedavy/RBAC%200%E6%A8%A1%E5%9E%8B.JPG" src="file:///D:"  Temp?msohtml1?01?clip_image001.jpg?><img title="点击图片可在新窗口打开" style="cursor: pointer" height="144" alt="clip_image001.jpg" src="http://www.blogjava.net/images/blogjava_net/anwenhao/clip_image001.jpg" width="482" border="0" /></imagedata></shape><br />
</span><span style="font-size: 10pt; font-family: 黑体">图表</span><span style="font-size: 10pt; font-family: Arial">1 RBAC 0</span><span style="font-size: 10pt; font-family: 黑体">模型</span><font size="3"><font face="宋体, MS Song"><span style="font-size: 12pt; font-family: 宋体"> </span></font></font>
<p style="margin: 0cm 0cm 0pt 48pt; text-indent: -21pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; line-height: 150%; font-family: Wingdings">l</span><span style="font-size: 7pt; line-height: 150%">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">RBAC0</span></strong><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">定义了能构成一个RBAC控制系统的最小的元素集合</span></strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"> </span>
<p style="margin: 0cm 0cm 0pt 48pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">在RBAC之中,包含用户users(USERS)、角色roles(ROLES)、目标objects(OBS)、操作operations(OPS)、许可权permissions(PRMS)五个基本数据元素，权限被赋予角色,而不是用户，当一个角色被指定给一个用户时，此用户就拥有了该角色所包含的权限。会话sessions是用户与激活的角色集合之间的映射。RBAC0与传统访问控制的差别在于增加一层间接性带来了灵活性，RBAC1、RBAC2、RBAC3都是先后在RBAC0上的扩展。<span> </span></span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt; font-family: Wingdings">l</span><span style="font-size: 7pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><span style="font-size: 12pt; font-family: 宋体">RBAC1</span></strong><strong><span style="font-size: 12pt; font-family: 宋体">引入角色间的继承关系</span></strong><span style="font-size: 12pt; font-family: 宋体"> </span>
<p style="margin: 0cm 0cm 0pt 48pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">角色间的继承关系可分为一般继承关系和受限继承关系。一般继承关系仅要求角色继承关系是一个绝对偏序关系，允许角色间的多继承。而受限继承关系则进一步要求角色继承关系是一个树结构。<span> </span></span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt; font-family: Wingdings">l</span><span style="font-size: 7pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><span style="font-size: 12pt; font-family: 宋体">RBAC2</span></strong><strong><span style="font-size: 12pt; font-family: 宋体">模型中添加了责任分离关系</span></strong><span style="font-size: 12pt; font-family: 宋体"> </span>
<p style="margin: 0cm 0cm 0pt 48pt; line-height: 150%; text-align: left" align="left"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">RBAC2</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">的约束规定了权限被赋予角色时,或角色被赋予用户时,以及当用户在某一时刻激活一个角色时所应遵循的强制性规则。责任分离包括静态责任分离和动态责任分离。约束与用户-角色-权限关系一起决定了RBAC2模型中用户的访问许可。<span> </span></span>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt; font-family: Wingdings">l</span><span style="font-size: 7pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><strong><span style="font-size: 12pt; font-family: 宋体">RBAC3</span></strong><strong><span style="font-size: 12pt; font-family: 宋体">包含了RBAC1和RBAC2</span></strong><span style="font-size: 12pt; font-family: 宋体"> </span>
<p style="margin: 0cm 0cm 0pt 26.95pt; text-indent: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">既提供了角色间的继承关系，又提供了责任分离关系。<span> </span></span>
<p style="margin: 0cm 0cm 0pt 26.95pt; text-indent: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">建立角色定义表。定出当前系统中角色。<span> </span></span>
<p style="margin: 0cm 0cm 0pt 26.95pt; text-indent: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">因为有继承的问题，所以角色体现出的是一个树形结构。<span> </span></span>
<p style="margin: 0cm 0cm 0pt 26.95pt; text-indent: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"><shape id="_x0000_i1026" style="width: 320.25pt; height: 4in" type="#_x0000_t75"><imagedata src="file:///D:" o:title=""  Temp?msohtml1?01?clip_image002.emz?><img title="点击图片可在新窗口打开" style="cursor: pointer" height="407" alt="test.bmp" src="http://www.blogjava.net/images/blogjava_net/anwenhao/未命名1.bmp" width="603" border="0" /></imagedata></shape> </span>
<p style="margin: 0cm 0cm 0pt 21.25pt; text-indent: -21.25pt; line-height: 150%; text-align: left; tab-stops: list 21.25pt" align="left"><strong><span style="font-size: 16pt; line-height: 150%; font-family: 宋体">2<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></strong><strong><span style="font-size: 16pt; line-height: 150%; font-family: 宋体">权限设计：<span> </span></span></strong>
<p style="margin: 0cm 0cm 0pt 26.95pt; text-indent: 21pt; line-height: 150%">
<p style="margin: 0cm 0cm 0pt 26.95pt; text-indent: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">配置资源以及资源的操作 ： 这里资源可以定义为一个通用的资源模型。提供通用的资源统一接口。<span> </span></span>
<p style="margin: 0cm 0cm 0pt 26.95pt; text-indent: 21pt; line-height: 150%">
<p style="margin: 0cm 0cm 0pt 26.95pt; text-indent: 21pt; line-height: 150%">
<p style="margin: 0cm 0cm 0pt 26.95pt; text-indent: 21pt; line-height: 150%">
<p style="margin: 0cm 0cm 0pt 26.95pt; text-indent: 21pt; line-height: 150%">
<p style="margin: 0cm 0cm 0pt 26.95pt; text-indent: 21pt; line-height: 150%">
<p style="margin: 0cm 0cm 0pt 26.95pt; text-indent: 21pt; line-height: 150%"><span style="font-family: 宋体"><a onclick="javascript:tagshow(event, '%CA%FD%BE%DD%BF%E2');" href="javascript:;" target="_self"><u><strong>数据库</strong></u></a></span>ER<span style="font-family: 宋体">图：</span></p>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><shape id="_x0000_i1027" style="width: 414.75pt; height: 241.5pt" type="#_x0000_t75" o:ole=""><imagedata src="file:///D:" o:title=""  Temp?msohtml1?01?clip_image004.emz?><img title="点击图片可在新窗口打开" style="cursor: pointer" height="322" alt="clip_image002.gif" src="http://www.blogjava.net/images/blogjava_net/anwenhao/clip_image002.gif" width="553" border="0" /></imagedata></shape></p>
<p style="margin: 0cm 0cm 0pt; line-height: 150%">
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">关系图：<span> </span></span>
<p style="margin: 0cm 0cm 0pt; line-height: 150%">
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"><shape id="_x0000_i1028" style="width: 414.75pt; height: 314.25pt" type="#_x0000_t75"><imagedata src="file:///D:" o:title=""  Temp?msohtml1?01?clip_image006.emz?><img title="点击图片可在新窗口打开" style="cursor: pointer" height="419" alt="clip_image003.gif" src="http://www.blogjava.net/images/blogjava_net/anwenhao/clip_image003.gif" width="553" border="0" /></imagedata></shape> </span>
<p style="margin: 0cm 0cm 0pt; line-height: 150%">
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体"><shape id="_x0000_i1029" style="width: 414.75pt; height: 553.5pt" type="#_x0000_t75"><imagedata src="file:///D:" o:title=""  Temp?msohtml1?01?clip_image008.emz?><img title="点击图片可在新窗口打开" style="cursor: pointer" height="739" alt="未命名.bmp" src="http://www.blogjava.net/images/blogjava_net/anwenhao/未命名.bmp" width="603" border="0" /></imagedata></shape> </span>
<p style="margin: 0cm 0cm 0pt; line-height: 150%">
<p style="margin: 0cm 0cm 0pt 21.25pt; text-indent: -21.25pt; line-height: 150%; text-align: left; tab-stops: list 21.25pt" align="left"><strong><span style="font-size: 16pt; line-height: 150%; font-family: 宋体">3<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></strong><strong><span style="font-size: 16pt; line-height: 150%; font-family: 宋体">分析：<span> </span></span></strong>
<p style="margin: 0cm 0cm 0pt; line-height: 150%">
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp;</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">根据以上的类关系图和ER图可以看出。整个权限可以抽象为五个<a onclick="javascript:tagshow(event, '%B6%D4%CF%F3');" href="javascript:;" target="_self"><u><strong>对象</strong></u></a>组成。<span> </span></span>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">OrgBean :</span></strong><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">用于描述org模型。<span> </span></span></strong>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">Role</span></strong><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">： 用于描述角色。<span> </span></span></strong>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">Permission</span></strong><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">： 用于描述权限。<span> </span></span></strong>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">Resource</span></strong><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">： 用于描述资源。<span> </span></span></strong>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">Operation</span></strong><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">： 用于描述操作。<span> </span></span></strong>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><strong></strong>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><strong><span style="font-size: 12pt; color: #3366ff; line-height: 150%; font-family: 宋体">其中Permission中有Resource , Operation的聚合，资源和操作组成权限。<span> </span></span></strong>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><strong><span style="font-size: 12pt; color: #3366ff; line-height: 150%; font-family: 宋体">Role</span></strong><strong><span style="font-size: 12pt; color: #3366ff; line-height: 150%; font-family: 宋体">和Permission都有自包含。因为设计到权限的继承。<span> </span></span></strong>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><strong><span style="font-size: 12pt; color: #3366ff; line-height: 150%; font-family: 宋体">资源Resource也可能出现一颗树形结构，那资源也要有自包含。<span> </span></span></strong>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><strong></strong>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><strong><span style="font-size: 14pt; color: black; line-height: 150%; font-family: 宋体">思想</span></strong><strong><span style="font-size: 14pt; color: black; line-height: 150%">: </span></strong>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left" align="left"><span style="font-size: 12pt; color: black; font-family: 宋体">权限系统的核心由以下三部分构成：</span><span style="font-size: 12pt; color: black; font-family: Arial">1.</span><span style="font-size: 12pt; color: black; font-family: 宋体">创造权限，</span><span style="font-size: 12pt; color: black; font-family: Arial">2.</span><span style="font-size: 12pt; color: black; font-family: 宋体">分配权限，</span><span style="font-size: 12pt; color: black; font-family: Arial">3.</span><span style="font-size: 12pt; color: black; font-family: 宋体">使用权限，然后，系统各部分的主要参与者对照如下：</span><span style="font-size: 12pt; color: black; font-family: Arial">1.</span><span style="font-size: 12pt; color: black; font-family: 宋体">创造权限</span><span style="font-size: 12pt; color: black; font-family: Arial">-</span><span style="font-size: 12pt; font-family: Arial">Creator</span><span style="font-size: 12pt; color: black; font-family: 宋体">创造，</span><span style="font-size: 12pt; color: black; font-family: Arial">2.</span><span style="font-size: 12pt; color: black; font-family: 宋体">分配权限</span><span style="font-size: 12pt; color: black; font-family: Arial">- Administrator</span><span style="font-size: 12pt; color: black; font-family: 宋体">分配，</span><span style="font-size: 12pt; color: black; font-family: Arial">3.</span><span style="font-size: 12pt; color: black; font-family: 宋体">使用权限</span><span style="font-size: 12pt; color: black; font-family: Arial">- User</span><span style="font-size: 12pt; font-family: 宋体">：<span> </span></span>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left" align="left"><span style="font-size: 12pt; font-family: Arial">1.<span style="color: black">Creator</span></span><span style="font-size: 12pt; color: black; font-family: 宋体">创造</span><span style="font-size: 12pt; color: black; font-family: Arial">Privilege</span><span style="font-size: 12pt; font-family: 宋体">，</span><span style="font-size: 12pt; font-family: Arial">Creator</span><span style="font-size: 12pt; font-family: 宋体">在设计和实现系统时会划分，一个子系统或称为模块，应该有哪些权限。这里完成的是</span><span style="font-size: 12pt; font-family: Arial">Privilege</span><span style="font-size: 12pt; font-family: 宋体">与</span><span style="font-size: 12pt; font-family: Arial">Resource</span><span style="font-size: 12pt; font-family: 宋体">的对象声明，并没有真正将</span><span style="font-size: 12pt; font-family: Arial">Privilege</span><span style="font-size: 12pt; font-family: 宋体">与具体</span><span style="font-size: 12pt; font-family: Arial">Resource</span><span style="font-size: 12pt; font-family: 宋体">实例联系在一起，形成</span><span style="font-size: 12pt; font-family: Arial">Operator</span><span style="font-size: 12pt; font-family: 宋体">。<span> </span></span>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left" align="left"><span style="font-size: 12pt; font-family: Arial">2.<span style="color: black">Administrator</span></span><span style="font-size: 12pt; color: black; font-family: 宋体">指定</span><span style="font-size: 12pt; color: black; font-family: Arial">Privilege</span><span style="font-size: 12pt; color: black; font-family: 宋体">与</span><span style="font-size: 12pt; color: black; font-family: Arial">Resource Instance</span><span style="font-size: 12pt; color: black; font-family: 宋体">的关联</span><span style="font-size: 12pt; font-family: 宋体">。在这一步，</span><span style="font-size: 12pt; font-family: 宋体">权限真正与资源实例联系到了一起，</span><span style="font-size: 12pt; font-family: 宋体">产生了</span><span style="font-size: 12pt; color: black; font-family: Arial">Operator</span><span style="font-size: 12pt; font-family: 宋体">（</span><span style="font-size: 12pt; font-family: Arial">Privilege Instance</span><span style="font-size: 12pt; font-family: 宋体">）。</span><span style="font-size: 12pt; color: black; font-family: Arial">Administrator</span><span style="font-size: 12pt; color: black; font-family: 宋体">利用</span><span style="font-size: 12pt; color: black; font-family: Arial">Operator</span><span style="font-size: 12pt; color: black; font-family: 宋体">这个基本元素，来创造他理想中的权限模型。如，创建角色，创建用户组，给用户组分配用户，将用户组与角色关联等等</span><span style="font-size: 12pt; color: black; font-family: Arial">...</span><span style="font-size: 12pt; color: black; font-family: 宋体">这些操作都是由</span><span style="font-size: 12pt; color: black; font-family: Arial">Administrator</span><span style="font-size: 12pt; color: black; font-family: 宋体">来完成的。</span><span style="font-size: 12pt; font-family: 宋体"> </span>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left" align="left"><span style="font-size: 12pt; color: black; font-family: Arial">3. User</span><span style="font-size: 12pt; color: black; font-family: 宋体">使用</span><span style="font-size: 12pt; color: black; font-family: Arial">Administrator</span><span style="font-size: 12pt; color: black; font-family: 宋体">分配给的权限去使用各个子系统。</span><span style="font-size: 12pt; color: black; font-family: Arial">Administrator</span><span style="font-size: 12pt; color: black; font-family: 宋体">是用户，在他的心目中有一个比较适合他管理和维护的权限模型。于是，程序员只要回答一个问题，就是什么权限可以访问什么资源，也就是前面说的</span><span style="font-size: 12pt; color: black; font-family: Arial">Operator</span><span style="font-size: 12pt; color: black; font-family: 宋体">。程序员提供</span><span style="font-size: 12pt; color: black; font-family: Arial">Operator</span><span style="font-size: 12pt; color: black; font-family: 宋体">就意味着给系统穿上了盔甲。</span><span style="font-size: 12pt; color: black; font-family: Arial">Administrator</span><span style="font-size: 12pt; color: black; font-family: 宋体">就可以按照他的意愿来建立他所希望的权限<a onclick="javascript:tagshow(event, '%BF%F2%BC%DC');" href="javascript:;" target="_self"><u><strong>框架</strong></u></a></span><span style="font-size: 12pt; font-family: 宋体">可以自行增加，删除，管理</span><span style="font-size: 12pt; font-family: Arial">Resource</span><span style="font-size: 12pt; font-family: 宋体">和</span><span style="font-size: 12pt; font-family: Arial">Privilege</span><span style="font-size: 12pt; font-family: 宋体">之间关系。可以自行设定用户</span><span style="font-size: 12pt; font-family: Arial">User</span><span style="font-size: 12pt; font-family: 宋体">和角色</span><span style="font-size: 12pt; font-family: Arial">Role</span><span style="font-size: 12pt; font-family: 宋体">的对应关系。</span><span style="font-size: 12pt; color: black; font-family: Arial">(</span><span style="font-size: 12pt; color: black; font-family: 宋体">如果将</span><span style="font-size: 12pt; font-family: Arial">Creator</span><span style="font-size: 12pt; color: black; font-family: 宋体">看作是</span><span style="font-size: 12pt; color: black; font-family: Arial">Basic</span><span style="font-size: 12pt; color: black; font-family: 宋体">的发明者，</span><span style="font-size: 12pt; color: black; font-family: Arial">Administrator</span><span style="font-size: 12pt; color: black; font-family: 宋体">就是</span><span style="font-size: 12pt; color: black; font-family: Arial">Basic</span><span style="font-size: 12pt; color: black; font-family: 宋体">的使用者，他可以做一些脚本式的编程</span><span style="font-size: 12pt; color: black; font-family: Arial">) Operator</span><span style="font-size: 12pt; color: black; font-family: 宋体">是这个系统中最关键的部分，它是一个纽带，一个系在</span><span style="font-size: 12pt; color: black; font-family: Arial">Programmer</span><span style="font-size: 12pt; color: black; font-family: 宋体">，</span><span style="font-size: 12pt; color: black; font-family: Arial">Administrator</span><span style="font-size: 12pt; color: black; font-family: 宋体">，</span><span style="font-size: 12pt; color: black; font-family: Arial">User</span><span style="font-size: 12pt; color: black; font-family: 宋体">之间的纽带。</span><span style="font-size: 12pt; font-family: 宋体"> </span>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><strong></strong>
<p style="margin: 0cm 0cm 0pt 21.25pt; text-indent: -21.25pt; line-height: 150%; text-align: left; tab-stops: list 21.25pt" align="left"><strong><span style="font-size: 16pt; line-height: 150%; font-family: 宋体">4<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></strong><strong><span style="font-size: 16pt; line-height: 150%; font-family: 宋体">权限<span>API </span></span></strong>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;<strong>&nbsp;getPermissionByOrgGuid(String orgGuid ) </strong></span>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">通过传入一个org的Guid， 拿到当前这个org对象都具有那些访问权限。<span> </span></span>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;getSourcePermissionByOrgGuid(String orgGuid , String resouceGuid) </span></strong>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp;</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">通过传入一个org的Guid和 一个资源的Guid， 返回改Org对当前这个资源的访问权限。<span> </span></span>
<p style="margin: 0cm 0cm 0pt; line-height: 150%">
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">getPermissionByResourceGuid(String resource) </span></strong>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp;</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">通过传入一个资源的Guid， 得到当前资源下都有那些权限定义。<span> </span></span>
<p style="margin: 0cm 0cm 0pt; line-height: 150%">
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">havingHeritPermission(String orgGuid , String resouceGuid) : Boolean </span></strong>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp;</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">传入一个orgGuid， 资源GUID，查看改OrgGuid下对资源是否有向下继承的权限。这里继承是资源的继承。即对父栏目有权限，可以继承下去对父栏目下的子栏目同样有权限。<span> </span></span>
<p style="margin: 0cm 0cm 0pt; line-height: 150%">
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">havingPermission(String orgGuid , String resourceGuid) : Boolean </span></strong>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp;</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">判断某Org对某一资源是否用权限。<span> </span></span>
<p style="margin: 0cm 0cm 0pt; line-height: 150%">
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">以上是粗粒度的权限API。 以下为细粒度的权限：<span> </span></span>
<p style="margin: 0cm 0cm 0pt; line-height: 150%">
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">getOperationByPermission(String permissionGuid) </span></strong>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp;</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">通过permission的Guid得到该permission的所有有效操作。<span> </span></span>
<p style="margin: 0cm 0cm 0pt; line-height: 150%">
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">getOperationByGuid(String permissionGuid , String resourceGuid) </span></strong>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp;</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">通过permision的Guid， 资源的Guid得到该资源下所有的有效操作。<span> </span></span>
<p style="margin: 0cm 0cm 0pt; line-height: 150%">
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">screeningOpreationByGuid (String permissionGuid , String resourceGuid , String orgGuid) </span></strong>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp;</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">通过permission，resource，org的Guid得到改Org对这一资源的有效操作。<span> </span></span>
<p style="margin: 0cm 0cm 0pt; line-height: 150%">
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><strong><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">hasOperation(String operationGuid) : boolean </span></strong>
<p style="margin: 0cm 0cm 0pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">&nbsp;&nbsp;&nbsp;</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">通过传入的operationGuid返回是否具有操作权限。<span> </span></span>
<p style="margin: 0cm 0cm 0pt; line-height: 150%">
<p style="margin: 0cm 0cm 0pt 21.25pt; text-indent: -21.25pt; line-height: 150%; text-align: left; tab-stops: list 21.25pt" align="left"><strong><span style="font-size: 16pt; line-height: 150%; font-family: 宋体">5<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></strong><strong><span style="font-size: 16pt; line-height: 150%; font-family: 宋体">权限的实现：<span> </span></span></strong>
<p style="margin: 0cm 0cm 0pt 21pt; text-align: left" align="left"><span style="font-size: 12pt; color: black; font-family: Arial">1</span><span style="font-size: 12pt; color: black; font-family: 宋体">．表单式认证，这是常用的，但用户到达一个不被授权访问的资源时，</span><span style="font-size: 12pt; color: black; font-family: Arial">Web</span><span style="font-size: 12pt; color: black; font-family: 宋体">容器就发</span><span style="font-size: 12pt; font-family: 宋体"> </span>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 12pt; color: black; font-family: 宋体">出一个</span><span style="font-size: 12pt; color: black; font-family: Arial">html</span><span style="font-size: 12pt; color: black; font-family: 宋体">页面，要求输入用户名和密码。</span><span style="font-size: 12pt; font-family: 宋体"> </span>
<p style="margin: 0cm 0cm 0pt 21pt; text-align: left" align="left"><span style="font-size: 12pt; color: black; font-family: Arial">2</span><span style="font-size: 12pt; color: black; font-family: 宋体">．用</span><span style="font-size: 12pt; color: black; font-family: Arial">Filter</span><span style="font-size: 12pt; color: black; font-family: 宋体">防止用户访问一些未被授权的资源，</span><span style="font-size: 12pt; color: black; font-family: Arial">Filter</span><span style="font-size: 12pt; color: black; font-family: 宋体">会截取所有</span><span style="font-size: 12pt; color: black; font-family: Arial">Request/Response</span><span style="font-size: 12pt; color: black; font-family: 宋体">，</span><span style="font-size: 12pt; font-family: 宋体"> </span>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 12pt; color: black; font-family: 宋体">然后放置一个验证通过的标识在用户的</span><span style="font-size: 12pt; color: black; font-family: Arial">Session</span><span style="font-size: 12pt; color: black; font-family: 宋体">中，然后</span><span style="font-size: 12pt; color: black; font-family: Arial">Filter</span><span style="font-size: 12pt; color: black; font-family: 宋体">每次依靠这个标识来决定是否放行</span><span style="font-size: 12pt; color: black; font-family: Arial">Response</span><span style="font-size: 12pt; color: black; font-family: 宋体">。</span><span style="font-size: 12pt; font-family: 宋体"> </span>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; text-align: left" align="left"><span style="font-size: 12pt; color: black; font-family: 宋体">这个模式分为：</span><span style="font-size: 12pt; font-family: 宋体"> </span>
<p style="margin: 0cm 0cm 0pt 21pt; text-align: left" align="left"><span style="font-size: 12pt; color: black; font-family: Arial">Gatekeeper</span><span style="font-size: 12pt; color: black; font-family: 宋体">：采取</span><span style="font-size: 12pt; color: black; font-family: Arial">Filter</span><span style="font-size: 12pt; color: black; font-family: 宋体">或统一</span><span style="font-size: 12pt; color: black; font-family: Arial">Servlet</span><span style="font-size: 12pt; color: black; font-family: 宋体">的方式。</span><span style="font-size: 12pt; font-family: 宋体"> </span>
<p style="margin: 0cm 0cm 0pt 21pt; text-align: left" align="left"><span style="font-size: 12pt; color: black; font-family: Arial">Authenticator</span><span style="font-size: 12pt; color: black; font-family: 宋体">：</span><span style="font-size: 12pt; color: black; font-family: 宋体">在</span><span style="font-size: 12pt; color: black; font-family: Arial">Web</span><span style="font-size: 12pt; color: black; font-family: 宋体">中使用</span><span style="font-size: 12pt; color: black; font-family: Arial">JAAS</span><span style="font-size: 12pt; color: black; font-family: 宋体">自己来实现。</span><span style="font-size: 12pt; font-family: 宋体"> </span>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%">
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">Filter</span><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">拦截只是拦截该用户是否有访问这个页面，或这一资源的权限。真正做到显示后拦截是在应用程序内部去做。<span> </span></span>
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%">
<p style="margin: 0cm 0cm 0pt; text-indent: 21pt; line-height: 150%"><span style="font-size: 12pt; line-height: 150%; font-family: 宋体">做显示拦截提供API， 标签这两种方式。</p>
</span><br />
<img src ="http://www.blogjava.net/caizh2009/aggbug/270622.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caizh2009/" target="_blank">小菜毛毛</a> 2009-05-14 15:47 <a href="http://www.blogjava.net/caizh2009/articles/270622.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>