Я чувствую, что что-то упустил.Authorize
само по себе работает, но использование ролей - нет.Код cshtml содержит razor
материал, который я не уверен, что мне разрешено использовать в сочетании с авторизацией на основе ролей.Кроме того, IsInRole
всегда возвращает false.
В моей базе данных в таблице AspNetUserRoles
есть экземпляр роли с правильными RoleId и UserId.Я добавил пользователя к роли в методе Seed
базы данных.
if (!userManager.IsInRole(adminUser.Id, "SystemAdministrator"))
userManager.AddToRole(adminUser.Id, "SystemAdministrator");
Нужно ли добавлять их где-то еще, как в каком-то диспетчере ролей?
Вот что я считаю важной частью Конфигурации при запуске:
app.CreatePerOwinContext<RoleManager<AppRole>>((options, context) =>
new RoleManager<AppRole>(
new RoleStore<AppRole>(context.Get<MyANTon.DataContext.AntContext>())));
Может быть, после этого мне придется добавить пользователя в роль?
Редактировать: Я нашел для этого возможный источник ошибок.Моя db context
, похоже, не включает таблицы идентификаторов, такие как AspNetUserRoles
или даже AspNetUsers
.Я перешел с Forms-Authentication на Identities на прошлой неделе, это, вероятно, проблема сейчас.Должен ли я изменить контекст соответственно?Он наследуется от IdentityDbContext<AppUser>
, поэтому я не могу просто добавить AspUser
(поскольку он уже есть), но когда я смотрю на контекст во время выполнения, его там нет ...
Следующее редактирование: Мне не хватало web.config
для моего менеджера ролей.После его добавления кажется, что моя data context
идея действительно кажется верной.Теперь выдается ошибка: 'The entity type AppUser is not part of the model for the current context.'
.Мой контекст наследуется от IdentityDbContext<AppUser>
, почему он не содержит AppUser
тогда?
Класс контекста:
public class AntContext : IdentityDbContext<AppUser>
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
Database.SetInitializer<AntContext>(null);
modelBuilder.Entity<AppUser>().ToTable("AppUsers");
base.OnModelCreating(modelBuilder);
}
Вызов конструктора UserManager в контроллере:
private UserManager<AppUser> userManager = new UserManager<AppUser>(new UserStore<AppUser>());