Sep 08 2020 07:10 AM
I am working on a remote event receiver for our SharePoint online site,and i am running the remote event receiver under the current user permission using ClientContext context = TokenHelper.CreateRemoteEventReceiverClientContext(properties) as follow:-
public void ProcessOneWayEvent(SPRemoteEventProperties properties)
{
if (properties.EventType.ToString().ToLower() == "itemadded")
{
var prop = properties;
var listItemID = properties.ItemEventProperties.ListItemId;
var listTitle = properties.ItemEventProperties.ListTitle;
using (ClientContext context = TokenHelper.CreateRemoteEventReceiverClientContext(properties))
{
Now inside my code, and i am setting a unique permission for the created list item, and since contributor users do not have permission to set list item to have unique permission, so i am trying to run this peace of code using the application context (GetAppOnlyContext ), now i try this :-
public void ProcessOneWayEvent(SPRemoteEventProperties properties)
{
if (properties.EventType.ToString().ToLower() == "itemadded")
{
var prop = properties;
var listItemID = properties.ItemEventProperties.ListItemId;
var listTitle = properties.ItemEventProperties.ListTitle;
using (ClientContext context = TokenHelper.CreateRemoteEventReceiverClientContext(properties))
{
//code goes here
using (ClientContext context2 = Helpers.GetAppOnlyContext(properties.ItemEventProperties.WebUrl))
{
FieldUserValue creator2 = listItem["Author"] as FieldUserValue;
listItem2.BreakRoleInheritance(false, false);
listItem2.RoleAssignments.Add(context.Web.EnsureUser(creator2.LookupValue), new RoleDefinitionBindingCollection(context) { contributeDef });
listItem2.RoleAssignments.Add(context.Site.RootWeb.SiteGroups.GetByName("Risk Users"), new RoleDefinitionBindingCollection(context) { readerDef });
listItem2.RoleAssignments.Add(context.Site.RootWeb.SiteGroups.GetByName("Risk Admins"), new RoleDefinitionBindingCollection(context) { contributeDef });
listItem2.Update();
context2.ExecuteQuery();
}
}
but i am getting this error:-
Access denied. You do not have permission to perform this action or access this resource.
any advice on how i can run certain peace of code under the app context while the other code using the current user context? in other words to have 2 contexts inside my remote event receiver; CreateRemoteEventReceiverClientContext and inside it to have a context which runs under GetAppOnlyContext