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