BreakRoleInheritanceメソッドの不思議
SPWeb myWeb = ***;
SPListItem item = ***;
myWeb.AllowUnsafeUpdates = true;
item.BreakRoleInheritance(false);
としたら「このページのセキュリティの検証は正しくありません」というエラーが発生しました。
BreakRoleInheritanceはアイテムの権限の継承を外すというメソッド。
http://msdn.microsoft.com/ja-jp/library/ms441135(v=office.12).aspx
引数falseで、全ユーザー&グループも全て削除します。
(trueなら継承を外すだけ)
このエラーが発生したあとの権限は、継承が外れただけの状態でした。
継承を外して、ユーザー(グループ)を削除しようかなって時にエラーになったと思われます。
たぶんコレですね。
http://sharepointyuzuki.blog54.fc2.com/blog-entry-9.html
ちなみにシステムアカウントで実行した場合は同じコードを実行してもエラーにはなりません。
システムアカウントに偽装した場合にだけ発生しました。
仕方がないので、継承をはずしてから1個ずつ外す。
SPWeb myWeb = ***;
SPListItem item = ***;
myWeb.AllowUnsafeUpdates = true;
item.BreakRoleInheritance(true);
myWeb.AllowUnsafeUpdates = true;
SPRoleAssignmentCollection roleColl = item.RoleAssignments;
for (int i = roleColl.Count - 1; i >= 0; i--)
{
roleColl.Remove(roleColl[i].Member);
}
…ついでにいつもやってしまうエラー(笑)
foreach (SPRoleAssignment role in item.RoleAssignments)
{
item.RoleAssignments.Remove(role.Member);
}
エラー:Collection was modified; enumeration operation may not execute
追記
色々見てたら見つけた。
なるほど。こうでも良いのか。
while(item.RoleAssignments.Count > 0)
{
item.RoleAssignments.Remove(0);
}
SPListItem item = ***;
myWeb.AllowUnsafeUpdates = true;
item.BreakRoleInheritance(false);
としたら「このページのセキュリティの検証は正しくありません」というエラーが発生しました。
BreakRoleInheritanceはアイテムの権限の継承を外すというメソッド。
http://msdn.microsoft.com/ja-jp/library/ms441135(v=office.12).aspx
引数falseで、全ユーザー&グループも全て削除します。
(trueなら継承を外すだけ)
このエラーが発生したあとの権限は、継承が外れただけの状態でした。
継承を外して、ユーザー(グループ)を削除しようかなって時にエラーになったと思われます。
たぶんコレですね。
http://sharepointyuzuki.blog54.fc2.com/blog-entry-9.html
ちなみにシステムアカウントで実行した場合は同じコードを実行してもエラーにはなりません。
システムアカウントに偽装した場合にだけ発生しました。
仕方がないので、継承をはずしてから1個ずつ外す。
SPWeb myWeb = ***;
SPListItem item = ***;
myWeb.AllowUnsafeUpdates = true;
item.BreakRoleInheritance(true);
myWeb.AllowUnsafeUpdates = true;
SPRoleAssignmentCollection roleColl = item.RoleAssignments;
for (int i = roleColl.Count - 1; i >= 0; i--)
{
roleColl.Remove(roleColl[i].Member);
}
…ついでにいつもやってしまうエラー(笑)
foreach (SPRoleAssignment role in item.RoleAssignments)
{
item.RoleAssignments.Remove(role.Member);
}
エラー:Collection was modified; enumeration operation may not execute
追記
色々見てたら見つけた。
なるほど。こうでも良いのか。
while(item.RoleAssignments.Count > 0)
{
item.RoleAssignments.Remove(0);
}
スポンサーサイト
● COMMENT FORM ●
トラックバック
http://sharepointyuzuki.blog54.fc2.com/tb.php/29-c389d74f
この記事にトラックバックする(FC2ブログユーザー)