如何以编程方式检查用户是否可以访问 SharePoint 站点?

How to programatically check if a user can access a SharePoint site?

我有一个作为 SharePoint 在保存服务器上运行的服务。我可以使用此服务来 upload/move 不同 SharePoint 网站上文档库中的文件。我现在正在尝试检查用户 (DOMAIN\USER) 是否有权访问特定的 SharePoint 网站。

我试过使用以下方法:

web.EnsureUser("DOMAIN\USER")
web.CheckPermissions(SPBasePermissions.Open)

如果用户没有权限,上面应该引发 UnauthorizedAccessException。对我来说,它永远不会引发任何异常,尽管该用户没有访问该特定站点的权限(通过尝试访问用户计算机上的站点进行验证 - 未授权 401)

web.DoesUserHavePermissions("DOMAIN\USER", SPBasePermissions.Open)

以上应该 return 正确或错误,但对我来说它总是 return 错误,当用户有权访问网站时也是如此(通过访问用户机器上的网站来验证- 好的 200).

web.GetUserEffectivePermissions("DOMAIN\USER")

上面应该 return 权限掩码,但它总是 return 一个 EmptyMask。

我想我不明白那些方法,但是在互联网上的任何地方都没有很好地描述它们。

有谁知道如何检查用户是否具有访问 SharePoint 网站所需的权限?

我遇到了和你一样的问题。我以 "domain\username" 格式传递用户名,但它返回的所有权限都是错误的。最后我意识到我正在为 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