代码改变世界

Abp 多租户

2020-04-18 17:12  qgbo  阅读(453)  评论(0编辑  收藏  举报

Abp 的数据库Seed, 并不是Migration 的时候生成的数据,而是运行时生成的数据。这个在SeedHelper.cs 中看到。

这样不用设置他们的ID 了,也少了迁移失败的可能麻烦。

多租户:

有一个超级管理员,和普通用户是一个实体类。他的TenantID是null.

每个租户管理员是一个User, 和普通用户是一个实体类。他有Admin 这个角色。他登陆之后,可以给他的成员设置角色,也可以设为Admin.

 

  var adminUser = _context.Users.IgnoreQueryFilters().FirstOrDefault(u => u.TenantId == _tenantId && u.UserName == AbpUserBase.AdminUserName);
            if (adminUser == null)
            {
                adminUser = User.CreateTenantAdminUser(_tenantId, "admin@defaulttenant.com");
                adminUser.Password = new PasswordHasher<User>(new OptionsWrapper<PasswordHasherOptions>(new PasswordHasherOptions())).HashPassword(adminUser, "123qwe");
                adminUser.IsEmailConfirmed = true;
                adminUser.IsActive = true;

                _context.Users.Add(adminUser);
                _context.SaveChanges();

                // Assign Admin role to admin user
                _context.UserRoles.Add(new UserRole(_tenantId, adminUser.Id, adminRole.Id));
                _context.SaveChanges();
            }

  ABP和Module-Zero假设存在一个预定义的租户,它的租户名是“Default”,且Id是1。在一个单租户的应用中,它被用作单独的租户。上面的代码就是他的实现。运行时执行!

多租户的形式:

单应用多数据库。

  数据库改变结构的时候,迁移麻烦

单应用单数据库。

  维护简单,数据库比较笨重,所有数据都在一块

单应用混合数据库。

。。。

ABP 支持各种组合。