/// <summary> /// Gets the name of the current user. /// </summary> /// <returns></returns> private string GetCurrentUserName() { string currentUser = string.Empty; RequestContext context = RequestContext.GetContext(); long userId = context.Identity.Id; if (userId == 0) { // User id is system or tenant admin. // Try and get the actual user. RequestContext actualUsercontext = ActualUserRequestContext.GetContext(); if (actualUsercontext != null && actualUsercontext.IsValid) { userId = actualUsercontext.Identity.Id; } } if (userId > 0) { var account = Entity.Get <UserAccount>(userId); if (account != null) { currentUser = account.Name; } } else if (!string.IsNullOrWhiteSpace(context.Identity.Name)) { currentUser = context.Identity.Name; } return(currentUser); }
public void TestSetActualUserRequestContext() { try { // Ensure the initial context is clear RequestContext.FreeContext(); // Create a context. var identity1 = new IdentityInfo(1234, "TestUser1"); var tenant1 = new TenantInfo(1111); RequestContext.SetContext(identity1, tenant1, "en-US"); var context1 = RequestContext.GetContext(); // This should contain the actual user context var actualUserContext1 = ActualUserRequestContext.GetContext(); Assert.IsTrue(actualUserContext1.IsValid); Assert.AreSame(context1.Identity, actualUserContext1.Identity); Assert.AreSame(context1.Tenant, actualUserContext1.Tenant); // Create a sys admin context. var identity2 = new IdentityInfo(0, "Admin"); var tenant2 = new TenantInfo(1111); RequestContext.SetContext(identity2, tenant2, "en-US"); // This should contain the initial actual user context var actualUserContext2 = ActualUserRequestContext.GetContext(); Assert.IsTrue(actualUserContext2.IsValid); Assert.AreSame(context1.Identity, actualUserContext2.Identity); Assert.AreSame(context1.Tenant, actualUserContext2.Tenant); // Create a new user context. var identity3 = new IdentityInfo(456, "TestUser1"); var tenant3 = new TenantInfo(1111); RequestContext.SetContext(identity3, tenant3, "en-US"); var context3 = RequestContext.GetContext(); // Set and reset an admin context using (new AdministratorContext()) { } // This should still contain the new actual user context var actualUserContext3 = ActualUserRequestContext.GetContext(); Assert.IsTrue(actualUserContext3.IsValid); Assert.AreSame(context3.Identity, actualUserContext3.Identity); Assert.AreSame(context3.Tenant, actualUserContext3.Tenant); RequestContext.FreeContext(); var actualUserContext4 = ActualUserRequestContext.GetContext(); Assert.IsFalse(actualUserContext4.IsValid); } finally { RequestContext.FreeContext(); } }