Членство в ASP.NET - дизайн для отслеживания дополнительной информации - PullRequest
3 голосов
/ 14 августа 2010

Я работаю над приложением ASP.NET4.0 / C # для общедоступного сайта, который должен проверять подлинность только тех сотрудников, которые работают в связанном бизнесе. Идея состоит в том, чтобы сайт имел CMS, чтобы сотрудники могли заходить и вносить изменения в определенный контент, не работая с каким-либо html.

Мой вопрос касается разработки и использования поставщика членства ASP.NET. Я не пытаюсь заставить сайт работать с существующей базой данных, поэтому нет необходимости создавать свой собственный MembershipProvider для этой цели. Однако, поскольку каждый пользователь является сотрудником, я хочу отслеживать дополнительную информацию, такую ​​как имя и номер офиса. Я могу придумать два очевидных способа сделать это:

  1. Использовать класс SqlMembershipProvider по умолчанию. В результате мне нужно было бы добавить соответствующие таблицы в мою базу данных и создать отдельную таблицу для любой «дополнительной» информации, которую я хочу сохранить. Это фактически создает вертикальный раздел на пользовательской таблице, поскольку я бы использовал назначенный asp.net userID в качестве первичного ключа таблицы employee. Чтобы получить «дополнительную» информацию, я мог бы попросить поставщика предоставить информацию о текущем пользователе и запросить базу данных в случае, если я хочу узнать что-нибудь еще.

  2. Создайте одну таблицу для всей информации о сотрудниках (включая логин и пароль) и создайте мои собственные пользовательские классы MembershipProvider и MembershipUser с желаемой функциональностью.

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

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

Ответы [ 3 ]

3 голосов
/ 14 августа 2010

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

  1. Установите членство .NET по умолчанию с помощью инструмента aspnet_regsql.exe
  2. Создайте таблицу UserProfile с уникальным идентификатором (PK)Столбец UserID, связанный через внешний ключ с таблицей aspnet_Users
  3. Чтобы получить доступ к этой информации, все, что вам нужно, это UserId конкретного пользователя, а затем вы можете запросить дополнительную информацию в своей пользовательской таблице.1009 *

    Microsoft написала отличный пост о том, как это сделать.

    Удачи!

    M

1 голос
/ 14 августа 2010

Поставщик профиля таблицы SQL (http://weblogs.asp.net/scottgu/archive/2006/01/10/435038.aspx) поможет вам сделать это.Вы получите всю мощь профилей и в то же время не будете беспокоиться о кэшировании или сериализации, поскольку этот провайдер хранит информацию профиля в чистой таблице базы данных без какой-либо сериализации.Вы можете использовать их непосредственно в своих запросах.

1 голос
/ 14 августа 2010

Я делаю что-то подобное, используя ваш вариант 1. Прекрасно работает для меня.

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

Использование пользовательского MembershipProvider для такого рода вещей даст вам больше работы, чем вы рассчитывали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...