<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>sprite</title>
    <description></description>
    <link>http://sprite.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
          <item>
        <title>基于RBAC的权限设计模型</title>
        <author>sprite</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sprite.javaeye.com">sprite</a>&nbsp;
                    链接：<a href="http://sprite.javaeye.com/blog/136141" style="color:red;">http://sprite.javaeye.com/blog/136141</a>&nbsp;
          发表时间: 2007年10月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 21.25pt; TEXT-INDENT: -21.25pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 16pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"><span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">c：<span lang="EN-US"> </span></span></span></span>
<p>&nbsp;</p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 21.25pt; TEXT-INDENT: -21.25pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left"><strong><span lang="EN-US" style="FONT-SIZE: 16pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"><span>1<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span lang="EN-US" style="FONT-SIZE: 16pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">RBAC</span> </strong><strong><span style="FONT-SIZE: 16pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">介绍<span lang="EN-US"> </span></span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 35.45pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">RBAC</span> <span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">模型作为目前最为广泛接受的权限模型。<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 35.45pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">NIST</span> <span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">（<span lang="EN-US">The National Institute of Standards and Technology</span>，美国国家标准与技术研究院）标准<span lang="EN-US">RBAC</span>模型由<span lang="EN-US">4</span>个部件模型组成，这<span lang="EN-US">4</span>个部件模型分别是基本模型<span lang="EN-US">RBAC0</span>（<span lang="EN-US">Core RBAC</span>）、角色分级模型<span lang="EN-US">RBAC1</span>（<span lang="EN-US">Hierarchal RBAC</span>）、角色限制模型<span lang="EN-US">RBAC2</span>（<span lang="EN-US">Constraint RBAC</span>）和统一模型<span lang="EN-US">RBAC3</span>（<span lang="EN-US">Combines RBAC</span>）<sup><span lang="EN-US">[1]</span></sup>。<span lang="EN-US">RBAC0</span>模型如图<span lang="EN-US">1</span>所示。<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
<p class="MsoNormal" align="center" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center"><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: 黑体"><shapetype o:spt="75" coordsize="21600,21600" filled="f" stroked="f" id="_x0000_t75" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t"></shapetype><stroke joinstyle="miter"></stroke>
<formulas>
</formulas>
<f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f>
<path o:extrusionok="f" o:connecttype="rect" gradientshapeok="t"></path>
<lock v:ext="edit" aspectratio="t"></lock><shape id="_x0000_i1025" type="#_x0000_t75" alt="RBAC 0模型.JPG" style="WIDTH: 361.5pt; HEIGHT: 108pt"></shape><imagedata o:href="/images/blogjava_net/bluedavy/RBAC%200%E6%A8%A1%E5%9E%8B.JPG" src="file:///D:%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.jpg"></imagedata><img src="http://www.blogjava.net/images/blogjava_net/anwenhao/clip_image001.jpg" border="0" height="144" alt="clip_image001.jpg" width="482" /> <br />
</span><span style="FONT-SIZE: 10pt; FONT-FAMILY: 黑体">图表</span><font size="3" face="宋体, MS Song"> </font><span lang="EN-US" style="FONT-SIZE: 10pt; FONT-FAMILY: Arial">1 RBAC 0</span><font size="3" face="宋体, MS Song"> </font><span style="FONT-SIZE: 10pt; FONT-FAMILY: 黑体">模型</span><font size="3"><font face="宋体, MS Song"> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"></span></font></font>
<p>&nbsp;</p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 48pt; TEXT-INDENT: -21pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: Wingdings">l</span> <span lang="EN-US" style="FONT-SIZE: 7pt; LINE-HEIGHT: 150%">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">RBAC0</span> </strong><strong><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">定义了能构成一个<span lang="EN-US">RBAC</span>控制系统的最小的元素集合</span> </strong><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 48pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">在<span lang="EN-US">RBAC</span>之中<span lang="EN-US">,</span>包含用户<span lang="EN-US">users(USERS)</span>、角色<span lang="EN-US">roles(ROLES)</span>、目标<span lang="EN-US">objects(OBS)</span>、操作<span lang="EN-US">operations(OPS)</span>、许可权<span lang="EN-US">permissions(PRMS)</span>五个基本数据元素，权限被赋予角色<span lang="EN-US">,</span>而不是用户，当一个角色被指定给一个用户时，此用户就拥有了该角色所包含的权限。会话<span lang="EN-US">sessions</span>是用户与激活的角色集合之间的映射。<span lang="EN-US">RBAC0</span>与传统访问控制的差别在于增加一层间接性带来了灵活性，<span lang="EN-US">RBAC1</span>、<span lang="EN-US">RBAC2</span>、<span lang="EN-US">RBAC3</span>都是先后在<span lang="EN-US">RBAC0</span>上的扩展。<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings">l</span> <span lang="EN-US" style="FONT-SIZE: 7pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">RBAC1</span> </strong><strong><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">引入角色间的继承关系</span> </strong><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 48pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">角色间的继承关系可分为一般继承关系和受限继承关系。一般继承关系仅要求角色继承关系是一个绝对偏序关系，允许角色间的多继承。而受限继承关系则进一步要求角色继承关系是一个树结构。<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings">l</span> <span lang="EN-US" style="FONT-SIZE: 7pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">RBAC2</span> </strong><strong><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">模型中添加了责任分离关系</span> </strong><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 48pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">RBAC2</span> <span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">的约束规定了权限被赋予角色时<span lang="EN-US">,</span>或角色被赋予用户时<span lang="EN-US">,</span>以及当用户在某一时刻激活一个角色时所应遵循的强制性规则。责任分离包括静态责任分离和动态责任分离。约束与用户<span lang="EN-US">-</span>角色<span lang="EN-US">-</span>权限关系一起决定了<span lang="EN-US">RBAC2</span>模型中用户的访问许可。<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt"><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Wingdings">l</span> <span lang="EN-US" style="FONT-SIZE: 7pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">RBAC3</span> </strong><strong><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">包含了<span lang="EN-US">RBAC1</span>和<span lang="EN-US">RBAC2</span></span> </strong><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 26.95pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">既提供了角色间的继承关系，又提供了责任分离关系。<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 26.95pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">建立角色定义表。定出当前系统中角色。<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 26.95pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">因为有继承的问题，所以角色体现出的是一个树形结构。<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 26.95pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"><shape id="_x0000_i1026" type="#_x0000_t75" style="WIDTH: 320.25pt; HEIGHT: 4in"></shape><imagedata src="file:///D:%5CTemp%5Cmsohtml1%5C01%5Cclip_image002.emz" o:title=""></imagedata><img src="http://www.blogjava.net/images/blogjava_net/anwenhao/%E6%9C%AA%E5%91%BD%E5%90%8D1.bmp" border="0" height="407" alt="test.bmp" width="603" /> </span>
<p>&nbsp;</p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 21.25pt; TEXT-INDENT: -21.25pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left"><strong><span lang="EN-US" style="FONT-SIZE: 16pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"><span>2<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span style="FONT-SIZE: 16pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">权限设计： <span lang="EN-US"></span></span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 26.95pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 26.95pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">配置资源以及资源的操作 ： 这里资源可以定义为一个通用的资源模型。提供通用的资源统一接口。<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 26.95pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span lang="EN-US"></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 26.95pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span lang="EN-US"></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 26.95pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span lang="EN-US"></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 26.95pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span lang="EN-US"></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 26.95pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span lang="EN-US"></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 26.95pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span style="FONT-FAMILY: 宋体">数据库</span> <span lang="EN-US">ER</span> <span style="FONT-FAMILY: 宋体">图：</span> </p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US"><shape id="_x0000_i1027" type="#_x0000_t75" o:ole="" style="WIDTH: 414.75pt; HEIGHT: 241.5pt"></shape><imagedata src="file:///D:%5CTemp%5Cmsohtml1%5C01%5Cclip_image004.emz" o:title=""></imagedata><img src="http://www.blogjava.net/images/blogjava_net/anwenhao/clip_image002.gif" border="0" height="322" alt="clip_image002.gif" width="553" /> </span></p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">关系图：<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"><shape id="_x0000_i1028" type="#_x0000_t75" style="WIDTH: 414.75pt; HEIGHT: 314.25pt"></shape><imagedata src="file:///D:%5CTemp%5Cmsohtml1%5C01%5Cclip_image006.emz" o:title=""></imagedata><img src="http://www.blogjava.net/images/blogjava_net/anwenhao/clip_image003.gif" border="0" height="419" alt="clip_image003.gif" width="553" /> </span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"><shape id="_x0000_i1029" type="#_x0000_t75" style="WIDTH: 414.75pt; HEIGHT: 553.5pt"></shape><imagedata src="file:///D:%5CTemp%5Cmsohtml1%5C01%5Cclip_image008.emz" o:title=""></imagedata><img src="http://www.blogjava.net/images/blogjava_net/anwenhao/%E6%9C%AA%E5%91%BD%E5%90%8D.bmp" border="0" height="739" alt="未命名.bmp" width="603" /> </span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 21.25pt; TEXT-INDENT: -21.25pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left"><strong><span lang="EN-US" style="FONT-SIZE: 16pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"><span>3<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span style="FONT-SIZE: 16pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">分析：<span lang="EN-US"> </span></span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"><span>&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">根据以上的类关系图和<span lang="EN-US">ER</span>图可以看出。整个权限可以抽象为五个对象组成。<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><strong><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">OrgBean : </span></strong><strong><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">用于描述<span lang="EN-US">org</span>模型。<span lang="EN-US"> </span></span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><strong><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">Role </span></strong><strong><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">： 用于描述角色。<span lang="EN-US"> </span></span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><strong><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">Permission </span></strong><strong><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">： 用于描述权限。<span lang="EN-US"> </span></span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><strong><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">Resource </span></strong><strong><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">： 用于描述资源。<span lang="EN-US"> </span></span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><strong><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">Operation </span></strong><strong><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">： 用于描述操作。<span lang="EN-US"> </span></span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><strong><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"></span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><strong><span style="FONT-SIZE: 12pt; COLOR: rgb(51,102,255); LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">其中<span lang="EN-US">Permission</span>中有<span lang="EN-US">Resource , Operation </span>的聚合，资源和操作组成权限。<span lang="EN-US"> </span></span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><strong><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: rgb(51,102,255); LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">Role </span></strong><strong><span style="FONT-SIZE: 12pt; COLOR: rgb(51,102,255); LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">和<span lang="EN-US"> Permission </span>都有自包含。因为设计到权限的继承。<span lang="EN-US"> </span></span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><strong><span style="FONT-SIZE: 12pt; COLOR: rgb(51,102,255); LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">资源<span lang="EN-US">Resource </span>也可能出现一颗树形结构，那资源也要有自包含。<span lang="EN-US"> </span></span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><strong><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: red; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"></span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" 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 lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; LINE-HEIGHT: 150%">: </span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">权限系统的核心由以下三部分构成：</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">1.</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">创造权限，</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">2.</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">分配权限，</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">3.</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">使用权限，然后，系统各部分的主要参与者对照如下：</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">1.</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">创造权限</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">- </span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">Creator</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">创造，</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">2.</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">分配权限</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">- Administrator </span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">分配，</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">3.</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">使用权限</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">- User</span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">：<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left"><span lang="EN-US" 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 lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Privilege</span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">，</span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">Creator </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">在设计和实现系统时会划分，一个子系统或称为模块，应该有哪些权限。这里完成的是</span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">Privilege </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">与</span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">Resource </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">的对象声明，并没有真正将</span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">Privilege </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">与具体</span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">Resource </span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">实例联系在一起，形成</span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">Operator</span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">。<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left"><span lang="EN-US" 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 lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Privilege </span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">与</span> <span lang="EN-US" 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: Arial"></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">权限真正与资源实例联系到了一起，</span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: Arial"></span><span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">产生了</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Operator</span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">（</span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">Privilege Instance</span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">）。</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Administrator</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">利用</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Operator</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">这个基本元素，来创造他理想中的权限模型。如，创建角色，创建用户组，给用户组分配用户，将用户组与角色关联等等</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">...</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">这些操作都是由</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Administrator </span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">来完成的。</span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">3. User </span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">使用</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Administrator </span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">分配给的权限去使用各个子系统。</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Administrator </span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">是用户，在他的心目中有一个比较适合他管理和维护的权限模型。于是，程序员只要回答一个问题，就是什么权限可以访问什么资源，也就是前面说的</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Operator</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">。程序员提供</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Operator </span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">就意味着给系统穿上了盔甲。</span> <span lang="EN-US" 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> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">Resource</span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">和</span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">Privilege</span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">之间关系。可以自行设定用户</span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">User</span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">和角色</span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">Role</span> <span style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体">的对应关系。</span> <span lang="EN-US" 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"></span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: Arial">Creator</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">看作是</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Basic </span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">的发明者，</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Administrator </span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">就是</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Basic </span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">的使用者，他可以做一些脚本式的编程</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">) Operator</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">是这个系统中最关键的部分，它是一个纽带，一个系在</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Programmer</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">，</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Administrator</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">，</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">User</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">之间的纽带。</span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><strong><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: red; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"></span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 21.25pt; TEXT-INDENT: -21.25pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left"><strong><span lang="EN-US" style="FONT-SIZE: 16pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"><span>4<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span style="FONT-SIZE: 16pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">权限<span lang="EN-US">API </span></span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"><span>&nbsp;</span> <strong><span>&nbsp;</span>getPermissionByOrgGuid(String orgGuid ) </strong></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"><span>&nbsp;&nbsp;&nbsp; </span><span>&nbsp;</span> </span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">通过传入一个<span lang="EN-US">org</span>的<span lang="EN-US">Guid </span>， 拿到当前这个<span lang="EN-US">org</span>对象都具有那些访问权限。<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><strong><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"><span>&nbsp;</span>getSourcePermissionByOrgGuid(String orgGuid , String resouceGuid) </span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"><span>&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">通过传入一个<span lang="EN-US">org</span>的<span lang="EN-US">Guid </span>和 一个资源的<span lang="EN-US">Guid </span>， 返回改<span lang="EN-US">Org</span>对当前这个资源的访问权限。<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><strong><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">getPermissionByResourceGuid(String resource) </span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"><span>&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">通过传入一个资源的<span lang="EN-US">Guid </span>， 得到当前资源下都有那些权限定义。<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><strong><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">havingHeritPermission(String orgGuid , String resouceGuid) : Boolean </span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"><span>&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">传入一个<span lang="EN-US">orgGuid</span>， 资源<span lang="EN-US">GUID </span>，查看改<span lang="EN-US">OrgGuid</span>下对资源是否有向下继承的权限。这里继承是资源的继承。即对父栏目有权限，可以继承下去对父栏目下的子栏目同样有权限。<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><strong><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">havingPermission(String orgGuid , String resourceGuid) : Boolean </span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"><span>&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">判断某<span lang="EN-US">Org</span>对某一资源是否用权限。<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">以上是粗粒度的权限<span lang="EN-US">API </span>。 以下为细粒度的权限：<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><strong><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">getOperationByPermission(String permissionGuid) </span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"><span>&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">通过<span lang="EN-US">permission </span>的<span lang="EN-US">Guid </span>得到该<span lang="EN-US">permission </span>的所有有效操作。<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><strong><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">getOperationByGuid(String permissionGuid , String resourceGuid) </span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"><span>&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">通过<span lang="EN-US">permision</span>的<span lang="EN-US">Guid </span>， 资源的<span lang="EN-US">Guid </span>得到该资源下所有的有效操作。<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><strong><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">screeningOpreationByGuid (String permissionGuid , String resourceGuid , String orgGuid) </span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"><span>&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">通过<span lang="EN-US">permission </span>，<span lang="EN-US"> resource </span>，<span lang="EN-US"> org</span>的<span lang="EN-US">Guid </span>得到改<span lang="EN-US">Org</span>对这一资源的有效操作。<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><strong><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">hasOperation(String operationGuid) : boolean </span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"><span>&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">通过传入的<span lang="EN-US">operationGuid </span>返回是否具有操作权限。<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 21.25pt; TEXT-INDENT: -21.25pt; LINE-HEIGHT: 150%; TEXT-ALIGN: left"><strong><span lang="EN-US" style="FONT-SIZE: 16pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"><span>5<span style="FONT: 7pt 'Times New Roman'; font-size-adjust: none; font-stretch: normal">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span></strong><strong><span style="FONT-SIZE: 16pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">权限的实现：<span lang="EN-US"> </span></span></strong>
<p>&nbsp;</p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">1</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">．表单式认证，这是常用的，但用户到达一个不被授权访问的资源时，</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Web</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">容器就发</span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">出一个</span> <span lang="EN-US" 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; COLOR: black; FONT-FAMILY: Arial"></span><span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">2</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">．用</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Filter</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">防止用户访问一些未被授权的资源，</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Filter</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">会截取所有</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Request/Response</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">，</span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">然后放置一个验证通过的标识在用户的</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Session</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">中，然后</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Filter</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">每次依靠这个标识来决定是否放行</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Response</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">。</span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; TEXT-ALIGN: left"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">这个模式分为：</span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Gatekeeper </span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">：采取</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Filter</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">或统一</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Servlet</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">的方式。</span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-ALIGN: left"><span lang="EN-US" 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: Arial"></span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">在</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">Web</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">中使用</span> <span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: Arial">JAAS</span> <span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 宋体">自己来实现。</span> <span lang="EN-US" style="FONT-SIZE: 12pt; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">Filter</span> <span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">拦截只是拦截该用户是否有访问这个页面，或这一资源的权限。真正做到显示后拦截是在应用程序内部去做。<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span lang="EN-US" style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体"></span>
<p>&nbsp;</p>
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt; LINE-HEIGHT: 150%"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体">做显示拦截提供<span lang="EN-US">API </span>， 标签这两种方式。<span lang="EN-US"> </span></span>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
</p>
<p>&nbsp;</p>
          <br/><br/>
          <span style="color:red;">
            <a href="http://sprite.javaeye.com/blog/136141#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 28 Oct 2007 13:51:59 +0800</pubDate>
        <link>http://sprite.javaeye.com/blog/136141</link>
        <guid>http://sprite.javaeye.com/blog/136141</guid>
      </item>
          <item>
        <title>基于角色管理的系统访问控制 </title>
        <author>sprite</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sprite.javaeye.com">sprite</a>&nbsp;
                    链接：<a href="http://sprite.javaeye.com/blog/136140" style="color:red;">http://sprite.javaeye.com/blog/136140</a>&nbsp;
          发表时间: 2007年10月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div align="center"><strong><font size="3" color="#990000">基于角色管理的系统访问控制 </font></strong></div>
