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