我有一个作为SharePoint运行在保存服务器上的服务。我可以使用这个服务在不同的SharePoint站点上上传/移动文档库中的文件。我现在试图检查用户(域\ user )是否拥有访问特定SharePoint站点的权限。
我曾尝试使用以下方法:
web.EnsureUser("DOMAIN\USER")
web.CheckPermissions(SPBasePermissions.Open)
如果用户没有权限,上述内容将引发UnauthorizedAccessException。对我来说,它从不引发任何异常,尽管该用户没有访问这个特定站点的权限(通过尝试访问用户机器上的站点来验证-未经授权的401)
web.DoesUserHavePermissions("DOMAIN\USER", SPBasePermissions.Open)
上面应该返回True或False,但是对于我来说,它总是返回False,也是当用户有访问站点的权限时(通过访问用户机器上的站点来验证- OK 200)。
web.GetUserEffectivePermissions("DOMAIN\USER")
上面的内容应该返回权限掩码,但它总是返回一个EmptyMask。
我想我不明白这些方法,但它们在互联网上的任何地方都没有很好的描述。
有人知道我如何检查用户是否拥有访问SharePoint站点所需的权限吗?
发布于 2015-12-15 01:24:58
我和你有同样的问题。我以“域\用户名”的格式传递用户名,但它将所有权限返回为false。最后,我意识到我在为SharePoint使用基于声明的身份验证。我将用户名改为声明格式"i:0#.w|domain\username“,从那以后,它就开始完美地工作了。希望这能有所帮助。
这是一个工作代码样本-
var spContext = SharePointContextProvider.Current.GetSharePointContext(Context);
using (var clientContext = spContext.CreateUserClientContextForSPHost())
{
string userName = @"i:0#.w|domain\username";
var userPermissions = clientContext.Web.GetUserEffectivePermissions(userName);
clientContext.ExecuteQuery();
foreach (var permission in Enum.GetValues(typeof(PermissionKind)).Cast<PermissionKind>())
{
var permissionName = Enum.GetName(typeof(PermissionKind), permission);
var hasPermission = userPermissions.Value.Has(permission);
Response.Write(String.Format("<br>Permission: {0}, HasPermission: {1}", permissionName, hasPermission));
}
}
源- http://tech-turf.blogspot.in/2015/12/sharepoint-2013-getusereffectivepermiss.html
https://stackoverflow.com/questions/29654483
复制