MVC 5 Аутентификация на основе ролей

Я пытаюсь заблокировать нашу страницу «администратора» только для администраторов, использующих Asp.net Identity (мы создаем MVC5). Я могу заставить [Authorize (Users = "admin")] работать, но не могу заставить [Authorize (Roles = "Admin")] работать.

Я создал роль в таблице dbo.AspNetRoles, а затем связал учетную запись в AspNetUserRoles, связав GUID пользователя с идентификатором в таблице aspnetroles.

Я видел в предыдущих выпусках MVC, что вам приходилось заходить в web.config, чтобы добавить несколько строк. Может ли кто-нибудь помочь мне указать в правильном направлении?


person Ian Anderson    schedule 28.10.2013    source источник


Ответы (1)


Вы указали в web.config, что собираетесь использовать роли?

  <roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider">
      <providers>
        <clear />
        <add name="AspNetSqlRoleProvider" connectionStringName="DefaultConnection" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
      </providers>
    </roleManager>
person Josh    schedule 01.11.2013
comment
вам нужно добавить это право, в настоящее время вы его не можете изменить, верно? - person Refracted Paladin; 05.11.2013
comment
@RefractedPaladin Иногда это так, иногда это не зависит от того, какой тип проекта создал файл. - person Josh; 05.11.2013
comment
Этот ответ не поможет, если вы используете удостоверение ASP.NET, которое MVC 5 использует вне коробка. - person Jeremy Cook; 06.12.2013
comment
При использовании ASP.NET Identity и MVC 5 роли по умолчанию сохраняются в файле cookie. Возможно, вам придется выйти и снова войти в систему, чтобы обновить роли пользователя. - person sean woodward; 15.01.2014
comment
@seanwoodward: Что, если я должен предоставить интерфейс администратора для назначения и отмены назначения ролей пользователям, в частности, с использованием ASP.NET Identity в MVC 5? - person ; 05.02.2014
comment
@ImranNazir, даже в этом случае пользователю придется выйти из системы и войти в систему, чтобы обновить роли в файле cookie. Альтернативой является проверка ролей вручную или воссоздание файла cookie аутентификации. - person sean woodward; 05.02.2014
comment
@JeremyCook Если вы используете owin / identity, тогда как вы должны выполнять роли? Я боролся. - person Zapnologica; 10.02.2014
comment
@Zapnologica Я тоже боролся с этим, и вот моя интерпретация. По умолчанию Identity использует утверждения, которые сохраняются в файле cookie пользователя при входе в систему. Эти утверждения могут содержать что угодно. Identity хранит роли пользователей, к которым я принадлежал на момент входа в свои заявки. Каждый раз, когда я запрашиваю страницу, Identity будет искать мои утверждения и может найти одно заявляющее, что я принадлежу к роли администратора, а затем подключает этот запрос приложения, чтобы приложение могло видеть, что я принадлежу к роли администратора . Удостоверение получает роли из моего файла cookie с утверждениями, а не из БД, запрашивая мое имя пользователя. - person Jeremy Cook; 11.02.2014