public async Task <Guid?> RemoveUserFromRecordAccessTeamAsync(Guid idTeamTemplate, EntityReference record, Guid idUser) { var teamId = await this.FindRecordAccessTeamIdAsync(record.Id, idTeamTemplate); if (!teamId.HasValue) { return(null); } if (!await IsUserTeamMemberAsync(idUser, teamId.Value)) { return(null); } var request = new RemoveUserFromRecordTeamRequest() { TeamTemplateId = idTeamTemplate, Record = record, SystemUserId = idUser, }; var response = await _service.ExecuteAsync <RemoveUserFromRecordTeamResponse>(request); StoreRecordAccessGroupCacheValue(idTeamTemplate, record.Id, response.AccessTeamId); return(response.AccessTeamId); }
public static RemoveUserFromRecordTeamResponse RemoveUserFromAccessTeam(this IOrganizationService service, EntityReference record, Guid userId, Guid teamTemplateId, ITracingService trace = null) { RemoveUserFromRecordTeamRequest teamAddRequest = new RemoveUserFromRecordTeamRequest(); teamAddRequest.Record = record; teamAddRequest.SystemUserId = userId; teamAddRequest.TeamTemplateId = teamTemplateId; return((RemoveUserFromRecordTeamResponse)service.Execute(teamAddRequest)); }
public static RemoveUserFromRecordTeamResponse RemoveUserFromRecordTeam(this IOrganizationService service, EntityReference record, Guid userid, Guid templateid) { var removeUserFromRecordTeamRequest = new RemoveUserFromRecordTeamRequest { Record = record, SystemUserId = userid, TeamTemplateId = templateid }; return((RemoveUserFromRecordTeamResponse)service.Execute(removeUserFromRecordTeamRequest)); }
private void RemoveUserFromAccessTeam(string accessTeamName, EntityReference record, Guid userId, IOrganizationService service) { var req = new RemoveUserFromRecordTeamRequest(); req.Record = record; req.SystemUserId = userId; var q = new QueryExpression("teamtemplate"); q.Criteria.AddCondition("teamtemplatename", ConditionOperator.Equal, accessTeamName); var tt = orgAdminService.RetrieveMultiple(q); req.TeamTemplateId = tt.Entities.First().Id; service.Execute(req); }
public void RemoveUserFromAccessTeam(Guid userId, EntityReference recordEntityReference, string teamTemplateName) { Guid templateTeamid = Guid.Empty; using (OrganizationServiceContext context = new OrganizationServiceContext(ServiceProxy)) { templateTeamid = (Guid)(context.CreateQuery("teamtemplate").Single(tt => (string)tt["teamtemplatename"] == teamTemplateName)["teamtemplateid"]); } RemoveUserFromRecordTeamRequest removeUserFromRecordTeamRequest = new RemoveUserFromRecordTeamRequest() { SystemUserId = userId, Record = recordEntityReference, TeamTemplateId = templateTeamid }; ServiceProxy.Execute(removeUserFromRecordTeamRequest); }
/// <summary> /// Executes the workflow activity. /// </summary> /// <param name="executionContext">The execution context.</param> protected override void Execute(CodeActivityContext executionContext) { // Create the tracing service ITracingService tracingService = executionContext.GetExtension <ITracingService>(); if (tracingService == null) { throw new InvalidPluginExecutionException("Failed to retrieve tracing service."); } tracingService.Trace("Entered " + _processName + ".Execute(), Activity Instance Id: {0}, Workflow Instance Id: {1}", executionContext.ActivityInstanceId, executionContext.WorkflowInstanceId); // Create the context IWorkflowContext context = executionContext.GetExtension <IWorkflowContext>(); if (context == null) { throw new InvalidPluginExecutionException("Failed to retrieve workflow context."); } tracingService.Trace(_processName + ".Execute(), Correlation Id: {0}, Initiating User: {1}", context.CorrelationId, context.InitiatingUserId); IOrganizationServiceFactory serviceFactory = executionContext.GetExtension <IOrganizationServiceFactory>(); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); try { Guid connectionId = Connection.Get(executionContext).Id; Entity connection = service.Retrieve("connection", connectionId, new ColumnSet("record1id", "record2id")); EntityReference connectedFromId = (EntityReference)connection["record1id"]; EntityReference connectedToId = (EntityReference)connection["record2id"]; //only run this if the connection is to a user record if (connectedToId.LogicalName.ToUpper() == "SYSTEMUSER") { Guid teamTemplateId; string teamTemplateName = TeamTemplateName.Get(executionContext); //look up team template by name QueryByAttribute querybyexpression = new QueryByAttribute("teamtemplate"); querybyexpression.ColumnSet = new ColumnSet("teamtemplatename", "teamtemplateid"); querybyexpression.Attributes.AddRange("teamtemplatename"); querybyexpression.Values.AddRange(teamTemplateName); EntityCollection retrieved = service.RetrieveMultiple(querybyexpression); //if we find something, we're set if (retrieved.Entities.Count > 0) { teamTemplateId = retrieved.Entities[0].Id; } else { //throw exception if unable to find a matching template throw new Exception("could not find team template named: " + teamTemplateName); } RemoveUserFromRecordTeamRequest teamRemoveRequest = new RemoveUserFromRecordTeamRequest(); teamRemoveRequest.Record = connectedFromId; teamRemoveRequest.SystemUserId = connectedToId.Id; teamRemoveRequest.TeamTemplateId = teamTemplateId; RemoveUserFromRecordTeamResponse response = (RemoveUserFromRecordTeamResponse)service.Execute(teamRemoveRequest); } } catch (FaultException <OrganizationServiceFault> e) { tracingService.Trace("Exception: {0}", e.ToString()); // Handle the exception. throw; } catch (Exception e) { tracingService.Trace("Exception: {0}", e.ToString()); throw; } tracingService.Trace("Exiting " + _processName + ".Execute(), Correlation Id: {0}", context.CorrelationId); }
public OrganizationResponse Execute(OrganizationRequest request, XrmFakedContext ctx) { RemoveUserFromRecordTeamRequest remReq = (RemoveUserFromRecordTeamRequest)request; EntityReference target = remReq.Record; Guid systemuserId = remReq.SystemUserId; Guid teamTemplateId = remReq.TeamTemplateId; if (target == null) { throw new FaultException <OrganizationServiceFault>(new OrganizationServiceFault(), "Can not remove from team without target"); } if (systemuserId == Guid.Empty) { throw new FaultException <OrganizationServiceFault>(new OrganizationServiceFault(), "Can not remove from team without user"); } if (teamTemplateId == Guid.Empty) { throw new FaultException <OrganizationServiceFault>(new OrganizationServiceFault(), "Can not remove from team without team"); } Entity teamTemplate = ctx.CreateQuery("teamtemplate").FirstOrDefault(p => p.Id == teamTemplateId); if (teamTemplate == null) { throw new FaultException <OrganizationServiceFault>(new OrganizationServiceFault(), "Team template with id=" + teamTemplateId + " does not exist"); } Entity user = ctx.CreateQuery("systemuser").FirstOrDefault(p => p.Id == systemuserId); if (user == null) { throw new FaultException <OrganizationServiceFault>(new OrganizationServiceFault(), "User with id=" + teamTemplateId + " does not exist"); } IOrganizationService service = ctx.GetOrganizationService(); ctx.AccessRightsRepository.RevokeAccessTo(target, user.ToEntityReference()); Entity team = ctx.CreateQuery("team").FirstOrDefault(p => ((EntityReference)p["teamtemplateid"]).Id == teamTemplateId); if (team == null) { return(new RemoveUserFromRecordTeamResponse { ResponseName = "RemoveUserFromRecordTeam" }); } Entity tm = ctx.CreateQuery("teammembership").FirstOrDefault(p => (Guid)p["teamid"] == team.Id); if (tm != null) { service.Delete(tm.LogicalName, tm.Id); } return(new RemoveUserFromRecordTeamResponse { ResponseName = "RemoveUserFromRecordTeam" }); }
public void SimpleUpdateTest() { var contact = new Contact() { FirstName = "test 1" }; contact.Id = testUser1Service.Create(contact); var contact2 = new Contact() { FirstName = "test 2" }; contact2.Id = testUser2Service.Create(contact2); //check that user 1 cannot update contact 2 var updateContact = new Entity("contact"); updateContact.Id = contact2.Id; updateContact["firstname"] = "fred"; try { testUser1Service.Update(updateContact); throw new XunitException(); } catch (Exception ex) { if (!ex.Message.Contains("does not have write access")) { throw; } } var req = new AddUserToRecordTeamRequest(); req.Record = contact2.ToEntityReference(); req.SystemUserId = testUser1.Id; var q = new QueryExpression("teamtemplate"); q.Criteria.AddCondition("teamtemplatename", ConditionOperator.Equal, "TestWriteContact"); var tt = orgAdminService.RetrieveMultiple(q); req.TeamTemplateId = tt.Entities.First().Id; orgAdminService.Execute(req); //that user 1 can now see contact 2 updateContact = new Entity("contact"); updateContact.Id = contact2.Id; updateContact["firstname"] = "fred"; testUser1Service.Update(updateContact); var removereq = new RemoveUserFromRecordTeamRequest(); removereq.Record = contact2.ToEntityReference(); removereq.SystemUserId = testUser1.Id; removereq.TeamTemplateId = tt.Entities.First().Id; orgAdminService.Execute(removereq); //check that user 1 cannot see contact 2 updateContact = new Entity("contact"); updateContact.Id = contact2.Id; updateContact["firstname"] = "bob"; try { testUser1Service.Update(updateContact); throw new XunitException(); } catch (Exception ex) { if (!ex.Message.Contains("does not have write access")) { throw; } } }
public void SimpleReadTest() { var contact = new Contact() { FirstName = "test 1" }; contact.Id = testUser1Service.Create(contact); var contact2 = new Contact() { FirstName = "test 2" }; contact2.Id = testUser2Service.Create(contact2); //check that user 1 cannot see contact 2 try { var checkContact = testUser1Service.Retrieve("contact", contact2.Id, new ColumnSet(true)); throw new XunitException(); } catch (Exception ex) { if (!ex.Message.Contains("does not have permission")) { throw; } } var req = new AddUserToRecordTeamRequest(); req.Record = contact2.ToEntityReference(); req.SystemUserId = testUser1.Id; var q = new QueryExpression("teamtemplate"); q.Criteria.AddCondition("teamtemplatename", ConditionOperator.Equal, "TestReadContact"); var tt = orgAdminService.RetrieveMultiple(q); req.TeamTemplateId = tt.Entities.First().Id; orgAdminService.Execute(req); //that user 1 can now see contact 2 var checkContact2 = testUser1Service.Retrieve("contact", contact2.Id, new ColumnSet(true)); var removereq = new RemoveUserFromRecordTeamRequest(); removereq.Record = contact2.ToEntityReference(); removereq.SystemUserId = testUser1.Id; removereq.TeamTemplateId = tt.Entities.First().Id; orgAdminService.Execute(removereq); //check that user 1 cannot see contact 2 try { var checkContact = testUser1Service.Retrieve("contact", contact2.Id, new ColumnSet(true)); throw new XunitException(); } catch (Exception ex) { if (!ex.Message.Contains("does not have permission")) { throw; } } }
/// <summary> /// Executes the workflow activity. /// </summary> /// <param name="executionContext">The execution context.</param> protected override void Execute(CodeActivityContext executionContext) { // Create the tracing service ITracingService tracingService = executionContext.GetExtension<ITracingService>(); if (tracingService == null) { throw new InvalidPluginExecutionException("Failed to retrieve tracing service."); } tracingService.Trace("Entered " + _processName + ".Execute(), Activity Instance Id: {0}, Workflow Instance Id: {1}", executionContext.ActivityInstanceId, executionContext.WorkflowInstanceId); // Create the context IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>(); if (context == null) { throw new InvalidPluginExecutionException("Failed to retrieve workflow context."); } tracingService.Trace(_processName + ".Execute(), Correlation Id: {0}, Initiating User: {1}", context.CorrelationId, context.InitiatingUserId); IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>(); IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId); try { Guid connectionId = Connection.Get(executionContext).Id; Entity connection = service.Retrieve("connection", connectionId, new ColumnSet("record1id", "record2id")); EntityReference connectedFromId = (EntityReference)connection["record1id"]; EntityReference connectedToId = (EntityReference)connection["record2id"]; //only run this if the connection is to a user record if (connectedToId.LogicalName.ToUpper() == "SYSTEMUSER") { Guid teamTemplateId; string teamTemplateName = TeamTemplateName.Get(executionContext); //look up team template by name QueryByAttribute querybyexpression = new QueryByAttribute("teamtemplate"); querybyexpression.ColumnSet = new ColumnSet("teamtemplatename", "teamtemplateid"); querybyexpression.Attributes.AddRange("teamtemplatename"); querybyexpression.Values.AddRange(teamTemplateName); EntityCollection retrieved = service.RetrieveMultiple(querybyexpression); //if we find something, we're set if (retrieved.Entities.Count > 0) { teamTemplateId = retrieved.Entities[0].Id; } else { //throw exception if unable to find a matching template throw new Exception("could not find team template named: " + teamTemplateName); } RemoveUserFromRecordTeamRequest teamRemoveRequest = new RemoveUserFromRecordTeamRequest(); teamRemoveRequest.Record = connectedFromId; teamRemoveRequest.SystemUserId = connectedToId.Id; teamRemoveRequest.TeamTemplateId = teamTemplateId; RemoveUserFromRecordTeamResponse response = (RemoveUserFromRecordTeamResponse)service.Execute(teamRemoveRequest); } } catch (FaultException<OrganizationServiceFault> e) { tracingService.Trace("Exception: {0}", e.ToString()); // Handle the exception. throw; } catch (Exception e) { tracingService.Trace("Exception: {0}", e.ToString()); throw; } tracingService.Trace("Exiting " + _processName + ".Execute(), Correlation Id: {0}", context.CorrelationId); }
public void When_a_request_is_called_User_Is_Removed_From_Record_Team() { var context = new XrmFakedContext(); var teamTemplate = new TeamTemplate { Id = Guid.NewGuid(), DefaultAccessRightsMask = (int)AccessRights.ReadAccess }; var team = new Team { Id = Guid.NewGuid(), TeamTemplateId = teamTemplate.ToEntityReference() }; var user = new SystemUser { Id = Guid.NewGuid() }; var teamMembership = new TeamMembership { Id = Guid.NewGuid(), ["systemuserid"] = user.Id, ["teamid"] = team.Id }; var account = new Account { Id = Guid.NewGuid() }; context.Initialize(new Entity[] { teamTemplate, team, teamMembership, user, account }); var executor = new RemoveUserFromRecordTeamRequestExecutor(); var req = new RemoveUserFromRecordTeamRequest { Record = account.ToEntityReference(), SystemUserId = user.Id, TeamTemplateId = teamTemplate.Id }; context.AccessRightsRepository.GrantAccessTo(account.ToEntityReference(), new PrincipalAccess { Principal = user.ToEntityReference(), AccessMask = AccessRights.ReadAccess }); executor.Execute(req, context); var retrievedTeamMembership = context.CreateQuery <TeamMembership>().FirstOrDefault(p => p.SystemUserId == user.Id && p.TeamId == team.Id); Assert.Null(retrievedTeamMembership); var response = context.AccessRightsRepository.RetrievePrincipalAccess(account.ToEntityReference(), user.ToEntityReference()); Assert.Equal(AccessRights.None, response.AccessRights); }