如何检查共享点组是否在SPListItem中具有读或写权限。
我们可以使用以下代码检查SPUser权限:
SPBasePermissions perms = SPBasePermissions.EditListItems;
spListItem.DoesUserHavePermissions(spUser, perms);
但我无法在任何地方找到我应该如何检查群组的权限。这就是我要找的东西:
spListItem.DoesUserHavePermissions(spGroup, perms);
答案 0 :(得分:1)
在检查组的权限时,您可以直接查看SPListItem的RoleAssignments
property(SPRoleAssignment
个对象的集合),看看是否有任何角色分配' { {1}}属性对应于您想要的组。
与用户不同,组可以嵌套在Active Directory组和SharePoint组中,因此您不需要查看比直接角色分配更深的内容。
最简单的解决方案是使用Member
对象的GetAssignmentByPrincipal
方法。
SPRoleAssignmentCollection
请注意,在上面的代码中,在将权限级别的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;
}
}
属性与特定SPBasePermissions
enumeration进行比较时,我使用了Microsoft's Guidelines for FlagsAttribute and Enum建议的方法:
- 测试是否在数值中设置标志的一种简便方法是在数值和标志枚举常量之间执行按位AND运算,该常量将数值中的所有位设置为零,这与不对应于标志,然后测试该操作的结果是否等于标志枚举常量。