1、SPS2007在权限体系方面提出了如下新的概念:
新增功能 |
说明 |
记录级权限 |
这是SPS2007权限部分的一个很大的突破,用户可以对列表记录或文档库的文档单独授权。 |
SPS用户组 |
在SPS2003中,没有自己的用户组,授权都是针对AD的用户或用户组进行授权,在SPS2007中增加了SPS用户组的概念,可以把AD的用户或用户组定义到SPS用户组中,再对组授权。 |
当然,SPS2007中,还有很多细微的概念变化和功能增强,我们在后面的篇幅中介绍。
2、用户
SPS2007的用户信息是存储在『UserInfo』表中,按照每一个网站集单独组织用户体系的方式设计的,具体来说,就是所谓的ID编号,是每个网站集单独编号的。
在该表中,实际上是把AD中的用户信息可用部分转移过来了,如下图:
『tp_SiteAdmin』字段可以标识一个用户是否是网站的管理员。
据微软资料介绍,SPS2007可以不使用AD用户,对于那些没有建立域的小组织来说,这个功能比较实用,其实从我们的分析来看,直接在SPS中新建用户是可行的,估计要使用这个功能应该是在安装的时候设置,我们就不去仔细分析了。
3、用户组
SPS2007的用户组信息是存储在『Groups』表中的,也是按照站点集进行单独组织的,这里有一个有意思的事情就是『UserInfo』表和『Groups』的ID字段是使用同一个序列,就是共同编制ID号。
这里有意思的两个字段是:
『RequestEmail』如果设置这个字段的Email地址,那么这个用户组可以启用『是否自动接受请求』功能。
『Flags』字段是通过组合方式来设置『查看此用户组的成员身份』、『编辑此用户组的成员身份』、『请求加入/退出此用户组』等功能。
用户和用户组的关联是通过『GroupMembership』表来实现的。
4、角色
SPS2007的角色信息是存储在『Roles』表中的:
从上图可以看到,角色是需要依附与某个网站的。
『PermMask』字段是存储的角色权限掩码,就是如下界面的设置的结果:
角色和用户、用户组的对用关系,是通过『RoleAssignment』表来表述的:
其中『ScopeID』是一个重要的概念,就是在SPS2007的资源树中使用单独权限资源的记录。
SPS2007在判断一个用户的实际使用权限的公式如下
用户实际权限=『该用户直接授权所拥有的角色权限和』+『该用户所在AD用户组所拥有的角色权限和』+『该用户直所在用户组所拥有的角色权限和』
上述公式在实际使用中存在嵌套,需要进行递归。
实际上,上述关系不足以说明实际的使用,因为SPS2007中,可以针对资源树的任何一个节点进行单独授权,后边我们在介绍『Perms』表的应用的时候可以看到实际的情况。
5、『Perms』表
这里为何要把这个表独立出来介绍,因为在SPS2007中,这个表记录了那些资源节点使用了单独的权限:
凡是使用独立权限的资源如网站、列表(库)、记录(文档),都在这个表中有一个记录,一个新建立的网站集在这个表中只有两个记录,一个是初始网站本身的,另外一个就是用户列表的。
『RoleDefWebID』这个字段定义了使用独立权限的资源的角色集合使用那个网站的,SPS2007的定义如下:
即使使用独立权限的网站,其角色集合使用的是父网站的,就是这个字段填写的是父网站的ID,用户可以通过『编辑权限级别』来设置自己角色集合,这个时候这个字段填写的是本网站的ID,用户也可以通过『从父网站继承权限级别』来恢复使用父网站的角色集合。
列表(库)、记录(文档)一律使用其所在网站的角色集。
『ScopeUrl』这个字段非常有意思,起了所谓的真正的ID作用,其内容对应『AllDocs』中的『DirName』和『LeafName』字段,而『AllDocs』表本身就维持了SPS2007的整体资源树。
站点表『Webs』通过『WebID』字段直接对应,列表(库)表『AllLists』和记录(文档)表『AllDocs』中有一个『ScopeID』字段来对应。
『AnonymousPermMask』定义了该资源是否允许匿名访问,以及匿名访问的掩码。
6、整体结构分析
上述的内容基本就是SPS2007权限体系的主要内容,我们通过下图可以清晰看到其结构关系:
|
|
如果针对不太复杂的应用,我们可以把上述模型转化为下边的几种模型:
最简单的设计:
|
|
|
这个设计模型就是我们当初ZLBI验证版本的设计模型
使用角色的模型
当然,我们根据需要可以从SPS2007非常复杂的权限模型中,简化出各种方案。
7、SPS2007功能点依赖关系图
8、SPS2007详细功能点分析
权限名称 |
说明 |
分析 |
分类 |
管理列表 |
创建和删除列表,添加或删除列表中的栏,以及添加或删除列表的公共视图 |
允许对列表进行完全的控制。 |
列表权限 |
替代签出版本 |
放弃或签入已由其他用户签出的文档。 |
使用该功能可以强制取消其他用户对文档的签出操作,把文档变成为未签出状态。 |
列表权限 |
添加项目 |
向列表中添加项目,向文档库中添加文档,以及添加 Web 讨论评论。 |
用户关联此功能点后,便可以在自定义列表中添加数据。 但是不能在文档库中添加文档,只能添加目录。 并且在向讨论板中添加恢复的时候,数据能添加成功,但是页面跳转时会提示没有权限。 |
列表权限 |
编辑项目 |
编辑列表中的项目、文档库中的文档、文档中的 Web 讨论评论以及自定义文档库中的 Web 部件页。 |
如果用户拥有这个功能点的话,就能编辑自定义列表中整条记录的每个字段,也就是说现在的权限控制还做不到字段级。 即便是用户关联了该功能点,用户也不能直接编辑文档库的中文档。 |
列表权限 |
删除项目 |
从列表中删除项目、从文档库中删除文档,以及删除文档中的 Web 讨论评论。 |
|
列表权限 |
查看项目 |
查看列表中的项目、文档库中的文档和查看 Web 讨论评论。 |
这个功能点应该只是特指对自定义列表(文档库、讨论版,图片库等等本质上都是自定义列表)中的数据条目的查看。 系统自带的Webpart,比如图片Web部件,没有包含在此列中,所以即使是用户没有关联到此功能点,也可以查看图片Web部件中的图片。 |
列表权限 |
批准项目 |
批准列表项或文档的次要版本。 |
|
列表权限 |
打开项目 |
使用服务器端文件处理程序查看文档源。 |
用户关联上这个功能点,便有权限签出文档库中的文件。 |
列表权限 |
查看版本 |
查看列表项或文档的以前版本。 |
可以进入到文档的版本信息展现页面。 |
列表权限 |
删除版本 |
删除列表项或文档的以前版本。 |
在文档的版本信息查看页面上,会出现删除版本信息的链接。 |
列表权限 |
创建通知 |
创建电子邮件通知。 |
拥有这个功能点的用户,就可以在列表或是列表中的数据发生变化的时候向自己发送电子邮件通知了。由于在研究的过程中,我的角色是站点集管理员,所以我可以选择向谁发邮件,但是普通的用户只能向自己发邮件。 |
列表权限 |
查看应用程序页面 |
查看表单、视图和应用程序页面。枚举列表。 |
这个是一个非常重要的功能点,如果用户没有关联该功能点,即使用户拥有管理列表,管理权限,添加项目,删除项目,编辑项目这些功能点,也不能进行相应的操作,都会提示权限不足。 |
列表权限 |
管理权限 |
创建和更改网站上的权限级别,并为用户和用户组分配权限 |
可以修改角色所关联的功能点,可以为用户和用户组设置关联的角色,也可以把用户和用户组加到网站中来。 一旦用户有了管理权限,那么他就可以给自己赋给任何权限,所以说这个就是最高权限了。 |
网站权限 |
查看使用率数据 |
查看有关网站使用率的报告 |
包含以下几个报告:网站使用率摘要 、请求 、用户 、引用网站 、目标页面、主页。 为查看使用率报告,必须首先启用 Windows SharePoint Services 使用率日志记录和 Office SharePoint 使用率处理。 |
网站权限 |
创建子网站 |
创建子网站,例如工作组网站、会议工作区网站和文档工作区网站。 |
在创建页面上,会看到子站点的创建链接。 当用户没有关联上该功能点时,子站点的创建就会被过滤掉。 |
网站权限 |
管理网站 |
授予执行该网站的所有管理任务并管理内容的能力。 |
|
网站权限 |
添加和自定义网页 |
添加、更改或删除 HTML 网页或 Web 部件页,并使用与 Windows SharePoint Services 兼容的编辑器编辑网站。 |
使用该功能,右上方的"网站操作"菜单会显示出来。 用户可以修改 顶部链接栏 、快速启动 、内容类型、站点列。可以编辑当前的页面。 |
网站权限 |
应用主题和边框 |
将主题或边框应用于整个网站。 |
在网站管理中设置即可。 |
网站权限 |
应用样式表 |
将样式表(.CSS 文件)应用于网站。 |
|
网站权限 |
创建用户组 |
创建一个用户组,该用户组可用于网站集中的任何位置。 |
可以添加SPS组。可以查看组的权限设置情况。 |
网站权限 |
浏览目录 |
使用 SharePoint Designer 和 Web DAV 接口枚举网站中的文件和文件夹。 |
|
网站权限 |
查看网页 |
查看网站中的网页 |
这个功能点的权限级别也很低只是比"打开"略高一点,拥有这个权限就可以查看网页了,但是只能看到网页上的列表本身的信息,看不到列表中的数据。 |
网站权限 |
枚举权限 |
枚举网站、列表、文件夹、文档或列表项中的权限。 |
关联此功能,在网站设置界面中会多出"人员和组"、"高级权限"、"标题、说明和图标 "、"区域设置"这些链接。不过这些都是对这些内容的查看,无权对其进行修改。 |
网站权限 |
浏览用户信息 |
查看有关网站用户的信息 |
在左边的快速启动菜单里,点击"人员和组",就能够浏览人员和组的信息。否则虽然"人员和组"链接仍然可以看到,但是点击后会提示没有权限。 |
网站权限 |
管理通知 |
管理网站中所有用户的通知。 |
在 网站操作->网站设置->网站管理->用户通知 功能界面中可以集中管理网站中的通知。 |
网站权限 |
使用远程接口 |
使用 SOAP、Web DAV 或 SharePoint Designer 接口访问网站。 |
该功能只是一个远程访问的许可,不涉及对内容和配置的操作。 |
网站权限 |
使用客户端集成功能 |
使用启动客户端应用程序的功能。如果没有此权限,用户必须本地处理文档并上载更改。 |
使用该功能,在打开文档库的文件时,系统会给出提示"是要只读打开还是编辑",点击编辑的话。就会直接启动客户端应用程序(比如Word)打开文档,修改后可以直接保存。 如果没有关联该功能点,在打开文档库文件的时候,系统会提示"保存在本地还是直接打开",下载下来后保存,再上载也可以完成对文档的修改,但是较为繁琐。 |
网站权限 |
打开 |
允许用户打开网站、列表或文件夹,以便访问该容器中的项目。 |
这个是权限最低的功能点,所有其他功能点都依赖于"打开"这个功能点。若是给某个用户或是组只赋给"打开"这个功能点权限,那他几乎什么都做不了,网页都查看不了。 |
网站权限 |
编辑个人用户信息 |
允许用户更改个人用户信息,例如添加图片。 |
允许用户更改个人用户信息,例如添加图片 |
网站权限 |
管理个人视图 |
创建、更改和删除列表的个人视图。 |
关联上该功能点,视图的操作菜单内便会多出"创建视图"这个菜单项。 个人便可以为列表创建视图,但是不能修改视图。 |
个人权限 |
添加/删除个人 Web 部件 |
在 Web 部件页中添加或删除个人 Web 部件。 |
|
个人权限 |
更新个人 Web 部件 |
更新 Web 部件以显示个性化信息。 |
|
个人权限 |
从上诉功能点我们可以看到,SPS2007发展到今天,其内容复杂度是比较高的,但是不清楚为何微软这样的公司对于功能抽象模型都做得比较乱,前段时间看到SPS2007工作流定义部分也存在类似的问题,这不知道是所谓敏捷开发的结果或是SPS开发团队的问题。
例外的话题:
微软这样的公司,在项目组织上并非我们想像那样严格,比如用途完全相同的字段,可能名字都是不一样的,类似的东西很多,这带给我们什么呢?国内的公司大多数追求类似CMMx什么的,如果严格来追究,估计微软是过不了这个标准的。
总体感觉:
1、确实SPS2007相对SPS2003在权限方面的设计增强很多,特别对于记录(文档)这样的明细权限的提供,给应用带来很多大好处。
2、类似SPS用户组这样的功能,对于大企业、业务比较复杂但是相对比较稳定的应用来说是非常适用的,但是对于中小应用显得非常繁琐,我在初期使用SPS2007的时候就非常不适应。
3、身对上述2,我觉得可以设计两套权限体系,基本支撑还是SPS2007这样的结构,用户在建立网站或网站集的时候可以选择是否使用用户组的功能,这样对于中小应用就简单顺畅很多。
4、相对我们以前的类似设计,其『Perms』表的设计是值得参考的,简化了很多东西。
【附录1】SPS2007权限部分功能说明
SPS功能 |
详细说明 |
作用范围 |
添加用户 |
为用户组或独立授权资源增加AD用户或AD用户组,据微软资料介绍可以不使用AD用户。 |
网站;#列表;#记录 |
新建用户组 |
在站点集的范围内添加SharePoint用户组, 新建用户组时,会将创建人自动加入到新创建的组中。 不管在哪个站点下任何对用户组的操作,在整个站点集都是可见的,换句话说就是影响到整的站点集。 |
站点集 |
从用户组中删除用户 |
由于SharePoint中的组是一个相对简单地的平面关系,从用户组中删除用户,只是删除了一条用户和组的关联关系。这就意味着被删除的用户不会再有原来所在组所关联到的权限了。 |
网站 |
更改用户组设置 |
更改用户组的各种信息 |
网站 |
查看网站组权限 |
查看一个用户组在一个网站集拥有那些权限 |
网站 |
编辑用户组快速启动 |
更改在"人员和组"页的"快速启动"栏中显示的 SharePoint 组。 |
网站 |
设置用户组 |
这个功能是为相应的网站设置特定的用户组(注意:只能设置用户组,而不能设置用户),分别设定网站的访问者、所有成员、以及网站的所有者。这个权限子站点也是默认继承的。 站点集管理员,可以管理站点中的所有资源,不受该设置的影响,这个比较特殊一点。 |
网站 |
删除用户权限 |
当站点或是列表不是继承父亲的权限的时候,就可以对他自己的权限进行编辑和删除。 删除就是将用户组从允许列表中删掉,这样该用户组中的用户将看不见该网站或是列表了。 |
网站;#列表;#记录 |
编辑用户权限 |
当站点或是列表不是继承父亲的权限的时候,就可以对他自己的权限进行编辑和删除。 编辑权限就是为用户或是用户组关联上新的角色或是删除原关联的角色。 |
网站;#列表;#记录 |
继承权限(编辑权限) |
当子站点或是列表与父亲的权限继承关系被打破后,如果想修复这种继承关系,那么可以使用该功能,但是这么做会将之前设置的权限信息全部删除掉。 通过Perms中增加或删除记录确定。 |
网站;#列表;#记录 |
访问请求 |
可以设定一个网站是否使用允许访问请求,并设定Email地址(Webs表的RequestAccessEmail字段的设定) 。 让没有权限或是权限不够的用户,可以对访问不到的资源向管理员发出访问申请邮件,增强交互性。 |
网站;#列表 |
添加权限级别 |
权限级别就是角色。添加权限级别的时候,可以设定该权限级别所拥有的权限。当然权限级别的名称也必须是唯一的。 |
网站 |
删除权限级别 |
删除权限级别时,有两个系统自带的权限级别不能删除,他们分别是"完全控制 "和"受限访问 "。 |
网站 |
从父网站继承权限级别(编辑权限级别) |
通过设定Perms中的RoleDefWebId字段来设定使用那个网站的权限级别(角色)。 |
网站;#列表;#记录 |
管理父级权限 |
当子站点或是列表的权限是从父亲那里继承得到的时候,可以使用这个功能,链接到父站点下的权限设置页面。(前提是具有父站点权限设置访问权限) |
网站;#列表;#记录 |
设置网站集管理员 |
可以设定一个或多个网站集管理员,拥有网站集下所有网站的完全控制权限。(UserInfo表的tp_SiteAdmin字段)。并且他不受其他权限配置的影响 |
站点集 |
编辑权限级别 |
Roles表的PermMask字段设定 |
网站 |
权限继承 |
在 默认的情况下,子站点的权限是从父站点继承的。如果将SPS上所有的站点、页面、列表、列表中的数据看作一颗树的话,也就是说子节点都会自动继承父节点的 权限。当然也可以打破这一继承,重新设定权限。但是打破继承后,如果在该节点下,再添加新的节点,权限又会默认的继承下去。 |
站点集 |
匿名访问 |
首先需要在『SPS后台管理工具中开放此功能』,然后可以设置匿名访问的权限 |
网站;#列表 |