繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM