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

时间:2015-04-15 15:32:57

标签: .net vb.net sharepoint sharepoint-2013

我有一个作为SharePoint在保存服务器上运行的服务。我可以使用此服务上传/移动不同SharePoint网站上的文档库中的文件。我现在正在尝试检查用户(DOMAIN \ 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网站所需的权限?

1 个答案:

答案 0 :(得分:2)

我和你的问题一样。我以“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