Как открыть встроенную систему безопасности и управления пользователями в приложении 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 так, как вам хотелось бы, используя только этот контроллер.

Другие вопросы по тегам