SharePoint服务器端对象模型 之 访问用户、用户组和权限(Part 2)

(二)权限相关对象安全

一、用户(SPUser)网站

SharePoint中使用SPUser表示用户(和域组),使用SPUserCollection表示用户集合。spa

获取一个用户大体有以下几种方式:对象

(1) 使用SPWeb的CurrentUser属性获取当前用户,即当前上下文中的用户;继承

(2) 使用SPWeb的EnsureUser(string loginName)方法,该方法会根据参数中的登录名判断网站中是否有该用户存在,若是有的话直接返回;若是没有的话,会将用户添加到网站中(可是不分配任何权限),而后再返回这一用户。不过该方法在运行的时候须要有网站集管理员的权限。索引

(3) 使用SPWeb的Users属性(SPUserCollection)获取网站中的用户集合,这个属性获取到的是直接在该网站中分配了权限,以及经过SharePoint用户组分配了该网站权限的那些用户;接口

(4) 使用SPWeb的AllUsers属性(SPUserCollection)获取网站中的用户集合,这个属性除了获取到Users属性中的用户以外,还包含了那些经过AD域组加入到该网站中的那些用户(不过前提条件是这个用户曾经访问过这个网站);ip

(5) 使用SPWeb的SiteUsers属性(SPUserCollection)获取网站集中的用户集合,这个属性除了可以获取到上述用户以外,还包含了那些没有在当前网站中分配过权限,可是在网站集的其余网站中被分配了权限的用户;ci

(6) 使用SPGroup的Users属性(SPUserCollection)获取用户组中包含的用户的集合。文档

在(3)-(6)方法中,都是先获取到SPUserCollection用户集合,以后能够经过以下方法从用户集合中获取某个特定的用户:

(1) Users[idx]:int型索引器,根据下标获取用户,比较少用;

(2) Users[loginName]:string型索引器,根据用户的登录名获取用户,是一种很是经常使用的方法;

(3) 使用集合的GetByID(id)方法,根据用户的ID(网站集惟一的整型ID)获取用户,也是一种比较经常使用的方法;

(4) 使用集合的GetByEmail(email)方法,根据用户的邮箱获取用户。

须要说明的是,用户对象在网站集中是惟一的,这意味着一个用户在一个网站集内拥有相同的ID、显示名称、电子邮件等等;在不一样的网站集中,同一个用户可能拥有不一样的ID、显示名称和电子邮件等信息。可是登录名称则是全局惟一的。

SPUser中的一些经常使用属性以下:

名称

类型

说明

Email

string

用户的电子邮箱

Groups

SPGroupCollection

用户所在的用户组

ID

int

用户的ID(网站集惟一)

IsDomainGroup

bool

是不是AD域组(或角色)

IsSiteAdmin

bool

用户是不是网站集管理员[1]

LoginName

string

用户登录名(全局惟一)

Name

string

用户显示名称(网站集惟一)

Sid

string

安全ID(全局惟一且建立后不可更改)

UserToken

SPUserToken

用户令牌


[1]判断一个用户是不是网站集管理员须要有相应的权限,换句话说,当一个普通用户执行程序的时候,任何一个用户的IsSiteAdmin属性都是false;只有当以管理员的身份执行程序的时候,才能正确判断出哪些用户是网站集管理员,哪些用户不是。

二、用户组(SPGroup)

用户组是一组用户的集合,用户组自己不可嵌套(用户组中不能够包含用户组,可是能够包含AD域组)。在SharePoint中,用户组主要用于将一批用户统一组织起来,便于管理,但其自己并不具备组织结构的性质和功能。SharePoint中使用SPGroup表示用户组,使用SPGroupCollection表示用户组的集合。

获取用户组的方式大体有以下几种:

(1) 使用SPWeb的Groups属性,获取在该网站中设置了权限的用户组集合;

(2) 使用SPWeb的SiteGroups属性,获取定义在整个网站集中的全部用户组集合;

(3) 使用SPUser的Groups属性,获取用户所属的用户组集合。

上述方法都是获取到SPGroupCollection这一用户组集合对象,以后再经过以下方法能够获取某个指定的用户组:

(1) Groups[idx]:int型索引器,使用下标获取,不多使用;

(2) Groups[name]:string型索引器,根据用户组名称获取,最经常使用的方法;

(3) 使用集合的GetByID(id)方法,根据用户组ID(网站集惟一)获取。

与用户相似,用户组也是网站集范围的设置,用户组在网站集中拥有一样的ID和名称。与用户不一样的是,用户组只能在网站集的级别上定义,没法建立只针对于某个网站的用户组(可是能够将这一用户组只在某一个网站上分配权限)。

SPGroup的一些经常使用属性以下:

名称

类型

说明

ContainsCurrentUser

bool

用户组是否包含当前用户

ID

int

用户组ID(网站集惟一)

Name

string

用户组名称

Users

SPUserCollection

用户组中包含的用户

三、权限(SPBasePermission)

权限是指具体的用户行为,好比添加列表条目、删除列表条目、管理列表、查看页面等等。在SharePoint中使用SPBasePermission枚举来表示这些权限。

该枚举使用2进制位的方式表示每一种单独的权限,在表示多个权限组合的时候,能够将其进行按位或操做,例如须要表示“添加列表条目和查看列表条目”的权限,则可使用“SPBasePermission.AddListItems | SPBasePermission.ViewListItems”的方式。

