Как реализовать членство в ASP.NET в моей модели домена - PullRequest
20 голосов
/ 01 мая 2009

На веб-сайте мне нужно объединить членство и аутентификацию. Итак, я хочу использовать функциональность членства в ASP.NET, но у меня есть другие пользовательские вещи, которые должен сделать «пользователь».

Итак, я сижу здесь с карандашом и бумагой, рисую линии для моей доменной модели ... И как я могу наилучшим образом использовать членство в ASP.Net, но расширить его для удовлетворения своих потребностей?

Должен ли я создать класс, который наследует от MembershipUser, и расширить его своими собственными свойствами и методами (и сохранить его в отдельной таблице). Или я должен позволить MembershipUser быть свойством для моего пользовательского объекта Пользователь / Клиент?

Какой хороший надежный способ сделать это?

Ответы [ 4 ]

11 голосов
/ 01 мая 2009

Я думал об этом, и есть 2 способа, которые кажутся подходящими (конечно, есть и другие способы заставить его работать).

Пользовательский членство

Вы изменяете провайдера членства для использования своего собственного и используете свой объект User для хранения всей информации.

Проблема с этим состоит в том, что он включает в себя много повторной реализации вещей, которые уже хорошо обрабатываются Asp.Net. Хорошо, что у вас есть один объект User со всеми деталями.

Ссылка от пользователя членства на вашего пользователя

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

Это действительно легко настроить, вам просто нужно создать сервис, который будет использоваться следующим образом:

string userName = "Jon Skeet";
User user = new UserManagementServices().GetUserByUserName(userName);
7 голосов
/ 19 июня 2009

Я закончил тем, что написал своего собственного участника-провайдера, и реализовал это в 3 отдельных решениях. Это чрезвычайно просто и намного, намного элегантнее, чем связать пользователя с membersUser (который я тоже пробовал).

Читать это ...:

Создание настраиваемого поставщика членства для безопасности веб-сайта ASP.NET

А если вы хотите узнать больше, посмотрите это видео (с исходным кодом) .

3 голосов
/ 01 мая 2009

Я расширил членство в MemberhipUser и создал свою собственную версию SqlMembershipProvider для сопоставления с моим существующим доменом, и теперь он работает хорошо.

MembershipUser - это, по сути, просмотр моей таблицы пользователей. Мой расширенный класс MembershipUser включает свойства профиля / стиля учетной записи вместо использования системы SqlProfileProvider по умолчанию, которая немного хрупкая.

Я не смог использовать существующие таблицы членства или sprocs, но написал свои собственные. Например, SqlMembershipProvider использует GUID в качестве непрозрачного ключа, но производственная система использует простой старый тип int. Все даты в формате UTC и т. Д.

Все дополнительные функции пользователя доступны через домен пользователя, а не через методы членства.

НТН.

0 голосов
/ 07 ноября 2010

В настоящее время я работаю над Расширенной статьей API членства Microsoft ASP.NET 2.0 от журнала CoDe Magazine, в которой объясняется, как расширить API членства, написав оболочку для существующих классов. Основным преимуществом является то, что вы можете сохранить все готовые функциональные возможности и вам не придется переписывать свои собственные, как это было бы при реализации пользовательского поставщика. Исходный код предоставлен.

...