Я создаю мультитенантное приложение с точечным ядром net и хотел бы использовать идентификационную базовую инфраструктуру. Сначала я попытаюсь обобщить дизайн моей БД, связанный с пользователями / арендаторами / заявками, чтобы поместить вас в картину.
У меня есть таблица, которая создает отношения между пользователями и арендаторами (Users_Tenants). Это отношение многие ко многим. Пользователь может принадлежать многим арендаторам, а арендатор может иметь много пользователей.
С другой стороны, у меня есть четко определенный набор утверждений пользователя, определяющих разрешения, такие как can_list_x, can_delete_x, can_edit_x et c. Я хотел бы, чтобы эти заявки хранились в классе, унаследованном от IdentityUserClaim и посеянном при начальной миграции, эту таблицу можно было бы назвать (ApplicationUserClaim)
И, наконец, у меня будет таблица, которая создает отношения между User_Tenants и ApplicationUserClaim (Claims_UserTenants). Это строит отношения между парой Пользователь, Арендатор и назначенной ей претензией. Опять же, это отношения «многие ко многим».
Как видите, в моем дизайне я нигде не говорю о ролях. И так я хочу. Итак, мой DBContext наследуется от IdentityUserContext вместо IdentityDBContext, как указано в документации. Я наследую его, передавая свой ApplicationUser и ApplicationUserClaim в список необходимых обобщений:
public class ApplicationDbContext : IdentityUserContext<ApplicationUser,string, ApplicationUserClaim, IdentityUserLogin<string>, IdentityUserToken<string>>
{
}
Одна из основных проблем заключается в том, что когда я обновляю свою базу данных из миграции, ApplicationUserClaim имеет поле с именем UserId, которое я не не хочу, потому что теперь связь создается с таблицей Claims_UserTenants.
Итак, мои вопросы:
Можно ли удалить это поле? Я попробовал это:
modelBuilder.Entity (ApplicationUserClaim) (). Игнорировать (o => o.UserId)
, но не сработало.
Можно ли изменить Identity Core, чтобы он соответствовал моему дизайну БД? Или лучше отказаться от него и создать собственную систему? Надеюсь, мне не нужно этого делать, потому что система идентификации обеспечивает множество встроенных функций ...
Приветствия!