In this article we will be seeing how to resolve "UnauthorizedAccessException was unhandled by user code" in SharePoint event receiver. I had one custom list "MyList" which contains two columns "Title" and "Service Account".
I had one group with Full control "Service Team". In the "Service Account" column I need to add all the users from the "Service Team" group. I have written ItemAdded event receiver for adding the users from the "Service Team" group to the "Service Account" column. public override void ItemAdded(SPItemEventProperties properties) { base.ItemAdded(properties); SPSecurity.RunWithElevatedPrivileges(delegate() { SPWeb web = properties.Web; SPListItem item = properties.ListItem; SPGroup group = web.Groups["Service Team"]; web.AllowUnsafeUpdates = true; SPFieldUserValueCollection UserCollection = new SPFieldUserValueCollection(); foreach (SPUser user in group.Users) { SPFieldUserValue UserName = new SPFieldUserValue(web, user.ID, user.LoginName); UserCollection.Add(UserName); } item["Service Account"] = UserCollection; item.Update(); }); } When the user with contribute access tried to add the column, users from the "Service Team" were not added to the column and I was getting the following error when I was debugging. Even though I was using SPSecurity.RunWithElevatedPrivileges I was getting the error. That is because "when using SPSecurity.RunWithElevatedPrivileges, we need to open an elevated site context through a new SPSite object in order to really be elevated". Then I tried with the following code which added users to the columns successfully. public override void ItemAdded(SPItemEventProperties properties) { base.ItemAdded(properties); SPSecurity.RunWithElevatedPrivileges(delegate() { using(SPSite site=new SPSite (properties.SiteId)) { using (SPWeb web = site.RootWeb) { SPListItem item = properties.ListItem; SPGroup group = web.Groups["Service Team"]; web.AllowUnsafeUpdates = true; SPFieldUserValueCollection UserCollection = new SPFieldUserValueCollection(); foreach (SPUser user in group.Users) { SPFieldUserValue UserName = new SPFieldUserValue(web, user.ID, user.LoginName); UserCollection.Add(UserName); } item["Service Account"] = UserCollection; item.Update(); } } }); }
You need to be a premium member to use this feature. To access it, you'll have to upgrade your membership.
Become a sharper developer and jumpstart your career.
$0
$
. 00
monthly
For Basic members:
$20
For Premium members:
$45
For Elite members: