[MOSS开发]:WSS v3授权
众所周知,MOSS是应用在WSS基础上的,所有针对MOSS开发难免要对WSS要有所了解,精通当然最好。在此B/S架构的软件中,权限是非常重要的一部分,在MOSS中也是如此。在MOSS中,管理权限完成是按照WSS的基本架构来处理权限的。安全授权管理由安全元素构成如下:
安全元素名称 |
拥有什么 |
用户 |
权限 |
域组 |
权限级别 |
SharePoint组 |
安全对象 |
安全元素的关系图如下:
安全元素成员的定义:
1:用户:任何一个拥有用户帐户的人,用户可以直接被授予WSS V3中对一个安全对象的访问权。它是安全元素中最底层也是必须的元素。在定义一个站点时会创建一个站点所有者,此时这个站点所有者就是一个用户。
2:域组: 它可以是一个微软活动目录安全组,也可以是别处一个自定义系统定义的组。
3:SharePoint组:它对于站点来说是一个全局的定义,创建于站点集层,任何一个站点都可以使用它,它是安全对象的最高层,同时包含用户和域组对象。WSS v3自带有三个默认SharePoint组,它们分别是:
SharePoint组名: |
权限级别 |
所有者 |
Full Control(完全控制) |
成员 |
Contribute(分发) |
访问者 |
Read(只读) |
权限的管理:如果单纯是用户身份,那么必须对它进行单独的设置,这种用户最好不要太多,能避免最好完全避免,因为这样的用户一旦多了,对它们进行权限分配的工作量会非常大。此时的解决方案就是把这些用户组成一个组,所有的组成员的权限都是统一的组来分配,这样减少重复工作量。而SharePoint组来管理权限的话会比通过域组或者是个人用户管理权限简单的多。它能够将域组和个人用户结合起来。WSS V3 可以针对站点集,站点,列表,文件夹等设定专门的权限,每一个对象默认从它的父对象继承权限,WSS v3提供的安全对象等级关系图如下:
安全元素对象关系图说明:如上图所示,每一个安全对象都有一个等级,这个等级可以通过权限继承记任意一个父对象的权限设为子对象的权限,同时也允许为一个对象指定特定的权限而不用考虑父级权限。上图的级别关系并不是最全的,只是简单的列了几层关系,通常,一个等级都有可能会扩展为更多的层。上面说到了权限继承,同时也允许我们为一个对象使用禁止权限继承。此时安全对象不从父级对象继承权限,而是有自己的专门权限。
什么是权限级别和权限?
这两个名字看起来都差不多,都是让用户或者是域组拥有相应的权限,WSS V3通过权限级别和权限控制每个用户和组对安全对象可执行的行为。但它们又有本质的不同:权限级别是由一组权限定义的,而每一个权限级别又有多个权限写之相联,这些权限包含:
权限名称: |
功能: |
完全控制 |
包含了所有的权限,允许用户对站点执行任何行为,它不能被更改或者是删除 |
设计 |
具有编辑功能 |
分发 |
查看,编辑功能 |
读取 |
查看功能 |
受限访问 |
当用户或者是组拥有访问权限时,可以访问,但不能访问父对象,这是自动指派的,不能设置或者是修改 |
每一个权限级别都由多个权限组成,这些权限按列表,站点和个人权限分类构成各权限组,如下图所示:
管理权限:WSS V3 的权限管理由三部分构成:
1:用户和组;
2:安全对象;
3:权限级别和权限。
管理权限结构示意图如下:
第一:选择使用默认权限级别或者是组或者自定义创建权限级别;
第二:为站点添加用户和SharePoint组,并组用户和域组分配第一步中已经定义好的权限级别。
第三:如果对象需要专门的权限,则不用管父级权限,不过最好避免这种方式。
WSS V3中安全对象所用到的命名空间如下:
Miscrosoft.SharePoint.SPRoleAssignment
Miscrosoft.SharePoint.SPRoleAssignmentCollection
Miscrosoft.SharePoint.DefinitionCollection
Miscrosoft.SharePoint.Definition
Miscrosoft.SharePoint.SPBasePermissions
Miscrosoft.SharePoint.SPRoleDefinitionBindingCollection
安全元素的相关编码:
1:权限级别:权限级别是在网站范围内定义的权限命名集。可以使用 WSS 对象模型或通过网站集所有者能够访问的WSS 管理页,创建属于自己的自定义权限级别。在对象模式中的权限级别又称为角色定义。它的集合可以通过SPWeb对象的SPRoleDefinitionCollection来进行访问,第一个权限级别又存在于SPRoleDefinition对象中。这个对象包含权限级别名称,描述,及权限,权限存放于SPBasePermission对象中。可以使用 SPRoleAssignment 对象为外部用户或组分配权限级别。例如,此处我将内置的 Contribute 权限级别分配给登录名为 beyondsoft.com\jiangmin 的 Windows域用户:
//取得权限级别为Contribute的权限级别
SPRoleDefinition role = site.RoleDefinitions["Contribute"];
SPRoleAssignment roleAssignment;
//用户
string sUserID = @"beyondsoft.com\jiangmin";
//邮箱
string sEmail = "jiangmin@beyondsoft.com";
//名称
string sName = "min.jiang";
//批注
string sNote = "相关注释";
roleAssignment = new SPRoleAssignment(sUserID ,sEmail ,sName ,sNote );
roleAssignment.RoleDefinitionBindings.Add(role);
//增加用户
site.RoleAssignments.Add(roleAssignment);
2:用户和组:SPWeb 对象包含两个 SPGroup 对象集合,分别为 Groups 和 SiteGroups。Groups 集合包括当前网站中所有已直接分配权限的组,而 SiteGroups 集合则是 Groups 集合的超集,其中包括所有在当前网站集内创建的组。创建一个新的组,可以调用 SiteGroups 集合的 Add 方法。下面是新建一个名为 newGroup 的组并在当前网站内为其分配内置 Contribute 权限级别的示例。
SPUser currentUser = site.CurrentUser;
//创建一个新的组
//组名
string sGroupName = "newGroup";
//所有者
SPMember owner = currentUser;
//相关描述
string sDesc = "newGroup 创建于 " + DateTime.Now.ToString();
site2.SiteGroups.Add(sGroupName , owner ,currentUser , sDesc );
//分配权限
SPGroup NewGroup = site2.SiteGroups["newGroup"];
SPRoleAssignment roleAssignment2 = new SPRoleAssignment(NewGroup);
SPRoleDefinition permLevel = site.RoleDefinitions["Contribute"];
roleAssignment2.RoleDefinitionBindings.Add(permLevel);
site.RoleAssignments.Add(roleAssignment2);
组创建完毕后,将用户添加为组的成员。SPGroup 对象提供一个 AddUser 方法,该方法接受一个 SPUser 对象。
NewGroup.AddUser(currentUser );
总结:本文分析了WSS v3中的授权管理部分的各组成元素,结构图,安全对象的命名空间以及针对安全元素的相关编码。
注:
本文参考:http://msdn.microsoft.com/zh-cn/magazine/cc163287.aspx
SharePoint Services 3.0开发指南