2008-11-19 59 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

相關問題