<tr>
</tr>
<td height="30" valign="top">&nbsp;</td>
<div align="center">来源：<font color="#669999"> ibm </font>&nbsp; 作者：<font color="#669999"> 郝斌 </font></div>
<tr>
</tr>
<td>&nbsp;</td>
<table cellspacing="0" border="0" align="center" width="95%" cellpadding="0">
    <tbody>
        <tr>
            <td valign="top"><span class="font10" id="zoom">
            <p><a name="1" id="1"><span class="atitle2">1. 引言（Introduction）</span></a><br />
            <span class="atitle3">1.1. 关键词定义（Definitions）</span><br />
            有关定义说明如下：</p>
            <p><strong>安全管理：</strong>计算机技术安全管理的范围很广，可以包括网络安全性、数据安全性、操作系统安全性以及应用程序安全性等。很多方面的安全性管理大都已经有成熟的产品了，我们只需根据自己需要有选择性的使用就可达到自己的目的了。本文中有关关涉及&quot;安全管理&quot;一词均只针对本公司推出的应用中有关对象与数据而言范围有限。</p>
            <p><strong>主体：</strong>即可以象应用系统发出应用请求任何实体，包括各种用户、其它与本系统有接口的应用程序、非法入侵者。系统必须具有识别主体的能力，接口实际上也是由用户登记的，故主要问题是校验用户身份的合法性，系统应建立用户鉴别机构以验证用户身份。</p>
            <p><strong>用户：</strong>用户就是一个可以独立访问计算机系统中的数据或者用数据表示的其它资源的主体，我们用USERS表示一个用户集合。用户在一般情况下是指人。</p>
            <p><strong>权限：</strong>权限是对计算机系统中的数据或者用数据表示的其它资源进行访问的许可。我们用PERMISSION表示一个权限集合。可分为对象访问控制和数据访问控制两种。</p>
            <p><strong>对象访问控制：</strong>用一个二元组来表示：（控制对象，访问类型）。其中的控制对象表示系统中一切需要进行访问控制的资源。我们将引入一套完整的资源表示方法来对系统中出现的各类资源进行定义和引用（详见后述）。访问类型是指对于相应的受控对象的访问控制，如：读取、修改、删除等等。</p>
            <p><strong>数据访问控制：</strong>如果不对数据访问加以控制，系统的安全性是得不到保证的，容易发生数据泄密事件。所以在权限中必须对对象可访问的数据进行按不同的等级给予加密保护。我们同样用一个二元组来表示：（控制对象，谓词）。</p>
            <p><strong>权限最终可以组合成如下形式：</strong>（控制对象，访问类型，谓词）。</p>
            <p><strong>角色：</strong>角色是指一个组织或任务中的工作或位置，它代表了一种资格、权利和责任。我们用ROLES表示一个角色集合。</p>
            <p><strong>用户委派：</strong>用户委派是USERS与ROLES之间的一个二元关系，我们用（u,r）来表示用户u被委派了一个角色r。</p>
            <p><strong>权限配置：</strong>权限配置是ROLES与PERMISSION之间的一个二元关系，我们用（r,p）来表示角色r拥有一个权限p。</p>
            <p><a name="2" id="2"><span class="atitle2">2. 需求分析</span></a><br />
            根据我们在本行业多年积累下来的经验，参考了其它同行的成功经验整合了先进的思想，我们有能力为我们自己的应用系统开发一套功能完善而且又灵活方便的安全管理系统。使开发人员从权限管理重复劳动的负担中解放出来,专心致力于应用程序的功能上的开发。通过收集公司从事MIS项目开发经验丰富的软件工程师对在各种情况下的对应系统的安性提出的需求做出了如下的总结。</p>
            <p>本系统在安全管理方面要考虑如下几个方面问题。</p>
            <p><span class="atitle3">2.1. 角色与用户</span><br />
            <strong>需求：</strong><br />
            角色由用户(这个用户与下一行的&quot;用户&quot;应该不是同一个定义,&quot;客户&quot;好像合适一些?不错，此处的用户确是有些偏于指向我们合同意义的客户,但是我认为与下面定义的&quot;用户&quot;不存在什么本质上的区别,因为客户最终也是以在系统中登记的用户身份来使用本系统，用户所能完成的功能也就是客户的需求。两者之间的细微区别读者可自己通过上下文加区分)自行定义，根据业务岗位不同可以定义多个角色。</p>
            <p>登录系统，首先需要向系统申请注册，同一个用户只能在系统中登记一次。</p>
            <p>用户是登录系统的楔子，角色是用户权限的基础。用户可以扮演多个角色。</p>
            <p>将某一角色授予某一用户时，权限不能超越该角色权限，但可以小于该角色权限。</p>
            <p>用户口令与数据库访问口令加密</p>
            <p><strong>分析说明</strong></p>
            <ul class="n01">
                <li>每个用户在系统中由一个唯的USERID标识。 </li>
                <li>用户通过系统登录界面登录系统,系统通过加密算法验证用户身份和判断用户是否已经登录系统。如果登录成功通知Application preference service和安全管理系统保存用户登录信息。 </li>
                <li>角色由用户根据自己的设想的组织机构进行添加设置，提供一个专门的模块用来设置组织机构，用户通过组织机构(定义?部门机构还是后面提到的&quot;机构是实现和执行各种策略的功能的集合&quot;)方便地进行角色管理。例如：用户可以通过部门机构来进行角色的管理，部门采用编号分层的方式,编号的每两位为一个层次。例如一级部门编号为两位，二级部门编号为四位依此类推下去直到将全厂部门机构建立树状结构图。这类数据仅为方便用户管理角色而存在，在系统的其他方面不存在任何意义。 </li>
                <li>每个角色在系统中也是由一个唯一角色编号来标识，同时必须保存用户所设置的机构信息，一般来说每个角色只需要保存自己所在机构的代码即可。 </li>
            </ul>
            <p><span class="atitle3">2.2. 菜单控制</span><br />
            <strong>需求</strong><br />
            此菜单乃系统业务功能菜单。由业务功能模块列表和用户菜单定制共同组成。每个用户可以拥有自己的菜单，也可以直接采用角色缺省菜单（当用户同时充当多个角色并且权限重复时，重复的权限仅一次有效）</p>
            <p><strong>分析说明</strong></p>
            <ul class="n01">
                <li>为了方便用户进行权限组织管理，需要在系统中建立一张业务功能模块列表，在用户界面上表示为树状分层结构。 </li>
                <li>业务功能模块以用户定制菜单来体现，仍然采用编号分层方式，编号的每两位为一个层次。并标明一个层次是子菜单还是业务模块，子菜单只有一种可否被访问的权限设置，业务模块权限由系统管理员或授权用户进行设置。对每个业务模块设置它的对象控制、记录增删改控制和记录集控制。当用户拥有对业务模块的某一权限时，必需对处于它上级的子菜单有可被访问的权限。删除某一个级子菜单时将提示用户他的下级菜单与功能模块都将被删除掉。 </li>
                <li>当用户同时充当多个角色并且权限重复时，重复的权限仅一次有效，用户拥有他充当的所有角色的权限的并集。 </li>
                <li>用户与角色拥有的系统权限查询时以业务功能模块列表的树状结构显示出来。 </li>
            </ul>
            <br />
            <br />
            <p><span class="atitle3">2.3. 对象控制</span><br />
            <strong>需求</strong><br />
            对象是指应用系统窗口中的可视对象，如菜单项、按钮、下拉列表框、数据编辑控件及数据编辑控件的字段等。对象控制通过角色与用户授权来实现。</p>
            <p>对象控制包括对对象属性的控制可对数据编辑控件中的数据记录的维护权限：</p>
            <ul class="n01">
                <li>对象属性：使能/禁止、可视/屏蔽 </li>
                <li>记录维护：增加、删除、修改的组合 </li>
            </ul>
            <p><strong>分析说明</strong></p>
            <ul class="n01">
                <li>将每个业务模块可进行属性设置的对象由程序员事先设定或由售后技术支持工程师指导用户加入。 </li>
                <li>在系统管理员或授权用户进行设置业务模块的每种权限时，设置用户在拥有该业务模块这种权限时的对象属性。没有设置属性的对象在保存对象信息的时候，用户权限信息中不被保存。 </li>
            </ul>
            <p><span class="atitle3">2.4. 记录集控制</span><br />
            <strong>需求</strong><br />
            记录集的控制是通过条件设置来实现，因此，需要控制记录集的数据库表需要设置专门的记录集筛选字段，而筛选条件由用户根据岗位自进定义，建立过滤表，统一管理。</p>
            <p><strong>分析说明</strong></p>
            <ol class="n01">
                <li>在对用户设置业务模块权限时，同时在过滤表中设置本模块的数据编辑控件的数据筛选条件，筛选条件是组成SQL语句的WHERE条件子句迫使当前访问的模块根据筛选条件对数据编辑控件的SQL语句进行重组，并检索数据。 </li>
                <li>当存在需要从数据库中多个表取数据的情况时，过滤表中存在多条记录，每一条记录记录一个数据编辑控件取数的筛选条件。 </li>
                <li>SQL语句的WHERE子句的生成与校验可以通过的SQL语法分析服务，利用对象所提供的函数分析SQL语句，截取WHERE条件子句，校验新组合的SQL语句的合法性。 </li>
            </ol>
            <br />
            <br />
            <p><span class="atitle3">2.5. 权限分布管理</span><br />
            <strong>需求</strong><br />
            上述提到的权限管理内容应该满足既可集中管理，也可分散管理的目标。</p>
            <p><strong>分析说明</strong></p>
            <ol class="n01">
                <li>权限管理由系统管理员集中管理，系统管理员工作负担过大，难对所有岗位的分工有全面和具体的了解，对权限作出标准细致的划分，对于大型的管理系统适合于把一部分设置权限的交由一些比较高级的用户来进行，有利于各岗位细致协调的工作。这就是权限的分散管理。 </li>
                <li>要实现权限的分散管理，就须对授权模块进行一些授权管理，这要求整个系统的授权安全管理工作要做到细致，不要出现权限的漏洞使一些高级用户拥有过大的权限。 </li>
            </ol>
            <p><a name="3" id="3"><span class="atitle2">3. 方案设计</span></a><br />
            <span class="atitle3">3.1. 安全保护策略</span><br />
            从上面各方面的需求分析来看，我们需要一套既行之有效，又方便灵活的安全管理方案。要采用各种控制机构和密码保护技术。安全保护策略是设计安全可靠系统的准则，通常涉及下列几个方面：</p>
            <ol class="n01">
                <li>区分安全策略与安全机构。
                <p>策略是信息安全性的高级指导，策略出自对用户要求，设备环境、机构规则、法律约束等方面的详细研究。策略重要性在于指导作用。而机构是实现和执行各种策略的功能的集合。完善的机构是实施正确安全策略的物质基础。故一般要求机构能实现不同的策略，以便策略变动时无需要更换安全机构。</p>
                </li>
                <li style="LIST-STYLE-TYPE: none">
                <p><strong>安全策略：</strong>企业信息管理系统是一个大型的分布式数据资源管理系统，它包括信息量巨大以及不同程度的信息敏感度，各种有访问需求的用户，使得其安全管理非常复杂。基于角色的系统安全控制模型是目前国际上流行的先进的安全管理控制方法。我们的安全管理系统也根据自身的需要有选择性的吸收其部分思想。其特点是通过分配和取消角色来完成用户权限的授予和取消，并且提供了角色分配规则和操作检查规则。安全管理人员根据需要定义各种角色，并设置合适的访问权限，而用户根据其责任和资历再被指派为不同的角色。这样，整个访问控制过程就分成两个部分，即访问权限与角色相关联，角色再与用户关联，从而实现了用户与访问权限的逻辑分离，如下图所示，角色可以看成是一个表达访问控控制策略的语义结构，它可以表示承担特定工作的资格。</p>
                <p><img src="http://www.kupage.com/src/20030427/1304140000001rmox000.gif" alt="" /><br />
                由于实现了用户与访问权限的逻辑分离，基于角色的策略极大的方便了权限管理。例如，如果一个用户的职位发生变化，只要将用户当前的角色去掉，加入代表新职务或新任务的角色即可。研究表明，角色/权限之间的变化比角色/用户关系之间的变化相对要慢得多，并且委派用户到角色不需要很多技术，可以由行政管理人员来执行，而配置权限到角色的工作比较复杂，需要一定的技术，可以由专门的技术人员来承担，但是不给他们委派用户的权限，这与现实中情况正好一致。除了方便权限管理之外，基于角色的访问控制方法还可以很好的地描述角色层次关系，实现最少权限原则和职责分离的原则。</p>
                </li>
                <li><strong>安全保护机构：</strong>本系统的安全保护机构基本上是于上面的安全策略相互适应的，系统保护的总体结构示意如下：<br />
                <img src="http://www.kupage.com/src/20030427/1304140000001rmox001.gif" alt="" /><br />
                保护机构应负责阻止一切物理破坏和用户可能的操作破坏，后者归结为主体可用何种方式访问哪些对象。主体、访问类型、对象是我们要讨论的保护机构主要成分 </li>
                <li><strong>安全管理的职责：</strong>安全管理有集中管理与分散管理两种。前者意指一切权利都由负责系统安全工作的专职人员或小组组掌握，他 (们)决定用户的访问权利，控制系统安全一切方面。后者是指不同的管理员控制着系统安全的不同方面，管理系统的不同部分，决定不同用户的访问权利，甚至允许对象所有者转让访问对象的权利，集中管理，安全可靠但不灵活；分散管理则应考虑避免漏洞和协调一致的问题。本系统因是针对大的集团企业管理的产品权限分配比较复杂，故采用了集中管理与分散管理相结合的形式。 </li>
                <li><strong>访问控制策略。</strong>它提供决定用户访问权利的依据。其中最重要的一个普遍的原则是&quot;需者方知策略&quot;(the need-to-know)。也就是说，只有一个工作需要的，才是他应该知道的。它从原则上限制了用户不必要的访问权利，从而堵截了许多破坏与泄露数据信息的途经。按照这一原则授予用户的权利，是用户能完成工作的最小权利集合，故也称之为&quot;最少特权策略&quot;。 </li>
                <li><strong>信息流动控制。</strong>只限制用户的访问权利而不考虑数据流动是极其危险的。例如，在考勤时各部门的主管只能为自己部门的职员考勤，人事部可以提取全部数据，因此在提取数据时一定要加以限制。控制数据流动以防止无权用户在数据流动后获得访问权利。 </li>
                <li><strong>密码变换。</strong>对于非常机密数据可变换为密码存贮，使得不知道密码的入侵者无法破译所得到的数据密码。密码变换能防止泄密，但不能保护数据信息不被破坏。 </li>
                <li><strong>软硬结合保护。</strong>这是安全保护的基本策略，许多硬保护功能是软件难以实现的，有些即使能实现，效率也不高。 </li>
                <li><strong>对安全遭到破坏的响应。</strong>各种保护机构都有可能遭到破坏，因此系统必须制订检测破坏手段与处置措施。 </li>
            </ol>
            <p><span class="atitle3">3.2. 安全管理机构分析</span><br />
            <strong>3.2.1. 功能框架示意图</strong></p>
            <ul class="n01">
                <li>内部总体功能框架图<br />
                <img src="http://www.kupage.com/src/20030427/1304140000001rmox002.gif" alt="" /> </li>
                <li>外调用的功能框架示意图<br />
                <img src="http://www.kupage.com/src/20030427/1304140000001rmox003.gif" alt="" /> </li>
            </ul>
            <p><strong>3.2.2. 主要功能组件的职责</strong><br />
            <strong>3.2.2.1. 对象定义工具与权限定义工具</strong></p>
            <ol class="n01">
                <li><strong>对象定义工具。</strong><br />
                对象是指系统中各种功能模块、数据、界面元素（包括菜单、按钮等各种界面上能控制的控件）等，它们是主体能访问的各种对象。由于对象的机密程度不等，受到的保护程度亦有差别。系统中的对象均由程序员通过系统提供的对象定义工具事先定义好系统要控制的对象。系统也只能控制这些事先已定义好的对象，因此，对象定义是整个系统的核心步骤直接影响后面的各个安全控制环节。建议由开发程序员进行初始化配置。对象定义的包括如下几步：
                <ul class="n01">
                    <li>功能模块定义：系统中除部分公用的界面、公用功能模块外，其它均为业务功能模块是用户完成各自不同的业务功能的主要算途径，也是我们安全管理要保护的重点对象，所以我们必须对业务功能模块定义。有定义的功能模块对象我们就有可能组织权限根据用户需要完成的工作配置用户业务功能菜单，这也符合&quot;最少特权策略&quot;。 </li>
                    <li>界面元素控制：除了功能菜单要受到控制外，如要控制功能模块的界面元素其功能模块界面元素也需定义，大部分界面元素均包含有相关的业务功能操作，所以对相应操作的界面元素是进行定义是有必要的。 </li>
                    <li>数据信息控制：业务功能模块的大部分界面元素是显示和操作数据内容的基础，也是用户对读取数据和操作数据的主要途径，为了数据信息的安全有必要对这界面元素的操作数据予以采取安全保密措施。这就需要对这些界面元素定义相关的数据约束条件。 </li>
                    <li>对象定义(流程) 流程图如下<br />
                    <img src="http://www.kupage.com/src/20030427/1304140000001rmox004.gif" alt="" /> </li>
                </ul>
                </li>
                <li><strong>权限定义工具。</strong><br />
                在定义好系统对象的前提下，定义对象的在不同情况的的访问类型，希望对象在不同情况下具有不同的访问类型，这就需要定义对象的权限。定义权限就是是定义对象访问控制和数据访问控制。为了表述方便我们对权限用一个三元组符号来表示P（o,t,p）,其中o 表示访问对象；t 表示访问类型；p 表示谓词。表示在谓词p为真时对于对象o可进行t类型的访问。权限定义系统安全管理基础步骤之一，只有给各种对象定义好访问的权限，才能给角色配置权限，基于角色管理才能成为可能。系统提供定义权限工具，请程序员根据实际需求定义对象的权限。定义权限的流程图如下：<br />
                <img src="http://www.kupage.com/src/20030427/1304140000001rmox005.gif" alt="" /> </li>
            </ol>
            <p><strong>3.2.2.2. 角色定义与权限配置</strong></p>
            <ol class="n01">
                <li><strong>角色定义。</strong><br />
                基于角色的访问控制方法的思想就是把对用户的授权分成两部份，用角色来充当用户行驶权限的中介。这样，用户与角色之间以及角色与权限之间就形成了两个多对多的关系。系统提供角色定义工具允许用户根据自己的需要（职权、职位以及分担的权利和责任）定义相应的角色。角色之间有相应继承的关系，当一个角色r1继承另一个角色r2时，r1就自动拥有了r2的访问权限(表示r1-&gt;r2)。角色继承关系自然的反映了一个组织内部权利和责任的关系，为方便权限管理提供了帮助。角色继承关系提供了对已有角色的扩充和分类的手段，使定义新的角色可以在已有角色的基础上进行，扩充就是通过增加父角色的权限去定义子角色，分类通过不同子角色继承同一父角色来体现。另外还允许多继承，即一个角色继承多个父角色，多继承体现对角色的综合能力。角色定义示流程图如下：<br />
                <img src="http://www.kupage.com/src/20030427/1304140000001rmox006.gif" alt="" /> </li>
                <li><strong>权限配置。</strong><br />
                角色是一组访问权限的集合，一个用户可以是很多角色的成员，一个角色也可以有很多个权限，而一个权限也可以重复配置于多个角色。权限配置工作是组织角色的权限的工作步骤之一，只有角色具有相应的权限后用户委派才能具有实际意义。权限配置流程图如下：<br />
                <img src="http://www.kupage.com/src/20030427/1304140000001rmox007.gif" alt="" /> </li>
            </ol>
            <p><strong>3.2.2.3. 用户、用户组定义</strong></p>
            <ol class="n01">
                <li><strong>用户定义。</strong><br />
                系统的最终使用者是用户，因此必须建立用户的鉴别机构，登记用户的身份信息。在系统中定义可登录的用户操作系统是系统安全管理所必须步骤，也是人与系统的接口。 </li>
                <li><strong>用户组定义。</strong><br />
                为了本系统适用于分散式权限管理，加入了用户组的概念，是指一群用户的集合。方便权限管理用户组也可以委派角色，当用户被加入用户组时自动对用户的所在用户组拥有的角色进行了委派。为了便于分散式权限管理系统同时还支持对部分组的权限进行下发方式处理，授权特定的用户对用户组的用户权限进行管理。 </li>
            </ol>
            <p><strong>3.2.2.4. 权限审查</strong><br />
            在授权完成后可检查登录用户所的拥有的能力表信息，审查给用户的权限是合适，如不合适可重新进行用户委派和收回部分权限的处理。目前系统只能以对用户组管理的模式对一个用户组内的用户可进行部分权限收回处理。</p>
            <p><strong>3.2.2.5. 用户鉴别机构</strong><br />
            安全保护的首要问题是鉴别用户身份。目前有三种方法可用：第一、利用用户的物理特征（声波、指纹、相貌、签名）。这在理论是最可靠的，但由于物理特征可能随时间变化且记录尚欠成熟等原因，使该方法未能广泛应用。第二、利用用户特有的证件，如身份证、机器可读卡先考片，其缺点是证件可能被别人复制或冒用。第三、利用用户知道的某件能证明其身份的约定（如口令）。这是当前较为常用的方法。本系统采用第三种方法。</p>
            <table cellspacing="0" border="1" width="100%" cellpadding="5">
                <tbody>
                    <tr>
                        <td>用户名称</td>
                        <td>标识</td>
                        <td>其它情况</td>
                    </tr>
                    <tr>
                        <td>CHENDA</td>
                        <td>GOOD</td>
                        <td>&hellip; &hellip;</td>
                    </tr>
                    <tr>
                        <td>&hellip; &hellip;</td>
                        <td>&hellip; &hellip;</td>
                        <td>&hellip; &hellip;</td>
                    </tr>
                </tbody>
            </table>
            如上表所示是用户鉴别机构保存的一张登记有每个用户名称、标识和有关情况的表，表中的用户名通常是公开的，标识则是保密的，当用户要访问系统时，须首先把自已的名称和标识登记到系统中（即出示证件）。这时用户鉴别系统机构检查用户的标识是否与用表中的标识一致，是则认为用户身份己得到证实，否则认为是假冒，系统将拒绝用户要求执行的操作。口令是最常用的一种标识，通常由若干字母、数字组合而成。系统只允许用户连续两次或三次登记口令，如果都不对则要等待一段较长的时间才成重新登记，这种延长时间的方法能够有效的防止冒名者猜测口令的可能。<br />
            <br />
            <p><strong>3.2.2.6. 访问控制机构</strong><br />
            杜绝对系统非法访问主要方法是访问控制。用户系统的访问规则可以用访问规则表示，根据安全策略用访问规则给0用户授权。访问控制就是要处理怎样表达和核对访问规则的问题。从形式上来说，一条访问规则可以写成四元组的形式(u,o,t,p)可前已有权限表示形式重新表示为（u,P）。系统的访问控制分为模块级控制和界面元素级控制。</p>
            <p><img src="http://www.kupage.com/src/20030427/1304140000001rmox008.gif" alt="" /><br />
            存贮和检查访问规则是访问控制机构须解决的部问题。本系统为考虑运行速度根据系统中角色、权限配置、用户委派等关系动态地的组成一张用户能力表保存在系统中根据上述配置信息改变由系统动态生成和保存。能力表（也称C-表）是存贮和核对访问规则的一种有效形式。能力表是面向主体的，用以说明主体能对那个访问对象执行何种操作。能力表的基本形式如下：</p>
            <table cellspacing="0" border="1" width="100%" cellpadding="5">
                <tbody>
                    <tr>
                        <td>Si</td>
                        <td>J</td>
                        <td>(oi1,ti1,pi1)</td>
                        <td>&hellip;&hellip;&hellip;..</td>
                        <td>(oij,tij,pij)</td>
                    </tr>
                </tbody>
            </table>
            其中Si表示第I个主体；j为Si可访问的数据对象的个数；(oi1,ti1,pi1)为访问权限。全部主体的能力表的集合即为系统的全部访问规则。当某个访问请求需进行生效检查时，则按访问请求的主体找到能力表逐项核对以决定其是否有效。<br />
            <br />
            <p><span class="atitle3">安全管理控制核心</span><br />
            安全管理控制核心是系统安全管理的核心控制部分，它在系统中控制整个系统的安全控制工作，由它决定系统是否启动安全管理，在什么情况下调用访问控制机构，根据情况编写访问规则，如何将已有的访问规则应用于控制，存贮访问规则。</p>
            <p><a name="4" id="4"><span class="atitle2">4. 系统评价</span></a><br />
            <span class="atitle3">4.1. 系统特点（自评）</span><br />
            安全管理系统核心思想是在基于角色控制思想的基础上提取改进而来的，上述功能模型能较好満足产品开发人员提出的系统访问控制需求。分析如下：</p>
            <ol class="n01">
                <li>实现了系统开发过程中的职责分离，系统的安全管理部分被作为整个系统的核心控制部分，单独的被分离出来制定一些整个系统通用的安全准则。程序员在开发时不要过多的考虑程序安全性的问题只需要遵系统的安全准则即可，而是把主要精力花费在系统的业务功能上。 </li>
                <li>有效的利用系统已有的资源减少系统的冗余，使系统的条理更加清楚。对已有功能模块只需设置不同的特征参数和对各种界面元素实施不同的访问类型控制，就能产生不同控制效果不需程序员再进行编写程序的工作。 </li>
                <li>基于角色对用户组进行访问控制：对一组用户比对单个用户进行访问控制更加合理，用户组代表了具有相近工作性质的一组用户的集合，可以委派完成用户组工作的角色以控制用户组的权限范围（当然我们也可以把角色看成是我们系统中一个特定用户组）。同时支持角色的继承和多继承。通过改变用户的当前角色集就可以改变用户的权限，而改变某种角色所含的权限时又可以改变一组用户的权限，基于这种访问控制方式有3个方面的作用：（1）简化了权限管理，避免直接在用户和数据之间进行授权和取消。研究表明，用户所具有的权限易于发生改变，而某种角色所对应的权限更加稳定；（2）有利于合理划分职责，用户只有其所应具有权限，这样可以避免越权行为，有关用户组的关系描述正是对此的支持；（c）防止权力滥用，敏感的工作分配给若干个不同的用户完成，需要合作的操作序列不能由单个用户完成。 </li>
                <li>支持动态地改变用户的权限：安全管理考虑了访问权限不是静态，而是动态的情况。所有对象的权限均用三元组来表示P（o,t,p）主体在系统中的访问规则用四元组来表示（s,o,t,p）。当产品系统使用工作流时，可通过产品平台与安全管理控制核心的接口，重新为编写访问规则，动态修改主体能力表。动态分配用户完成当前工作流环节所需的权限。 </li>
                <li>权限的相互关联：各种权限不是互相独立而是相互关联的，而且权限可以有感知其它用用户操作，这可以描述有关协同权限。功能例如在给数据编辑控件授权只读权限时，收回用户对数据插入和删除权限，该权限允许感知其它用户的操作，诸如某用户改变了数据等等。 </li>
                <li>提供方便的授权/取消机制和检查机制：只要进行简单的赋值操作即可完成授权，同时由角色分配规则和主体访问规则控制则指导模型式的应用。 </li>
                <li>用户之间的授权关系：依据角色指派关系，运行系统中的用户自身可以对角色进行管理，这提供了又一种动态改变用户权限的手段。通常，角色指派的权力都在系统中具有管理责任的用户手中。 </li>
            </ol>
            </span></td>
        </tr>
    </tbody>
