Пользователям нужно как минимум Управление разрешениями правами на объект для чтения и изменения SPSecurableObject.RoleAssignments
.
Чтобы выполнить код с привилегиями системной учетной записи (с повышенными правами) для объекта SharePoint, необходимо «повторно открыть данный объект»:
SPListItem item = // the item from the event receiver
// Re-open the item with the system account
using (SPSite adminSite = new SPSite(item.Web.Url, SPUserToken.SystemAccount))
{
using (SPWeb adminWeb = adminSite.OpenWeb())
{
SPListItem adminItem = adminWeb
.Lists[item.ParentList.ID]
.GetItemByUniqueId(i.UniqueId);
// execute your code with the system account on the item.
// adminItem.RoleAssignments.WhatEver
}
}
Обратите внимание на использование SPUserToken.SystemAccount
. Это делает хак «System Account Token», требуемый в SharePoint 2007, устаревшим.
Для действий над объектами SharePoint SPSecurity.RunWithElevatedPrivileges
или WindowsIdentity.Impersonate(System.IntPtr.Zero)
- это , а не .
Я написал сообщение в блоге, посвященное этой теме: Как открыть SPSite с помощью системной учетной записи в SharePoint 2010 .