Я пытаюсь манипулировать разрешениями SPListItem для папок в библиотеке документов, но не могу добавить какие-либо новые разрешения, хотя удаление наследования безопасности работает прекрасно.
Я приложил все усилия, чтобы создать уменьшенную версию кода для целей тестирования. Функция GetListItem возвращает SPListItem, с которым мы работаем, на основе URL. item.BreakRoleInheritance(False)
прекрасно работает, и я проверил, правильно ли нарушает наследование и удаляет все разрешения, я также попробовал его с флагом True и проверил, что все исходные разрешения скопированы из родительского.
Приведенный ниже код не выдает никаких исключений, и, насколько я могу судить, работает нормально, пока я не проверю фактические разрешения для папки в моей библиотеке документов и не увижу, что «Зрители» не указаны.
Код:
Dim item As SPListItem = GetListItem(URL)
If item Is Nothing Then
Exit Sub
End If
Dim spGrp = SharePointWeb.SiteGroups("Viewers")
Dim spRole As SPRoleDefinition = SharePointWeb.RoleDefinitions("Read")
Dim roleAssignment As New SPRoleAssignment(spGrp)
roleAssignment.RoleDefinitionBindings.Add(spRole)
SharePointWeb.AllowUnsafeUpdates = True
item.BreakRoleInheritance(False)
item.RoleAssignments.Add(roleAssignment)
item.Update()
SharePointWeb.AllowUnsafeUpdates = False
Я пытался обернуть этот код в вызов SPSecurity.RunWithElevatedPrivileges
, но это не имело никакого значения. Создание моих объектов SPSite / SPWeb обернуто в вызов SPSecurity.RunWithElevatedPrivileges
, и у меня есть другой код, который выполняет / находит / удаляет / обновляет атрибуты в папках / и т. Д. С этим существующим кодом; просто разрешения не хотят работать.
Ссылки:
- http://moldenco.blogspot.com/2007/05/spsecurityrunwithelevatedprivileges-to.html
- Как дать разрешения SPGroup для SPItem?
- http://blogs.msdn.com/b/joelo/archive/2007/10/05/sharepoint-roles-assignments.aspx