6

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

我想知道 RoleAssignments 是否是管理 SPListItem 权限(除了继承)的唯一方法,是否有办法在没有角色的情况下管理个人权限。还有 EffectiveBasePermissions 属性,但我不确定。

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

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

@Edit:正如弗洛在他的回答中指出的那样,设置有问题

folder.ParentWeb.AllowUnsafeUpdates = true;

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

folder.Item.BreakRoleInheritance(false);

BreakRoleInheritance在允许不安全的更新后,根本不会像您期望的那样处理 GET 请求。大概该方法重置AllowUnsafeUpdates回“假”。

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

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

谢谢!

4

2 回答 2

3

你说得很对。我相信 RoleAssignments 确实是直接管理权限的唯一机制。这是一篇文章,展示了如何做到这一点的快速示例。当我做一些更复杂的事情时,我也使用了这两个 帖子。

于 2008-11-19T17:06:48.890 回答
3

当使用 BreakRoleInheritance() 方法时,这篇文章也会很有趣。这是关于您在使用 BreakRoleInheritance(false) 时可能遇到的问题。

于 2008-11-27T11:03:20.807 回答