Как открыть встроенную систему безопасности и управления пользователями в приложении MVC?
Я создал веб-сайт MVC на IIS6. Я использовал встроенный ASP.NET Security без членства, так же, как это было реализовано в шаблонном решении. Контроллер или действие легко защитить, но теперь мне нужно предоставить управление пользователями администратору, вошедшему на сайт. Я понимаю, что встроенные элементы управления ASP для этого не являются "лучшей практикой" и являются собаками для работы. Итак, какова лучшая практика для предложения управления пользователями через приложение ASP.NET MVC?
Я подумал об использовании Entity Framework и подключении его к множеству хранимых процедур. но это кажется неловким Я вижу варианты для AccountMembershipService и FormsAuthenticationService. Это то, что использует существующий контроллер учетной записи проекта. Но я не фимиллиар с ними.
Я не могу не думать, что это уже должно было быть из шаблона проекта. Это фундаментальная часть любого веб-сайта, и вам дали 15%, а почему не остальное?
5 ответов
У меня есть аутентификация пользователя, работающая в некотором смысле в настоящее время. Самым большим препятствием для преодоления является то, что это нормально использовать классы членства, даже если я не использую аспект членства профиля. Это легко получить имя пользователя и сделать Membership.GetUser(UserName). Затем вы можете сделать много вещей, таких как разблокировать, утвердить / отклонить, изменить пароль и сменить пароль вопрос / ответ... все основы, которые мне нужны.
Вот основы:
'get current logged in user
Dim currentUser As MembershipUser = Membership.GetUser()
'get current logged in user name
Dim userName = currentUser.UserName
'get current user email
Dim userEmail = currentUser.Email
'get a user to edit
Dim editingUser = Membership.GetUser(UserName)
'set the user email
editingUser.Email = newEmail
Membership.UpdateUser(editingUser)
‘unlock user
editingUser.UnlockUser()
‘disapprove user
editingUser.IsApproved = False
Membership.UpdateUser(editingUser)
‘approve user
editingUser.IsApproved = True
Membership.UpdateUser(editingUser)
‘change pw
editingUser.ChangePassword(oldPw, newPw)
и это в основном все это тоже
Проверьте этот проект на CodePlex: ASP.Net MVC Членский стартовый комплект
Насколько я могу судить, вы используете SqlMembershipProvider в качестве реализации поставщика членства. Я настоятельно рекомендую вам взглянуть на некоторые методы классов MembershipUser и MembershipProvider (например, CreateUser и т. Д.), Чтобы достичь того, что вы пытаетесь сделать, вместо того, чтобы работать с базовыми таблицами базы данных, используемыми для реализации.
Вы также можете взглянуть на эту статью, чтобы получить подробное представление о членстве, ролях и профилях ASP.NET.
В MvcCms мы использовали RoleProvider из коробки, но преобразовали поставщика членства в сущность.
http://mvccms.codeplex.com/SourceControl/changeset/view/56727
Я не знаю о "наилучшей практике", но вот как я это сделаю (и как это написано в " Professional ASP.NET MVC 1.0"):
У вас должны быть собственные (или стандартные) ProfileProvider и MembershipProvider, чтобы это работало.
Создайте контроллер, который обрабатывает все действия по управлению участниками, например. MemberAdminController
В этом контроллере должен быть указан атрибут Authorize[Roles="Administrator"], поэтому все действия в этом контроллере будут выполняться только в том случае, если пользователь находится в роли администратора.
Теперь вы можете строить представления и действия CRUD так, как вам хотелось бы, используя только этот контроллер.