在该枚举中,包含两个特殊的值,即EmptyMask和FullMask分别表示空权限和全部权限,便于用户使用。此外,权限自己是没法被扩展的。

四、权限级别(SPRoleDefinition)

权限级别主要用于描述一组权限的集合,能够将一系列权限定义为一个相似“角色”的对象,例如“读取”权限级别中就包含了查看项目、打开项目、查看版本、查看页面、查看应用等一组权限。在SharePoint中,使用SPRoleDefinition定义权限级别,使用SPRoleDefinitionCollection定义权限级别的集合。

因为权限级别是定义在网站级别,所以在获取权限级别对象的时候,是使用SPWeb的RoleDefinitions属性获取权限级别的集合,以后使用defs[name]的string型索引器,根据权限级别的名称获取某个特定的权限级别。

SPRoleDefinition的一些经常使用属性以下:

名称

类型

说明

BasePermissions

SPBasePermission

权限级别包含的具体权限

Id

int

权限级别的ID

Name

string

权限级别的名称

五、权限分配(SPRoleAssignment)

权限分配是SharePoint权限体系中的核心对象,全部和受权相关的操做大部分都是经过权限分配对象来完成的。在SharePoint中,使用SPRoleAssignment表示权限分配,使用SPRoleAssignmentCollection表示权限分配的集合。

获取权限分配的方式主要是先从分配权限的对象上获取权限分配的集合,经过使用SPWeb、SPList或SPListItem的RoleAssignments属性,获得权限分配的集合,以后通常经过集合的GetAssignmentByPrinciple(SPPrinciple principle)方法,根据用户或用户组获得分配在该对象上的某个特定用户或用户组的权限。这个方法参数的SPPrinciple类型,是SPUser和SPGroup的共有的父类。

正如上一篇的图中所展现的,权限分配包括三大部分,这三部分在SPRoleAssignment的属性中就有所体现:

权限分配的对象:ParentSecurableObject属性(SPSecurableObject类型);

权限分配的用户:Member属性(SPPrinciples类型);

分配的权限级别:RoleDefinitionBindings属性(SPRoleDefinitionBindingCollection类型,用法和SPRoleDefinitionCollection相似)。

而这三个属性,也正是SPRoleAssignment的所有属性。

六、SPSecurableObject类

在SharePoint 2010中,凡是可以被分配权限的对象(包括SPWeb,即网站;SPList,即列表;SPListItem,即列表条目、文档库中的文档和文件夹),都直接或间接继承了SPSecurableObject这个类。所以这个类提供的一些属性和方法在SharePoint受权体系中是很是重要的。这个类主要提供了4个属性和6个方法:

AllRolesForCurrentUser属性:SPRoleDefinitionBindingCollection类型,获取当前用户在该对象上有什么样的权限级别,注意该属性仅供读取使用,修改没有任何效果;

EffectiveBasePermissions属性:SPBasePermission枚举类型,获取当前用户在该对象上有什么样的具体权限,注意该属性是只读的,只能查看,不能修改;

HasUniqueRoleAssignments属性:bool类型,判断该对象是否拥有独有的权限分配(仍是继承了父对象的权限分配);

RoleAssignments属性:SPRoleAssignmentCollection类型,该对象的权限分配集合。

DoesUserHavePermissions方法:以SPBasePermission做为参数,在接口提供的方法中,仅可以判断当前用户是否拥有某些权限(有相应的权限则返回true,没有返回false),不过在SPWeb、SPList和SPListItem中,都提供了该方法的重载,加入了一个SPUser参数,用以判断某个用户在该对象上是否有某些权限;

CheckPermissions方法:与上述方法相似,一样以SPBasePermission做为参数,检测当前用户是否拥有某些权限,不一样之处在于,该方法没有返回值,若是当前用户在该对象上没有所检测的权限时,程序会抛出一个UnauthorizedAccessException类型的异常;

GetUserEffectivePermissions方法:这是在2010中新增的一个方法,该方法以用户登录名(string)为参数,返回SPBasePermissions枚举类型,用于检测某个特定用户在当前对象上所拥有的具体权限。使用这一方法,能够方便地检测用户在某个对象上所拥有的全部权限。

GetUserEffectivePermissionInfo方法:一样是在2010中新增的一个方法,该方法的使用与GetUserEffectivePermissions相似,区别在于返回的是SPPermissionInfo对象。这一对象中包含了用户的具体权限(Permission)以及其权限分配(RoleAssignment),可以更加具体的了解到特定用户在对象上的权限分配状况。

BreakRoleInheritance方法:结束与父对象的权限分配继承,方法提供了一个bool型的参数,若是该参数为true的话,则在结束继承的同时,保留父对象的权限分配;若是为false的话,则只保留当前执行操做的用户的权限分配;在SharePoint 2010中,该方法还提供了另外一种重载,增长一个bool类型的参数clearSubscopes,当指定该参数为true的时候,可让当前对象的全部子对象的权限所有从新继承当前对象,经过使用这一重载,能够方便地进行权限的从新整理。

ResetRoleInheritance方法:从新继承父对象上的权限分配,该方法没有参数。须要特别注意的是,若是对SPWeb使用了该方法,那么若是网站上有独有的权限级别的话,权限级别也会从新继承回父网站的权限级别设置。

相关文章
相关标签/搜索