</table>
          <br/><br/>
          <span style="color:red;">
            <a href="http://sprite.javaeye.com/blog/136140#comments" style="color:red;">已有 <strong>0</strong> 人发表留言，猛击-&gt;&gt;<strong>这里</strong>&lt;&lt;-参与讨论</a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">Windows7在微软WinHEC 2008上揭开神秘面纱</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 28 Oct 2007 13:50:33 +0800</pubDate>
        <link>http://sprite.javaeye.com/blog/136140</link>
        <guid>http://sprite.javaeye.com/blog/136140</guid>
      </item>
          <item>
        <title>Subversion的配置和使用说明</title>
        <author>sprite</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sprite.javaeye.com">sprite</a>&nbsp;
                    链接：<a href="http://sprite.javaeye.com/blog/130189" style="color:red;">http://sprite.javaeye.com/blog/130189</a>&nbsp;
          发表时间: 2007年10月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p class="MsoNormal" align="center" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 18pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">Subversion的配置和使用说明<o:p></o:p></span></strong></p>
<p class="MsoNormal" align="center" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center"><span lang="EN-US" style="FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"><font size="3">&nbsp;<o:p></o:p></font></span></p>
<p class="MsoNormal" align="center" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center"><span style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">john</span></p>
<p class="MsoNormal" align="center" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: center"><span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">2007-08-18<o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">&nbsp;<o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">1. 软件下载<br />
2. 服务器和客户端安装<br />
3. 建立版本库（Repository）<br />
4. 配置用户和权限<br />
5. 运行独立服务器<br />
6. 初始化导入<br />
7. 基本客户端操作<o:p></o:p></span></strong></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">8. 分支与合并<o:p></o:p></span></strong></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">1，软件下载<o:p></o:p></span></strong></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">* </span></strong><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">下载<span lang="EN-US">Subversion服务器程序。<o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">到官方网站的下载二进制安装文件，目前可以下载<span lang="EN-US">svn-1.4.4-setup.exe。<o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">下载地址：<span lang="EN-US"><a href="http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91"><span style="COLOR: black">http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91</span></a><o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">此版本支持<span lang="EN-US">Apache2.0.x <o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">* 下载Subversion的Windows客户端TortoiseSVN。<o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">TortoiseSVN是扩展Windows Shell的一套工具，可以看作Windows资源管理器的插件，安装之后Windows就可以识别Subversion的工作目录。<br />
官方网站是TortoiseSVN，下载方式和前面的svn服务器类似，在下载页面选择目前的最高稳定版本的安装文件TortoiseSVN-1.4.4.9706-win32-svn-1.4.4.msi，还可以sourceforge的语言下载页面中，下载简体中文语言包。<o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">下载地址：<span lang="EN-US"><a href="http://tortoisesvn.net/downloads"><span style="COLOR: black">http://tortoisesvn.net/downloads</span></a><o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">&nbsp;<o:p></o:p></span></strong></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"><br />
2，服务器和客户端安装<o:p></o:p></span></strong></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">*</span></strong><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"> 服务器安装，直接运行svn-1.4.4-setup.exe，根据提示安装即可，这样我们就有了一套服务器可以运行的环境。(由于subversion已有自带的svnserver服务器，如果需要使用Apache服务器的特性则再将其集成到apache上即可，此处我们暂时使用它自带的服务器)<o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">(注：apache的配置在文档最后边的附录中可以找到)<br />
* 安装TortoiseSVN，同样直接运行TortoiseSVN-1.4.4.9706-win32-svn-1.4.4.msi按照提示安装即可，不过最后完成后会提示是否重启，其实重启只是使svn工作拷贝在windows中的特殊样式生效，与所有的实际功能无关，为了立刻看到好的效果，还是重新启动机器。<o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">3，建立版本库（Repository）<o:p></o:p></span></strong></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">运行<span lang="EN-US">Subversion服务器需要首先要建立一个版本库（Repository），可以看作服务器上存放数据的数据库，在安装了Subversion服务器之后，可以直接运行，如：<o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">svnadmin create E:\svn\sise_repository<o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">就会在目录<span lang="EN-US">E:\svn\sise_repository下创建一个版本库。<o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">我们也可以使用<span lang="EN-US">TortoiseSVN图形化的完成这一步：<o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">在目录<span lang="EN-US">E:\svn\sise_repository下&quot;右键-&gt;TortoiseSVN-&gt;Create Repository here...&ldquo;， 然后可以选择版本库模式， 这里使用默认即可， 然后就创建了一系列目录和文件。<o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">如图所示<span lang="EN-US">:<o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"><v:shapetype o:spt="75" coordsize="21600,21600" filled="f" stroked="f" id="_x0000_t75" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t"><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:extrusionok="f" o:connecttype="rect" gradientshapeok="t"></v:path><o:lock v:ext="edit" aspectratio="t"></o:lock></v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style="WIDTH: 339.75pt; HEIGHT: 300pt"><v:imagedata src="file:///C:/DOCUME~1/john/LOCALS~1/Temp/msoclip1/01/clip_image001.png" o:title=""></v:imagedata></v:shape><o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">在弹出的数据仓库类型我们选择默认的<span lang="EN-US">FSFS,点击OK。<o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"><v:shape id="_x0000_i1026" type="#_x0000_t75" style="WIDTH: 228pt; HEIGHT: 148.5pt"><v:imagedata src="file:///C:/DOCUME~1/john/LOCALS~1/Temp/msoclip1/01/clip_image003.png" o:title=""></v:imagedata></v:shape><o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">4，配置用户和权限<o:p></o:p></span></strong></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">来到<span lang="EN-US">E:\svn\sise_repository\conf目录，修改svnserve.conf：<o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"># auth-access = write<br />
# password-db = passwd<o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">改为：<span lang="EN-US"><o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">auth-access = write<span style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </span>//通过验证的用户才能有读写的权限<br />
password-db = passwd<span style="mso-spacerun: yes">&nbsp; </span>//验证用户所使用的文件passwd<o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">然后修改同目录的<span lang="EN-US">passwd文件，去掉下面三行的注释：<o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"># [users]<br />
# harry = harryssecret<br />
# sally = sallyssecret<o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">最后变成：<span lang="EN-US"><o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">[users]<o:p></o:p></span></p>
<p><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">harry = 123456<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>//以名值的方式存储用户名和密码<span style="mso-spacerun: yes">&nbsp;&nbsp; </span></span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文宋体; mso-fareast-font-family: 华文新魏; mso-ascii-font-family: 华文新魏"><font face="Verdana">&ldquo;</font></span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">用户名<span lang="EN-US">=密码</span></span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文宋体; mso-fareast-font-family: 华文新魏; mso-ascii-font-family: 华文新魏"><font face="Verdana">&rdquo;</font></span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"><br />
sally = 654321<o:p></o:p></span></p>
<p><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">(注：以路径为授权的文件的配置)<o:p></o:p></span></p>
<p><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">[groups]<o:p></o:p></span></p>
<p><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"># harry_and_sally = harry,sally<o:p></o:p></span></p>
<p><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">admin=john<o:p></o:p></span></p>
<p><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">developer=peter<o:p></o:p></span></p>
<p><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">&nbsp;<o:p></o:p></span></p>
<p><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"># [/foo/bar]<o:p></o:p></span></p>
<p><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"># harry = rw<o:p></o:p></span></p>
<p><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"># * =<o:p></o:p></span></p>
<p><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">[/]<o:p></o:p></span></p>
<p><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">*=r<o:p></o:p></span></p>
<p><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">@admin=rw<o:p></o:p></span></p>
<p><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"># [repository:/baz/fuz]<o:p></o:p></span></p>
<p><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"># @harry_and_sally = rw<o:p></o:p></span></p>
<p><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"># * = r<o:p></o:p></span></p>
<p><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">[SISEWebServices:/]<o:p></o:p></span></p>
<p><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">@developer=rw<o:p></o:p></span></p>
<p><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: blue; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">}</span><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"><br />
5，运行独立服务器<o:p></o:p></span></strong></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">在任意目录下运行：<span lang="EN-US">(如果提示找不到svnserve则检查，%Subversion安装目录%\bin是否已添加至环境变量PATH)<o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">svnserve -d -r E:\svn\sise_repository\ <o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">我们的服务器程序就已经启动了。<span lang="EN-US"><o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">(注：可通过执行 svnserve &ndash;help 来得到svnserve的帮助信息)<o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">附<span lang="EN-US">:将svnserve安装为系统服务<o:p></o:p></span></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">sc create svnserve binpath= &quot;C:\developertools\Subversion\bin\svnserve.exe --service --root D:\svn\sise_repository&quot; displayname= &quot;Subversion&quot; depend= Tcpip start= auto <o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">另外还有两点需要小心处理。首先，如果路径中包括空格，一定要用&ldquo;<span lang="EN-US">\&rdquo;处理&ldquo;&quot;&rdquo;号，例如上面的例子中如果svnserve.exe在&ldquo;c:\program files\subversion\&rdquo;中，则命令应该写为&ldquo;binpath= &quot;\&quot;c:\program files\subversion\bin\svnserve.exe\&quot;&rdquo;（&ldquo;&rdquo;中的内容），整个命令如下，红色部分是改变部分：<o:p></o:p></span></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文宋体; mso-fareast-font-family: 华文新魏; mso-ascii-font-family: 华文新魏; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><font face="Times New Roman">&nbsp;&nbsp;</font></span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> sc create svnservice<o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left; mso-pagination: widow-orphan; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文宋体; mso-fareast-font-family: 华文新魏; mso-ascii-font-family: 华文新魏; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><font face="Times New Roman">&nbsp;&nbsp;</font></span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> binpath= </span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体">&quot;\&quot;</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"> C:\developertools\Subversion\bin\svnserve.exe</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: red; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> \&quot;</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"> --service -r D:\svnroot&quot;<br />
</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文宋体; mso-fareast-font-family: 华文新魏; mso-ascii-font-family: 华文新魏; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><font face="Times New Roman">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</font></span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">displayname= &quot;Subversion&quot; depend= Tcpip start= auto</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体; mso-font-kerning: 0pt; mso-bidi-font-family: 宋体"><br />
其次，sc对选项的格式还有要求，例如&ldquo;depend= Tcpip&rdquo;不能写为&ldquo;depend =<span style="mso-spacerun: yes">&nbsp;&nbsp; </span>Tcpip&rdquo;或&ldquo;depend=Tcpip&rdquo;，也就是&ldquo;=&rdquo;前不能有空各，而后面必须有空格。<o:p></o:p></span></p>
<p style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">如果服务安装的有问题，你可能需要删除服务。要删除前面添加的服务，只需要运行<span lang="EN-US">&quot;sc delete svnservice&quot;，&quot;svnservice&quot;就是我们创建服务时使用的名字。<strong style="mso-bidi-font-weight: normal"><br />
6，初始化导入<o:p></o:p></strong></span></span></p>
<p style="TEXT-JUSTIFY: inter-ideograph; MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: justify"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">来到我们想要导入的项目根目录，在这个例子里是<span lang="EN-US">D:\MyWork \Sample，目录下有若干个文件：<o:p></o:p></span></span></p>
<p style="TEXT-JUSTIFY: inter-ideograph; MARGIN: 0cm 0cm 0pt 18pt; TEXT-INDENT: -18pt; LINE-HEIGHT: normal; TEXT-ALIGN: justify; tab-stops: list 18.0pt; mso-list: l1 level1 lfo1"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">1.<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">右键<span lang="EN-US">-&gt;TortoiseSVN-&gt;Import...<o:p></o:p></span></span></p>
<p style="TEXT-JUSTIFY: inter-ideograph; MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: justify"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"><v:shape id="_x0000_i1027" type="#_x0000_t75" style="WIDTH: 260.25pt; HEIGHT: 267pt"><v:imagedata src="file:///C:/DOCUME~1/john/LOCALS~1/Temp/msoclip1/01/clip_image005.png" o:title=""></v:imagedata></v:shape></span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"><br />
2. URL of repository输入&ldquo;svn://localhost/Sample&rdquo;,点击OK。<o:p></o:p></span></p>
<p style="TEXT-JUSTIFY: inter-ideograph; MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: justify"><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"><v:shape id="_x0000_i1028" type="#_x0000_t75" style="WIDTH: 4in; HEIGHT: 217.5pt"><v:imagedata src="file:///C:/DOCUME~1/john/LOCALS~1/Temp/msoclip1/01/clip_image007.png" o:title=""></v:imagedata></v:shape><o:p></o:p></span></p>
<p style="TEXT-JUSTIFY: inter-ideograph; MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: justify"><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">3、系统提示输入用户名和密码，这里输入harry 密码123456<o:p></o:p></span></p>
<p style="TEXT-JUSTIFY: inter-ideograph; MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: justify"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"><v:shape id="_x0000_i1029" type="#_x0000_t75" style="WIDTH: 351pt; HEIGHT: 192.75pt"><v:imagedata src="file:///C:/DOCUME~1/john/LOCALS~1/Temp/msoclip1/01/clip_image009.png" o:title=""></v:imagedata></v:shape><o:p></o:p></span></p>
<p style="TEXT-JUSTIFY: inter-ideograph; MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: justify"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">出现如下窗口表示已添加成功：<span lang="EN-US"><o:p></o:p></span></span></p>
<p style="TEXT-JUSTIFY: inter-ideograph; MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: normal; TEXT-ALIGN: justify"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"><v:shape id="_x0000_i1030" type="#_x0000_t75" style="WIDTH: 342pt; HEIGHT: 188.25pt"><v:imagedata src="file:///C:/DOCUME~1/john/LOCALS~1/Temp/msoclip1/01/clip_image011.png" o:title=""></v:imagedata></v:shape><br />
至此初始的数据就已经全部导入到了我们刚才定义的版本库中。</span><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: #666666; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">7. 基本客户端操作 <o:p></o:p></span></strong></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">CheckOut我们所需要的项目。在我们打算用来存放检出后的项目的文件夹上边右键点击，选择&ldquo;SVN CheckOut&hellip;&rdquo;。如图：<o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"><v:shape id="_x0000_i1031" type="#_x0000_t75" style="WIDTH: 126pt; HEIGHT: 124.5pt"><v:imagedata src="file:///C:/DOCUME~1/john/LOCALS~1/Temp/msoclip1/01/clip_image013.png" o:title=""></v:imagedata></v:shape><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left"><span style="FONT-SIZE: 12pt; COLOR: black; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">在弹出的窗口中输入<span lang="EN-US">repository的URL地址和checkout后文件的存放路径,如图所示:<o:p></o:p></span></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"><v:shape id="_x0000_i1032" type="#_x0000_t75" style="WIDTH: 279pt; HEIGHT: 196.5pt"><v:imagedata src="file:///C:/DOCUME~1/john/LOCALS~1/Temp/msoclip1/01/clip_image015.png" o:title=""></v:imagedata></v:shape><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">点击<span lang="EN-US">OK,如果没有报错则表示我们已成功将文件从版本库中检出。<o:p></o:p></span></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">检出后的文件夹将被打了特殊的标记，至此，<span lang="EN-US">Sample文件夹和其子目录和文件都被收纳到Subversion的管理中。<o:p></o:p></span></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">未有改动<span lang="EN-US"><v:shape id="_x0000_i1033" type="#_x0000_t75" style="WIDTH: 87.75pt; HEIGHT: 48.75pt"> <v:imagedata src="file:///C:/DOCUME~1/john/LOCALS~1/Temp/msoclip1/01/clip_image017.png" o:title=""></v:imagedata></v:shape><span style="mso-spacerun: yes">&nbsp; </span>已有文件发生改变<v:shape id="_x0000_i1034" type="#_x0000_t75" style="WIDTH: 116.25pt; HEIGHT: 46.5pt"> <v:imagedata src="file:///C:/DOCUME~1/john/LOCALS~1/Temp/msoclip1/01/clip_image019.png" o:title=""></v:imagedata></v:shape><o:p></o:p></span></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; TEXT-ALIGN: left; tab-stops: list 36.0pt; mso-list: l0 level1 lfo2"><strong style="mso-bidi-font-weight: normal"><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">1、<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></strong><strong style="mso-bidi-font-weight: normal"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">提交变更了的文件<span lang="EN-US"><o:p></o:p></span></span></strong></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-ALIGN: left"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">一旦我们改变了文件夹下边的某个文件时，<span lang="EN-US">TortoiseSVN将文件的标志换成感叹号的标记，此时如果我们希望将变更的文件提交到版本库中时，只需在文件上点击右键，选择&ldquo;SVN Commit..&rdquo;，在弹出的窗口中输入些次提交的信息和选择需要提交的文件（建议在所有修改过的文件的顶层目录做提交，将某一次的修改一次性提交，利用subversion的原子性可以保证项目不会存在不完整的版本）。如图所示：<o:p></o:p></span></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"><v:shape id="_x0000_i1035" type="#_x0000_t75" style="WIDTH: 345pt; HEIGHT: 369pt"><v:imagedata src="file:///C:/DOCUME~1/john/LOCALS~1/Temp/msoclip1/01/clip_image021.png" o:title=""></v:imagedata></v:shape><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-ALIGN: left"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">点击<span lang="EN-US">OK之后文件的变更信息便保存到了Subversion的版本库中去了。<o:p></o:p></span></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-ALIGN: left"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">为了确认我们的修改已被提交到版本库，我们可以通过右键点击文件，选择&ldquo;<span lang="EN-US">TortoiseSVN-</span></span><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: Wingdings; mso-hansi-font-family: 华文宋体; mso-fareast-font-family: 华文新魏; mso-ascii-font-family: 华文新魏; mso-char-type: symbol; mso-symbol-font-family: Wingdings"><span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">&agrave;</span></span><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">Show Log&rdquo;，结果如图。<o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"><v:shape id="_x0000_i1036" type="#_x0000_t75" style="WIDTH: 333pt; HEIGHT: 156pt"><v:imagedata src="file:///C:/DOCUME~1/john/LOCALS~1/Temp/msoclip1/01/clip_image023.png" o:title=""></v:imagedata></v:shape><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; TEXT-ALIGN: left; tab-stops: list 36.0pt; mso-list: l0 level1 lfo2"><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">2、<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">更新本地拷贝<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">在文件夹或文件上右键点击选择&ldquo;<span lang="EN-US">SVN Update&rdquo;，系统将默认的将所选择的文件夹或文件更新至最新的版本。如果更新到特定的版本，可以使用&ldquo;TortoiseSVN-</span></span><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: Wingdings; mso-hansi-font-family: 华文宋体; mso-fareast-font-family: 华文新魏; mso-ascii-font-family: 华文新魏; mso-char-type: symbol; mso-symbol-font-family: Wingdings"><span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">&agrave;</span></span><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">Update to revision&rdquo;，在弹出的窗口中选择&ldquo;Revision 并输入需更新至的版本号&rdquo; <o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"><v:shape id="_x0000_i1037" type="#_x0000_t75" style="WIDTH: 225pt; HEIGHT: 175.5pt"><v:imagedata src="file:///C:/DOCUME~1/john/LOCALS~1/Temp/msoclip1/01/clip_image025.png" o:title=""></v:imagedata></v:shape><span style="mso-spacerun: yes">&nbsp; </span><v:shape id="_x0000_i1038" type="#_x0000_t75" style="WIDTH: 171pt; HEIGHT: 123pt"><v:imagedata src="file:///C:/DOCUME~1/john/LOCALS~1/Temp/msoclip1/01/clip_image027.png" o:title=""></v:imagedata></v:shape><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">(注：Subversion的每一次提交对应一颗版本库树的快照，所以update至某一个revision，则是update</span><span lang="EN-US" style="FONT-SIZE: 14pt; mso-fareast-font-family: 华文新魏"><font face="Times New Roman">&nbsp;</font></span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-ascii-font-family: 'Times New Roman'">至某一颗版本库树的快照。</span><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">)<o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; TEXT-ALIGN: left; tab-stops: list 36.0pt; mso-list: l0 level1 lfo2"><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">3、<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">添加新的文件或文件夹<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-ALIGN: left"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">在新文件或文件上右键点击选择&ldquo;<span lang="EN-US">TortoiseSVN-</span></span><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: Wingdings; mso-hansi-font-family: 华文宋体; mso-fareast-font-family: 华文新魏; mso-ascii-font-family: 华文新魏; mso-char-type: symbol; mso-symbol-font-family: Wingdings"><span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">&agrave;</span></span><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">Add..&rdquo;<o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"><v:shape id="_x0000_i1039" type="#_x0000_t75" style="WIDTH: 287.25pt; HEIGHT: 180pt"><v:imagedata src="file:///C:/DOCUME~1/john/LOCALS~1/Temp/msoclip1/01/clip_image029.png" o:title=""></v:imagedata></v:shape><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-ALIGN: left"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">系统弹出确认窗口<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"><v:shape id="_x0000_i1040" type="#_x0000_t75" style="WIDTH: 233.25pt; HEIGHT: 176.25pt"><v:imagedata src="file:///C:/DOCUME~1/john/LOCALS~1/Temp/msoclip1/01/clip_image031.png" o:title=""></v:imagedata></v:shape><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-ALIGN: left"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">点击<span lang="EN-US">OK，文件夹会被标上加号，这个时候还未将其加入至版本库中去，需将其提交，右键&ldquo;SVN Commit..&rdquo;，此时所选择的文件或文件夹将被全部添加到版本库中去。<o:p></o:p></span></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; TEXT-ALIGN: left; tab-stops: list 36.0pt; mso-list: l0 level1 lfo2"><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">4、<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">删除文件或文件夹<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-ALIGN: left"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">在欲删除的文件或文件夹上右键点击，选择&ldquo;<span lang="EN-US">TortoiseSVN-</span></span><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: Wingdings; mso-hansi-font-family: 华文宋体; mso-fareast-font-family: 华文新魏; mso-ascii-font-family: 华文新魏; mso-char-type: symbol; mso-symbol-font-family: Wingdings"><span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">&agrave;</span></span><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">delete&rdquo;，然后再提交，则所选择的文件或文件夹便从版本库删除了。<o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; TEXT-ALIGN: left; tab-stops: list 36.0pt; mso-list: l0 level1 lfo2"><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">5、<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">重命名<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-ALIGN: left"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">如需重命名，需由需由<span lang="EN-US">Tortoise来做，不能直接在操作系统上重命名。在欲重命名的文件或文件上右键点击，选择&ldquo;TortoiseSVN-</span></span><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: Wingdings; mso-hansi-font-family: 华文宋体; mso-fareast-font-family: 华文新魏; mso-ascii-font-family: 华文新魏; mso-char-type: symbol; mso-symbol-font-family: Wingdings"><span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">&agrave;</span></span><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">rename..&rdquo;，在弹出的窗口中输入新的文件或文件夹名称，点击OK，将会多出一个新命名后的文件或文件夹，再将它们提交。如图(重命名是一个将原文件夹做一次复制然后删除旧文件夹将新的文件夹提交上去的过程，保留历史记录)。<o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"><v:shape id="_x0000_i1041" type="#_x0000_t75" style="WIDTH: 244.5pt; HEIGHT: 68.25pt"><v:imagedata src="file:///C:/DOCUME~1/john/LOCALS~1/Temp/msoclip1/01/clip_image033.png" o:title=""></v:imagedata></v:shape><o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; TEXT-ALIGN: left; tab-stops: list 36.0pt; mso-list: l0 level1 lfo2"><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">6、<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">撤销所做更改<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-ALIGN: left"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">在编缉了某些文件或文件后，如果需要返回修改前的版本，则右键点击，选择&ldquo;<span lang="EN-US">TortoiseSVN-</span></span><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: Wingdings; mso-hansi-font-family: 华文宋体; mso-fareast-font-family: 华文新魏; mso-ascii-font-family: 华文新魏; mso-char-type: symbol; mso-symbol-font-family: Wingdings"><span style="mso-char-type: symbol; mso-symbol-font-family: Wingdings">&agrave;</span></span><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">Revert..&rdquo;进行撤销，将文件恢复到修改前的版本。<o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: -36pt; TEXT-ALIGN: left; tab-stops: list 36.0pt; mso-list: l0 level1 lfo2"><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">7、<span style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">文件更新的冲突处理<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-ALIGN: left"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">当你<span lang="EN-US">Update出现了冲突时，Subversion会产生三个文件如图,<o:p></o:p></span></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">Filename.mine<o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"><span style="mso-spacerun: yes">&nbsp;</span>你更新前的文件，没有冲突标志，只是你最新更改的内容。（如果Subversion认为这个文件不可以合并，.mine文件不会创建，因为它和工作文件相同。）<o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">Filename.rOLDREV<o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-ALIGN: left"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">这是你做更新操作以前的<span lang="EN-US">BASE版本文件，就是你在上次更新之后未作更改的版本。<o:p></o:p></span></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">Filename.rNEWREV<o:p></o:p></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-ALIGN: left"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">这是你的<span lang="EN-US">Subversion客户端从服务器刚刚收到的版本，这个文件对应版本库的HEAD版本。<o:p></o:p></span></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-ALIGN: left"><span style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体">这里的<span lang="EN-US">OLDREV是你的.svn目录中的修订版本号，NEWREV是版本库中HEAD的版本号。<o:p></o:p></span></span></p>
<p class="MsoNormal" align="left" style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-ALIGN: left"><span lang="EN-US" style="FONT-SIZE: 14pt; FONT-FAMILY: 华文新魏; mso-hansi-font-family: 华文宋体"><v:shape id="_x0000_i1042" type="#_x0000_t75" style="