Мне нравится новая функция simplemembership в интернет-шаблоне MVC 4 со ссылками на OAuth для внешнего входа в VS 2012 RTM. По большей части функция аутентификации работает. Однако, даже потратив на это более 8 часов, я не могу реализовать авторизацию на основе ролей для работы на моих контроллерах. SimpleMembership оказывается совсем не простым.
Я искал stackoverflow, гуглил и читал последнюю версию от John Galloway, попробовал много предложений, но до сих пор не получил смог решить эту проблему. Все началось с получения ошибки подключения Sql, и я не мог понять, почему, когда строка подключения и все остальное были в порядке. Потребовалось много часов, чтобы выяснить, что именно класс Roles вызывает проблему.
Атрибут [Authorize] на контроллерах работает, как и раньше, для базовой аутентификации. Но каждый раз, когда я пытаюсь использовать роли, возникает ошибка подключения sql (потому что он возвращается к старому DefaultRolesProvider, который пытается подключиться к файлу aspnetdb SqlExpress по умолчанию и терпит неудачу). Так что-то вроде:
[Authorize(Roles="admin")]
не работает. Это сработает, если я вернусь к старым поставщикам членства на asp.net, но тогда я потеряю простые таблицы базы данных, подтверждение и восстановление баз токенов, более безопасное хеширование паролей и, что более важно, внешние логины через OAuth.
Единственное, что работает внутри кода и бритвенных представлений, - это
User.IsInRole("admin")
что подходит для пунктов меню и тому подобного, но очень громоздко для реализации внутри каждого отдельного действия в контроллере (и мне не нравится, что он проверяет только одну роль за раз).
Буду очень признателен за любые рекомендации по решению этой проблемы.