Esempio n. 1
0
        public void Test_TenantAddUpdate_Bad_3()
        {
            var model = new TenantBase();

            testContext.WriteLine($"{model.ToString()}");
            tp.TenantAddUpdate(model);
        }
Esempio n. 2
0
        protected virtual void CreateOrMigrate(TenantBase tenant)
        {
            var args = new DbPerTenantConnectionStringResolveArgs(
                tenant == null ? (int?)null : (int?)tenant.Id,
                tenant == null ? MultiTenancySides.Host : MultiTenancySides.Tenant
                );

            args["DbContextType"]         = typeof(TDbContext);
            args["DbContextConcreteType"] = typeof(TDbContext);

            var nameOrConnectionString = ConnectionStringHelper.GetConnectionString(_connectionStringResolver.GetNameOrConnectionString(args));

            using (var uow = _unitOfWorkManager.Begin(TransactionScopeOption.Suppress))
            {
                using (var dbContext = _iocResolver.ResolveAsDisposable <TDbContext>(new { nameOrConnectionString = nameOrConnectionString }))
                {
                    var dbInitializer = new MigrateDatabaseToLatestVersion <TDbContext, TConfiguration>(
                        true,
                        new TConfiguration
                    {
                        Tenant = tenant
                    });

                    dbInitializer.InitializeDatabase(dbContext.Object);

                    _unitOfWorkManager.Current.SaveChanges();
                    uow.Complete();
                }
            }
        }
 public void Update(TenantBase linkedTenant)
 {
     if (linkedTenant.TenantItemId == 0)
     {
         throw new ApplicationException("The linkedTenant must be already in the database.");
     }
     LinkedTenant = linkedTenant;
 }
 public UserDataHierarchical(string userId, TenantBase linkedTenant) : base(userId)
 {
     if (linkedTenant.TenantItemId == 0)
     {
         throw new ApplicationException("The linkedTenant must be already in the database.");
     }
     LinkedTenant = linkedTenant;
 }
Esempio n. 5
0
        public virtual void CreateOrMigrateForTenant(TenantBase tenant)
        {
            if (tenant.ConnectionString.IsNullOrEmpty())
            {
                return;
            }

            CreateOrMigrate(tenant);
        }
Esempio n. 6
0
        public void Test_TenantAddUpdate_Bad_2()
        {
            var model = new TenantBase();
            var id    = Guid.Empty;

            model.Contact = new ContactBase()
            {
                TenantId = id, DisplayName = id.ToString()
            };
            tp.TenantAddUpdate(model);
        }
        private async Task CheckAddUser(string email, string rolesCommaDelimited, TenantBase linkedTenant)
        {
            var user = await _userManager.CheckAddNewUserAsync(email, email); //password is their email

            foreach (var roleName in rolesCommaDelimited.Split(',').Select(x => x.Trim()))
            {
                _extraService.CheckAddRoleToUser(user.Id, roleName);
            }
            _extraService.AddUpdateDataAccessHierarchical(user.Id, linkedTenant);
            _extraService.CheckAddModules(user.Id, linkedTenant);
        }
Esempio n. 8
0
 /// <summary>
 /// This adds if not present a ModulesForUser for a user, using the user's Company's Modules settings.
 /// </summary>
 /// <param name="userId"></param>
 /// <param name="linkToTenant"></param>
 public void CheckAddModules(string userId, TenantBase linkToTenant)
 {
     if (_context.Find <ModulesForUser>(userId) == null)
     {
         var company = _context.Find <Company>(linkToTenant.ExtractCompanyId());
         if (company == null)
         {
             throw new NullReferenceException($"Could not find the company with primary key of {linkToTenant.ExtractCompanyId()}.");
         }
         var dataAccess = new ModulesForUser(userId, company.AllowedPaidForModules);
         _context.Add(dataAccess);
     }
 }
        public void CheckAddDataAccessHierarchical(string userId, TenantBase linkedTenant)
        {
            if (linkedTenant == null)
            {
                throw new ArgumentNullException(nameof(linkedTenant));
            }

            if (_context.Find <UserDataHierarchical>(userId) == null)
            {
                var dataAccess = new UserDataHierarchical(userId, linkedTenant);
                _context.Add(dataAccess);
            }
        }
        private string HtmlDisplayTenant(TenantBase tenant, int indent)
        {
            var result = "<tr>";

            for (int i = 0; i < indent; i++)
            {
                result += "<td></td>";
            }
            result += $"<td>{tenant.GetType().Name}</td>" +
                      $"<td>{tenant.Name}</td>" +
                      $"<td>DataKey = {tenant.DataKey}</td>" +
                      "</tr>";

            return(result);
        }
