2016-06-21 48 views
0

如何檢查Sharepoint組是否具有SPListItem中的讀取或寫入權限。如何檢查Sharepoint組是否具有SPListItem中的讀取或寫入權限

我們可以使用此代碼檢查SPUser權限:

SPBasePermissions perms = SPBasePermissions.EditListItems; 
spListItem.DoesUserHavePermissions(spUser, perms); 

但我不能在任何地方我應該怎麼檢查的權限爲一組找到。這就是我要找:

spListItem.DoesUserHavePermissions(spGroup, perms); 

回答

1

當檢查組的權限,你可以直接看SPListItem的RoleAssignments property(這是SPRoleAssignment對象的集合),並看看是否有任何角色分配的Member屬性對應於你想要的組。

與用戶不同,組無法嵌套在Active Directory組和SharePoint組中,因此您不需要比直接角色分配更深入。

最簡單的解決方案是使用SPRoleAssignmentCollection對象的GetAssignmentByPrincipal方法。

bool hasEdit = false; 
SPRoleAssignment ra = spListItem.RoleAssignments.GetAssignmentByPrincipal(spGroup); 
SPRoleDefinitionBindingCollection permissions = ra.RoleDefinitionBindings; 
foreach(SPRoleDefinition level in permissions) 
{ 
    if(level.BasePermissions & SPBasePermissions.EditListItems == SPBasePermissions.EditListItems 
     || level.BasePermissions & SPBasePermissions.FullMask == SPBasePermissions.FullMask) 
    { 
     hasEdit = true; 
     break; 
    } 
} 

注意,在上面的代碼,權限級別的BasePermissions性質比較特定SPBasePermissions enumeration時,我使用的是由Microsoft's Guidelines for FlagsAttribute and Enum推薦的方式:

  • 一個方便的方式測試某個標誌是否設置爲數值是爲了在數值和標誌枚舉常量之間執行按位與操作,該操作將數值中的所有位設置爲零,而不與標誌對應,然後測試結果該操作等於標誌枚舉老化常數。
相關問題