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

3
以下代码始终返回 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个回答

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页面


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);

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接