Sharepoint: программное управление разрешениями SPFolder и SPListItem
Я хочу знать, если я что-то упускаю.
Вот как бы я это сделал.:
Для SPFolder я бы изменил разрешения элемента associtaed (SPFolder.Пункт.)
Поэтому я полагаю, что управление разрешениями SPFolder сводится к управлению разрешениями SPListItem.
Для SPListItem я бы сломал наследование роли с SPListItem.BreakRoleInheritance()
С RoleAssignments
коллекции добавление и удаление ролей там.
интересно, является ли RoleAssignments единственным способом управления разрешениями SPListItem (кроме наследование) и есть ли способ управлять отдельными разрешениями без ролей. Существует также свойство EffectiveBasePermissions, но я не уверен.
таким образом, вопрос существуют ли другие способы (помимо наследования) управления разрешениями SPListItem помимо коллекции RoleAssignments?
@Edit: есть также AllRolesForCurrentUser, но я думаю, вы можете получить ту же информацию из свойства RoleAssignments, так что это только для удобство.
@Edit: как отмечает Фло в своем ответе, существует проблема с настройкой
folder.ParentWeb.AllowUnsafeUpdates = true;
и с помощью BreakRoleInheritance
С аргументом "false" (т. е. без копирования разрешений родительского объекта).
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 ответов
У вас это очень здорово. Я считаю, что RoleAssignments действительно единственный механизм для управления разрешениями напрямую. Вот в должности это показывает быстрый пример того, как это сделать. Я также использовал эти два посты когда я сделал несколько более сложных вещей.
этой в должности также будет интересно при работе с методом BreakRoleInheritance (). Речь идет о проблеме, с которой вы можете столкнуться при использовании BreakRoleInheritance(false).