2013-04-12 17 views
1

[Проблема]Какую систему членства я должен использовать?

У меня есть предварительно созданная база данных с учетными данными пользователя. Единственное, что я могу изменить в этой базе данных, это то, как пароли хэшируются. (Не спрашивайте об этом ... давайте просто скажем, что это глупо, и я исправляю его, пожалуйста.) Он заполнен учетными данными, поэтому все, что я использую, должно формировать его. Мы переходим к структуре ASP.net MVC4 и начинаем с нуля.

[Вопрос]

Что членство в системе следует использовать для этой проблемы, если таковые имеются?

Он должен:

а) позвольте мне проверить по базе данных, используя SHA512 для пароля б) установить роли в зависимости от результатов с) декорировать действия в контроллере, так что я могу чувствовать себя как босс

[подробности]

Предположим, у меня был сайт для людей, которые любят отыгрывать как зубные щетки. В базе данных уже есть (для сайта с небольшим и средним диапазоном) данных. Я перехожу к новому макету базы данных и буду преобразовывать его из старого. Мы могли бы изменить способ управления пользовательской системой, но, честно говоря, мы бы этого не сделали. У нас есть таблица пользователей с именем пользователя и паролем. Очень просто.

У меня есть googled, googled, и Stack Overflow'd, и Stack Overflow'd. То, что я нашёл, - это, по сути, книга выбора, в которой у них либо пустые номера страниц, либо дайте мне страницу в более старую книгу, чье приключение не совсем похоже на это.

Я надеюсь, что либо: а) кто-то назовет меня глупым прикладом и укажет, что я задаю повторяющийся вопрос, который приводит к ресурсу с некоторым полным примером и/или документацией о том, как делать то, что я хочу, или б) помогите мне найти способ.

Как раз сейчас я рассматриваю возможность написания собственной системы фильтрации пользовательского управления/аутентификации. Я собирался пойти с MembershipProvider, но это казалось излишним и, похоже, не делало того, что я хотел. Возможно, я слишком сильно сужу свое видение.

Я более чем готов взломать свой собственный путь и работать над решением проблемы, но я не хочу откатывать свою собственную вещь, если есть что-то доступное, к чему я могу подключиться.

Update 1

Win сделал комментарий о MembershipProvider не зависит от системы MVC, который дал мне «Ага!» момент, когда все объединяется. Я переоцениваю свои исследования, чтобы убедиться, что я просто не поставил головоломки вместе правильно.

Update 2

После долгих помощи dkroy и Win, я получил немного глубже в то, что происходит здесь. Как только у меня все будет сделано, я включу его в редактирование для всех, кто ищет информацию. По сути, я был на правильном пути, прежде чем думал о том, чтобы сломать его. Я не реализовал вызов GetUser, и я не вызывал SetAuthCookie, поэтому он работал неправильно. Сейчас я пишу RoleProvider.

ответ

1

а) позвольте мне проверить по базе данных с помощью SHA512 пароля

поддержки поставщика членства SHA512.

б) множество ролей в зависимости от результатов с) украшающие действия в контроллере, так что я могу чувствовать себя как босс

Если вы хотите ограничить пользователя от роли, вы хотите реализовать both Custom Memebership Provider and Custom Role Provider.

Однако вам не нужно переопределять все. Вот основные из них:

// Membership provider 
public override bool ValidateUser(string username, string password) 

public override MembershipUser GetUser(string username, bool userIsOnline) 

public override string GetUserNameByEmail(string email) 

// Role provider 
public override bool IsUserInRole(string username, string roleName) 

public override string[] GetRolesForUser(string username) 
+0

Спасибо за ссылку, то есть я не нашел. К сожалению, когда я пытаюсь построить, мне сказали, что мне нужно реализовать каждый метод и свойство. Является ли это неудачей в моем процессе сборки? – Codeacula

+1

Да, вы должны переопределить все методы. Однако вы можете просто оставить его пустым (это нормально), за исключением перечисленных мной. Конечно, вы не хотите называть «GetAllUsers» намеренно, если знаете, что не реализовали этот метод. – Win

+1

Вам необходимо предоставить метод, который соответствует сигнатуре каждого метода, однако вам не нужно кодировать фактическую реализацию для всех. Просто установите каждое из их содержимого следующим образом: «throw new NotImplementedException();' –

1

Вы можете создать свой собственный RoleProvider и MembershipProvider.Таким образом, вы сможете использовать существующие структуры баз данных и по-прежнему использовать контракты MembershipProvider и RoleProvider, которые ASP.NET реализует для предоставления услуг членства. Минимальный поиск на пользовательских MembershipProviders должен начать вас.

+0

Я сделал несколько попыток, и это показалось излишним. Когда я смотрел, единственной функцией, которую я нашел полезной, было ValidateUser. Все функции CRUD обрабатываются в другом месте, и у нас пока нет пользовательской блокировки. Это типично для этого? – Codeacula

+1

Если вы не используете определенную функцию, вам действительно не нужно ее реализовывать. Если вы не получите ответ, который хотите, к концу дня я напишу минимальную реализацию. – dkroy

+0

Спасибо! Не беспокойтесь о реализации: я хочу понять это, и не хотел бы, чтобы на меня набросал код. Я думаю, что теперь я ставлю 2 + 2 благодаря вам и Win. – Codeacula

Смежные вопросы