如何使用客户端对象模型检查SharePoint 2010的用户权限?

时间:2010-04-20 14:13:48

标签: sharepoint-2010

以下代码始终返回 false (这是不正确的,因为用户在站点级别具有完全控制权限):

Site site;
BasePermissions permissionMask;
ClientResult<bool> result;

permissionMask = new BasePermissions();
permissionMask.Set(PermissionKind.ManageWeb);
result = site.DoesUserHavePermissions(permissionMask);

return result.Value;

我正在尝试使用新的SharePoint 2010客户端对象模型。当我发现DoesUserHavePermissions方法时,我很激动,但似乎我不确定我是否知道如何使用它。我不知道我是否使用了正确的掩码,或者我是否应该指定我想要检查其权限级别的用户帐户?任何帮助将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:4)

缺少一件重要的事情 - 客户背景。此对象负责通过任何SharePoint客户端对象模型对象实际执行查询。

应将代码修改为以下内容:

ClientContext clientContext;
Site site;
BasePermissions permissionMask;
ClientResult<bool> result;

permissionMask = new BasePermissions();
permissionMask.Set(PermissionKind.ManageWeb);
//if we want to check ManageWeb permission
clientContext = new ClientContext(siteUri);
//siteUri is a method parameter passed as a string
clientContext.Credentials = credential;
//credential is a method parameter passed as a NetworkCredential object
//that is the user for which we are checking the ManageWeb permission
site = clientContext.Web;
result = site.DoesUserHavePermissions(permissionMask);

return result.Value;

如果为用户分配了ManageWeb权限,则返回true,否则返回false。 有关权限枚举的完整列表,请查看此MSDN page

答案 1 :(得分:1)

我以为我会添加一些我正在使用的代码。这几乎是一样的,但没有膨胀。

using (var context = new ClientContext(siteUrl))
{
   context.Load(context.Web);
   context.ExecuteQuery();
   BasePermissions permissionMask;
   ClientResult<bool> hasPermissions;
   permissionMask = new BasePermissions();
   permissionMask.Set(PermissionKind.ManageWeb);
   hasPermissions = context.Web.DoesUserHavePermissions(permissionMask);

}