SqlMembershipProvider против пользовательских решений - PullRequest
4 голосов
/ 26 марта 2011

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

Я был разработчиком .net net в течение нескольких лет (и до этого php и asp classic), и обычно при разработке приложений я избегаю использовать встроенный .net SqlMembershipProvider, прежде всего потому, что ончасто кажется слишком сложным для моих нужд, и, во-вторых, потому что я могу только представить, что такая сложная модель данных, скорее всего, приведет к снижению производительности.

Обычно я использую пользовательский поставщик членства и ролей, работающий по довольно простой схеме типа user -> user roles <- roles.Я поддерживаю стандартные функции поставщика членства, такие как восстановление учетной записи, детали профиля, неудачная блокировка учетной записи, секретные вопросы и т. Д., В зависимости от потребностей соответствующего приложения, такого как защищенное приложение AD, имеет несколько дополнительных функций, обычно общедоступное приложение будет иметьторговый центр.Это также означает, что при появлении любых задач, требующих сохранения хранимых процедур для просмотра пользовательских данных, их легко писать и выполнять очень хорошо.Простые команды SQL, хорошая индексация и простая модель данных, приводящая к высокопроизводительному, масштабируемому решению, которое должно быть изменено. Я имею полный контроль над изменениями по мере необходимости, что я считаю бесценным.

Исходя из вашего опыта, вы бы сказали этоэто устаревший подход?Были ли у вас проблемы с масштабируемостью со встроенным провайдером?Какой подход вы обычно используете и в каких сценариях?

Спасибо

Ответы [ 2 ]

6 голосов
/ 27 марта 2011

Если вы не указали убедительных причин, по которым не следует делать это, я бы посоветовал вам начать с SQLMembershipProvider и настроить его по мере необходимости.

Мы обнаружили, что встроенный провайдер дал нам всеОсновы практически без работы с нашей стороны.Есть так много элементов для разработки хорошей структуры безопасности, и легко забыть один из них или просто стать ленивым и не реализовать один «правильный» способ, когда вы катаетесь самостоятельно.На ум приходят такие вещи, как соленые пароли и их сброс по электронной почте.

Конечно, SQLMembershipProvider не волшебная пуля.У нас было несколько обстоятельств, когда нам нужно было сделать что-то более сложное с аутентификацией.Но мы смогли решить их, просто расширив SQLMembershipProvider, а не заменив его.См. Мой ответ на Какой хороший способ продлить членство .Net для отслеживания имен пользователей для получения более подробной информации.

Мы не заметили каких-либо существенных проблем с производительностью, связанных с SQLMembershipProvider, поэтому я думаю,разыгрывание карты исполнения не гарантируется.В конце концов, сколько времени ваши пользователи обычно проводят в вашей системе?Если все ваши страницы загружаются быстро, нет никаких реальных оснований для написания всего собственного кода в соответствии с (возможно, ошибочной) идеей, что вы улучшите производительность.Это та страшная «преждевременная оптимизация», о которой мы постоянно читаем.

Каркас ролей был слишком упрощен для наших нужд, поэтому мы его вообще не используем.Но это тоже не помешало.

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

1 голос
/ 27 марта 2011

Использование встроенных провайдеров должно быть проще в обслуживании и найти ресурсы, знакомые с API (при найме программистов).

...