`[Authorize (Roles =" Role ")]` не работает, User.IsInRole ("Role") всегда ложно - PullRequest
0 голосов
/ 01 октября 2018

Я чувствую, что что-то упустил.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>());

Ответы [ 2 ]

0 голосов
/ 14 мая 2019

Когда вы создаете свои роли ... убедитесь, что нет лишних пробелов до или после имени роли при сохранении их в БД.Я потратил 3/4 дня, пытаясь понять, почему это происходит.

0 голосов
/ 01 октября 2018

Похоже, у вас есть "SystemAdministrator" роль и может быть много других.

Вы должны использовать [Authorize(Roles = "RoleName")]

ex: - [Authorize(Roles = "SystemAdministrator")]

Перекрестная проверка в вашей базе данных, если у вас есть соответствующие роли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...