2008-11-19 77 views
6

我想知道我是否缺少某些东西。 下面是我该怎么做: 对于SPFolder,我会更改关联项目的权限(SPFolder.Item)。 所以我想管理SPFolder权限归结为管理SPListItem权限。 对于SPListItem,我将首先使用SPListItem.BreakRoleInheritance()破解角色继承,然后使用RoleAssignments集合在其中添加和删除角色。Sharepoint:如何以编程方式管理SPFolder和SPListItem权限

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

所以问题是 是否有其他方式(除继承外)管理除RoleAssignments集合外的SPListItem权限?

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

@Edit:正如弗洛在他的回答指出存在与设置

folder.ParentWeb.AllowUnsafeUpdates = true; 

并采用BreakRoleInheritance用的论据有问题“假”(即不复制父对象的权限)。

folder.Item.BreakRoleInheritance(false); 

BreakRoleInheritance在允许不安全的更新之后,根本无法在GET请求上工作。推测该方法将AllowUnsafeUpdates重置为“假”。

一个解决办法,我知道这是你后手动删除继承的权限BreakRoleInheritance(真),像这样:

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

谢谢!

回答

3

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

3

当使用BreakRoleInheritance()方法时,这个post也会互相影响。这是关于使用BreakRoleInheritance(false)时可能遇到的问题。

+0

你是对的:)我有同样的问题,也遇到了这篇文章。 – axk 2008-11-29 19:02:08

相关问题