Sharepoint:如何以编程方式管理SPFolder和SPListItem权限

时间:2008-11-19 15:34:22

标签: security sharepoint permissions

我想知道我是否遗漏了什么。 我是这样做的: 对于SPFolder,我会更改关联项目的权限(SPFolder.Item)。 所以我认为管理SPFolder权限归结为管理SPListItem权限。 对于SPListItem,我会使用SPListItem.BreakRoleInheritance()破坏角色继承,然后使用RoleAssignments个集合添加和删除角色。

我想知道RoleAssignments是否是管理SPListItem权限(除了继承)的唯一方法,并且有一种方法可以管理没有角色的个人权限。 还有EffectiveBasePermissions属性,但我不确定。

所以问题是 除了RoleAssignments集合之外还有其他方法(除了继承)来管理SPListItem权限吗?

@Edit:还有AllRolesForCurrentUser,但我猜你可以从RoleAssignments属性获得相同的信息,所以这个只是为了方便。

@Edit:正如Flo在回答中指出的那样设置

folder.ParentWeb.AllowUnsafeUpdates = true;

使用带有'false'参数的BreakRoleInheritance(即没有复制父对象的权限)。

folder.Item.BreakRoleInheritance(false);

BreakRoleInheritance根本不会对GET请求起作用,因为您在允许不安全更新后会发现这种情况。据推测,该方法会将AllowUnsafeUpdates重置为“false”。

我知道的一个解决方法是在BreakRoleInheritance(true)之后手动删除继承的权限,如下所示:

folder.Item.BreakRoleInheritance(false);
while(folder.Item.RoleAssignments.Count > 0) {
    folder.Item.RoleAssignments.Remove(0);
}

谢谢!

2 个答案:

答案 0 :(得分:3)

你非常正确。我相信RoleAssignments确实是直接管理权限的唯一机制。这是一个post,它显示了如何执行此操作的快速示例。当我做了一些更复杂的事情时,我也使用了这些two posts

答案 1 :(得分:3)

使用BreakRoleInheritance()方法时,此post会很有趣。这是关于使用BreakRoleInheritance(false)时可能遇到的问题。