SharePoint 自定义权限级别

转自:微点阅读  https://www.weidianyuedu.com

自定义现有权限级别

在“网站设置”页上的“用户和权限”下,单击“高级权限”。

在工具栏上,单击“设置”,然后单击“权限级别”。

在权限级别列表中,单击您要自定义的权限级别的名称。

在权限列表中,选中或清除相应的复选框以向权限级别中添加权限或者从中删除权限。

单击“提交”。

MOSS中的权限结构主要有三部分:网站权限,列表权限,个人权限。

网站权限由18种如下图:

列表权限由12种,如下图:

个人权限由三种,如下图:

2.权限级别

上面提供的就是基本的权限,不同的权限组成MOSS中的权限级别。MOSS本身为我们提供了一些权限级别,我们也可以根据自己的需求来自定义。

我们在自定义自己的权限级别的时候可以参考Moss本身的,在他的基础上进行修改,我们编辑现有的网站级别,里面提供了一个复制权限级别的功能,

我们可以复制一份在这个基础进行修改来定义我们自己的权限级别。

3.下图展示了MOSS权限,用户和权限对象之间的关系:

4.使用SharePoint对象模型控制权限

主要使用下面几个类:

SPUser,SPGroup,SPRoleDefinition,SPRoleAssignment。

SPRoleDefinition用于角色(即前面所说的“权限级别”)的定义

它的几个重要的属性有:

Name:角色名称

Description:角色描述

BasePermissions:角色的权限(就是在这个地方指定详细的权限)

另外,Type属性是SPRoleType枚举类型的,关于权限的枚举是SPBasePermissions

SPRoleAssignment用于权限的分配,它比较简单,只有三个public的属性:

Member:把权限分配给谁

Parent:在什么东西上分配权限

RoleDefinitionBindings:分配什么权限

Member是SPPrincipal类型的是SPUser和SPGroup的父类

Parent:实现了ISecurityxxxx接口

RoleDefinitionBindings:可以理解为SPRoleDefinition的一个集合

在2007里面每一个能分配权限的东西(SPWeb、SPList、SPListItem等)都会有一个RoleAssignments属性,它是一个SPRoleAssignmentCollection类型的属性,

用于分配权限

此外,在SPWeb里还有RoleDefinitions属性(只在SPWeb里有,也就是说角色只能定义在网站里)

举例如下:

我们要给一个用户(user)分配一个在列表(list)上的权限,权限使用了一个名叫“xxx”的角色

代码如下:

SPRoleAssignment ra = new SPRoleAssignment(user);

SPRoleDefinition rd = web.RoleDefinitions["xxx"];

ra.RoldDefinitionBindings.Add(rd);

list.RoleAssignments.Add(ra);

又比如,修改一个用户的权限:

SPRoleAssignment ra = list.RoleAssignments.GetAssignmentByPrincipal(user);

SPRoleDefinition rd = web.RoleDefinitions["xxx"];

ra.RoldDefinitionBindings.Add(rd);

ra.Update();但是,如果这个列表的权限之前是继承自网站的,

那么上面的代码并不会自动的修改这种继承,反而会抛出异常

我们必须手工解除这种继承关系:

list.BreakRoleInheritance(true);

参数中true的意思是把继承下来的权限重新copy过来(如果你不改它的话,它和网站的权限还是一样的),如果是false,则使用列表模版中定义的默认权限

如果要新建一个角色的话,直接new一个SPRoleDefinition,改改它的Name、Description、BasePermissions属性,然后再加到web.RoleDefinitions里就可以了;

或者在new的时候可以选择一个现有的角色copy过来,再改一改。这个代码我就不写了

此外,在权限方面还有一些其他的小改动:

在2003里,使用xxx.Permissions得到xxx(可以是SPWeb、SPList)的权限,但是在2007里Permissions属性也被废弃了

我们记得Permissions有一个非常有用的东西叫DoesUserHavePermissions来判断当前用户权限的,

在Permissions属性被废弃掉之后,这个方法移植到了SPWeb、SPList等类里

直接使用list.DoesUserHavePermissions就ok了

而且,现在这个方法不仅可以判断当前用户的权限,也可以判断指定用户的权限(通过SPUser)

另外,SPWeb、SPList及SPListItem也加入了CheckPermissions方法来判断用户权限,如果没有则丢一个异常出来,这和以前的xxx.Permissions.Demand方法是一致的

5.角色定义,分配,继承

角色由两部分组成:角色定义和角色分配。

角色定义,或者说权限级别,是与角色关联的权限列表。权限是 SharePoint 网站中唯一可控制的操作。例如,具有 Read 角色的用户可以浏览网站中的页面并查看列表中的项目。与 Windows SharePoint Services 2.0 中不同,在 Windows SharePoint Services 3.0 中,从不直接使用权限来管理用户权限。所有用户权限和组权限都通过角色来管理。角色定义是与特定对象绑定的权限集合。角色定义界定于网站范围内(例如,Full Control、Read、Contribute、Design 或 Limited Access),并且在网站内的各个位置具有相同的意义,但其在同一个网站集内各网站之间的可能有所不同。角色定义也可以从父网站继承,就像权限一样。

角色分配是角色定义、用户和组以及范围之间的关系(例如,一个用户可能是列表 1 上的读者,而另一个用户是列表 2 上的读者)。通过角色分配表示的关系是使 Windows SharePoint Services 安全管理基于角色的关键。所有权限都通过角色来管理;您从不向用户直接分配权限,而只分配定义完善、一致、含义丰富的权限集合(角色定义)。通过角色分配向角色定义中添加或从中移除用户和组,以此来管理独有权限。

网站管理员可以使用“管理角色”页来自定义默认角色定义和创建其他自定义角色,其中,“管理角色”页列出了网站中可用的角色定义。

角色定义继承

Windows SharePoint Services 支持继承角色定义,就像它支持继承权限那样,而取消角色定义继承也要求取消权限继承。

每个 SharePoint 对象都可以拥有自己的权限集,也可以从其父容器继承权限。Windows SharePoint Services 不支持部分继承,对象将继承其父级的所有权限,并且也可以拥有一些自己的权限。权限可以是独有的,也可以是继承的。Windows SharePoint Services 不支持定向继承。例如,对象只能从其父容器继承,而不能从某些其他对象或容器继承。

当网站继承角色定义时,这些角色是只读的,就像继承的网站中的只读权限一样。用户将获得导航到拥有独有角色定义的父网站的链接。所有新网站(包括拥有独有权限的新网站)的默认设置都是从父网站继承角色定义。如果是独有权限,则角色定义可以还原为继承的角色定义,或编辑为本地角色定义。

根据下列禁止规则,网站中的角色定义继承对权限继承产生影响:

· 不能继承权限,除非它还继承角色定义。

· 不能创建独有角色定义,除非它还创建独有权限。

· 不能还原为继承的角色定义,除非它也还原网站中的所有独有权限。现有权限依赖角色定义。

· 不能还原为继承的权限,除非它也还原为继承的角色定义。网站的权限始终与网站的角色定义关联。

众所周知,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域用户:

SPWeb site = SPContext.Current.Web;

//取得权限级别为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 权限级别的示例。

SPWeb site2 = SPContext.Current.Web;

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中的授权管理部分的各组成元素,结构图,安全对象的命名空间以及针对安全元素的相关编码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值