Use GetAppOnlyContext inside CreateRemoteEventReceiverClientContext inside my remote event receiver

%3CLINGO-SUB%20id%3D%22lingo-sub-1644479%22%20slang%3D%22en-US%22%3EUse%20GetAppOnlyContext%20inside%20CreateRemoteEventReceiverClientContext%20inside%20my%20remote%20event%20receiver%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-1644479%22%20slang%3D%22en-US%22%3E%3CP%3EI%20am%20working%20on%20a%20remote%20event%20receiver%20for%20our%20SharePoint%20online%20site%2Cand%20i%20am%20running%20the%20remote%20event%20receiver%20under%20the%20current%20user%20permission%20using%20ClientContext%20context%20%3D%20TokenHelper.CreateRemoteEventReceiverClientContext(properties)%20as%20follow%3A-%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-applescript%22%3E%3CCODE%3Epublic%20void%20ProcessOneWayEvent(SPRemoteEventProperties%20properties)%0A%20%20%20%20%20%20%20%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(properties.EventType.ToString().ToLower()%20%3D%3D%20%22itemadded%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20prop%20%3D%20properties%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20listItemID%20%3D%20properties.ItemEventProperties.ListItemId%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20listTitle%20%3D%20properties.ItemEventProperties.ListTitle%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20using%20(ClientContext%20context%20%3D%20TokenHelper.CreateRemoteEventReceiverClientContext(properties))%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3ENow%20inside%20my%20code%2C%20and%20i%20am%20setting%20a%20unique%20permission%20for%20the%20created%20list%20item%2C%20and%20since%20contributor%20users%20do%20not%20have%20permission%20to%20set%20list%20item%20to%20have%20unique%20permission%2C%20so%20i%20am%20trying%20to%20run%20this%20peace%20of%20code%20using%20the%20application%20context%20(GetAppOnlyContext%20)%2C%20now%20i%20try%20this%20%3A-%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-applescript%22%3E%3CCODE%3Epublic%20void%20ProcessOneWayEvent(SPRemoteEventProperties%20properties)%0A%20%20%20%20%20%20%20%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(properties.EventType.ToString().ToLower()%20%3D%3D%20%22itemadded%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20prop%20%3D%20properties%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20listItemID%20%3D%20properties.ItemEventProperties.ListItemId%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20listTitle%20%3D%20properties.ItemEventProperties.ListTitle%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20using%20(ClientContext%20context%20%3D%20TokenHelper.CreateRemoteEventReceiverClientContext(properties))%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%2F%2Fcode%20goes%20here%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20using%20(ClientContext%20context2%20%3D%20Helpers.GetAppOnlyContext(properties.ItemEventProperties.WebUrl))%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20FieldUserValue%20creator2%20%3D%20listItem%5B%22Author%22%5D%20as%20FieldUserValue%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20listItem2.BreakRoleInheritance(false%2C%20false)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20listItem2.RoleAssignments.Add(context.Web.EnsureUser(creator2.LookupValue)%2C%20new%20RoleDefinitionBindingCollection(context)%20%7B%20contributeDef%20%7D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20listItem2.RoleAssignments.Add(context.Site.RootWeb.SiteGroups.GetByName(%22Risk%20Users%22)%2C%20new%20RoleDefinitionBindingCollection(context)%20%7B%20readerDef%20%7D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20listItem2.RoleAssignments.Add(context.Site.RootWeb.SiteGroups.GetByName(%22Risk%20Admins%22)%2C%20new%20RoleDefinitionBindingCollection(context)%20%7B%20contributeDef%20%7D)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20listItem2.Update()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20context2.ExecuteQuery()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3C%2FCODE%3E%3C%2FPRE%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CP%3Ebut%20i%20am%20getting%20this%20error%3A-%3C%2FP%3E%3CP%3E%26nbsp%3B%3C%2FP%3E%3CBLOCKQUOTE%3E%3CP%3EAccess%20denied.%20You%20do%20not%20have%20permission%20to%20perform%20this%20action%20or%20access%20this%20resource.%3C%2FP%3E%3C%2FBLOCKQUOTE%3E%3CP%3Eany%20advice%20on%20how%20i%20can%20run%20certain%20peace%20of%20code%20under%20the%20app%20context%20while%20the%20other%20code%20using%20the%20current%20user%20context%3F%20in%20other%20words%20to%20have%202%20contexts%20inside%20my%20remote%20event%20receiver%3B%20CreateRemoteEventReceiverClientContext%20and%20inside%20it%20to%20have%20a%20context%20which%20runs%20under%20GetAppOnlyContext%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-1644479%22%20slang%3D%22en-US%22%3E%3CLINGO-LABEL%3EDeveloper%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E
Valued Contributor

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

0 Replies