Esempio n. 11
0
        public static void BuildDemoData()
        {
            foreach (var t in Tenants)
            {
                var model = new TenantBase()
                {
                    _id     = t,
                    Contact = new ContactBase()
                    {
                        DisplayName = t.ToString(),
                        TenantId    = t,
                        ContactName = t.ToString()
                    },
                    Configuration = new List <KeyValuePair <string, string> >()
                    {
                        new KeyValuePair <string, string>("TenantDb", t.ToString())
                    }
                };
                Console.WriteLine(model.ToString());
                TenantProvider.TenantAddUpdate(model);
            }

            int ct = 0;

            foreach (var u in Usernames)
            {
                var model = new TenantUserProfileBase()
                {
                    UniqueUserId = u,
                    _id          = Guid.NewGuid(),
                };
                if (ct % 2 == 0)
                {
                    model.Tenants.Add(Tenants[0]);
                }
                else
                {
                    model.Tenants.Add(Tenants[1]);
                }

                model.SettingsPut("ct", ct.ToString());

                Console.WriteLine(model.ToString());

                UserProvider.Write(model);
                ct++;
            }
        }
Esempio n. 12
0
        /// <summary>
        /// This adds a UserDataHierarchical if not present, or updates the linked tenant if is present.
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="linkedTenant"></param>
        public void AddUpdateDataAccessHierarchical(string userId, TenantBase linkedTenant)
        {
            if (linkedTenant == null)
            {
                throw new ArgumentNullException(nameof(linkedTenant));
            }

            var dataLink = _context.Find <UserDataHierarchical>(userId);

            if (dataLink == null)
            {
                dataLink = new UserDataHierarchical(userId, linkedTenant);
                _context.Add(dataLink);
            }
            else
            {
                dataLink.Update(linkedTenant);
            }
        }
Esempio n. 13
0
 private static void MakeTenants(int count)
 {
     for (int i = 0; i < count; i++)
     {
         var tenantId = Guid.NewGuid();
         var model    = new TenantBase
         {
             _id     = tenantId,
             Contact = new ContactBase()
             {
                 DisplayName = tenantId.ToString(), ContactEmail = $"{tenantId}@my.co", ContactName = $"", ContactPhone = ""
             }
         };
         var config = new List <KeyValuePair <string, string> >();
         foreach (var k in ConfigKeys)
         {
             var kv = new KeyValuePair <string, string>(k, Faker.Lorem.Word());
             config.Add(kv);
         }
         model.Configuration = MakeConfigs();
         Tenants.Add(tenantId);
         tp.TenantAddUpdate(model);
     }
 }
 public UserDataHierarchical(string userId, TenantBase linkedTenant) : base(userId)
 {
     Update(linkedTenant);
 }
Esempio n. 15
0
        public void Test_TenantAddUpdate_Bad_3()
        {
            var model = new TenantBase();

            tp.TenantAddUpdate(model);
        }
        public static List <Company> AddCompanyAndChildrenInDatabase(this CompanyDbContext context, params string[] companyDefinitions)
        {
            if (!companyDefinitions.Any())
            {
                companyDefinitions = new[]
                {
                    "4U Inc.|West Coast|San Fran|SF Dress4U, SF Tie4U, SF Shirt4U",
                    "4U Inc.|West Coast|LA|LA Dress4U, LA Tie4U, LA Shirt4U"
                }
            }
            ;

            var companyDict   = new Dictionary <string, Company>();
            var subGroupsDict = new Dictionary <int, List <SubGroup> >();

            foreach (var companyDefinition in companyDefinitions)
            {
                var hierarchyNames = companyDefinition.Split('|');
                if (!companyDict.ContainsKey(hierarchyNames[0]))
                {
                    companyDict[hierarchyNames[0]] = Company.AddTenantToDatabaseWithSaveChanges(
                        hierarchyNames[0], PaidForModules.None, context);
                    subGroupsDict.Clear();
                }

                TenantBase parent = companyDict[hierarchyNames[0]];

                for (int i = 1; i < hierarchyNames.Length; i++)
                {
                    if (!subGroupsDict.ContainsKey(i))
                    {
                        subGroupsDict[i] = new List <SubGroup>();
                    }
                    if (i + 1 == hierarchyNames.Length)
                    {
                        //End, which are shops
                        var shopNames = hierarchyNames[i].Split(',').Select(x => x.Trim());
                        foreach (var shopName in shopNames)
                        {
                            RetailOutlet.AddTenantToDatabaseWithSaveChanges(shopName, parent, context);
                        }
                    }
                    else
                    {
                        //Groups
                        SubGroup subGroup = null;
                        if (subGroupsDict[i].Any(x => x.Name == hierarchyNames[i]))
                        {
                            subGroup = subGroupsDict[i].Single(x => x.Name == hierarchyNames[i]);
                        }
                        else
                        {
                            subGroup = SubGroup.AddTenantToDatabaseWithSaveChanges(hierarchyNames[i], parent, context);
                            subGroupsDict[i].Add(subGroup);
                        }
                        parent = subGroup;
                    }
                }
            }

            return(new List <Company>(companyDict.Values));
        }
    }