簡體   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