поэтому я пытаюсь создать приложение SaaS с помощью ASP.NET Boilerplate, и у меня возникла следующая проблема:
Наблюдая за фреймворком, я заметил, что функция RegisterAsync в UserRegistrationManager создает пользователя на основе текущего активного клиента. Это означает, что если я сейчас вхожу в систему под клиентом «1», то при регистрации нового пользователя у нового пользователя будет tenantId «1». С другой стороны, когда я в настоящее время не вошел в систему, если я зарегистрирую нового пользователя, приложение покажет исключение «не удается зарегистрировать пользователя хоста».
public async Task<User> RegisterAsync(string name, string surname, string emailAddress, string phoneNumber, string userName, string plainPassword, bool isEmailConfirmed)
{
CheckForTenant();
var tenant = await GetActiveTenantAsync();
var user = new User
{
TenantId = tenant.Id,
Name = name,
Surname = surname,
EmailAddress = emailAddress,
PhoneNumber = phoneNumber,
IsActive = true,
UserName = userName,
IsEmailConfirmed = isEmailConfirmed,
Roles = new List<UserRole>()
};
return user;
}
private void CheckForTenant()
{
if (!AbpSession.TenantId.HasValue)
{
throw new InvalidOperationException("Can not register host users!");
}
}
Приложение, которое я хочу создать, требует, чтобы новый пользователь мог зарегистрироваться вместе с бесплатной пробной версией, а затем с платной подпиской. Поэтому я думаю, что новый пользователь должен иметь возможность самостоятельно создавать арендатора. Поэтому, если новый пользователь зарегистрируется, он будет вынужден создать нового клиента, прежде чем сможет делать что-либо еще в приложении.
Проблема в том, что столбец tenantId в таблице User не может быть нулевым, поэтому я могу зарегистрироваться без клиента. Сначала я подумываю назначить всех вновь созданных пользователей клиенту «По умолчанию», но я думаю, что это не лучший способ.
Есть ли способ решить эту проблему или какие-либо упоминания об этом? Заранее спасибо!