[英]How to programatically check if a user can access a SharePoint site?
我有一个在保存服务器上作为SharePoint运行的服务。 我可以使用此服务在不同SharePoint网站上的文档库中上载/移动文件。 我现在正在尝试检查用户(DOMAIN \\ USER)是否具有访问特定SharePoint网站的权限。
我尝试使用以下方法:
web.EnsureUser("DOMAIN\USER")
web.CheckPermissions(SPBasePermissions.Open)
如果用户没有权限,以上内容将引发UnauthorizedAccessException。 对我来说,它永远不会引发任何异常,尽管该用户没有访问该特定站点的权限(通过尝试访问用户计算机上的站点进行验证-未经授权401)
web.DoesUserHavePermissions("DOMAIN\\USER", SPBasePermissions.Open)
上面的应该返回True或False,但对我来说,它总是返回False,同样,当用户有权访问站点时(通过访问用户计算机上的站点进行验证-确定200)。
web.GetUserEffectivePermissions("DOMAIN\\USER")
上面应该返回权限掩码,但始终返回EmptyMask。
我认为我不理解这些方法,但是在Internet上的任何地方都没有很好地描述它们。
有谁知道我如何检查用户是否具有访问SharePoint网站所需的权限?
我和你有同样的问题。 我正在以“ domain \\ username”格式传递用户名,但它会将所有权限返回为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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.