ASP.NET Членство Отправить имя пользователя на разных уровнях - PullRequest
1 голос
/ 13 мая 2011

У меня есть 3 уровня (UI, BLL, DAL), эти BLL и DAL находятся на внешнем WS, очевидно, мой член-член работает на уровне UI.

Итак ... Я пытался сохранитьв моих таблицах Bussines имя пользователя для различных задач (например, CRUD)

  • Вставить реестр (имя пользователя: nicolas)
  • Удалить реестр (имя пользователя: peter) и т. д ...

Самый простой способ - отправить имя пользователя на ВСЕ методы и сохранить его в разных таблицах.Но эта идея не является масштабируемой и очень грязной, если у вас много бизнес-таблиц.

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

Есть идеи?

Ответы [ 2 ]

1 голос
/ 14 мая 2011

Пользовательские элементы управления для ASP.NET полагаются на библиотеку Membership в System.Web (точнее, System.Web.Security).Пока вы используете эти элементы управления (например, элемент управления <asp:Login>), у вас уже есть зависимость от System.Web.В этом случае любой слой вашего приложения может сделать что-то подобное для извлечения текущего пользователя:

using System.Web.Security;
...
MembershipUser user = Membership.GetUser();

Затем используйте user.UserName для получения имени пользователя.


ОБНОВЛЕНОчтобы отразить понимание того, что слои размещены на отдельных серверах.

Я бы добавил метод StartSession () в BLL, который принимает имя пользователя в качестве параметра и возвращает идентификатор сеанса строки.BLL на сервере генерирует идентификатор сеанса (возможно, с использованием Guid) и использует кэш на стороне BLL для сохранения имени пользователя.Затем на стороне клиента установите файл cookie, содержащий идентификатор сеанса.Он будет отправлен вместе с веб-запросом.(В зависимости от того, как вы отправляете веб-запрос, вам может потребоваться установить значение cookie с помощью javascript.)

Таким образом, вам не нужно изменять сигнатуру ваших методов, но вы все равно можете получить доступ кимя пользователя из BLL с помощью кеша.Вы должны убедиться, что ваша страница входа в систему вызывает метод GetSession () и устанавливает cookie-файл сеанса, прежде чем отправлять дополнительные запросы.

1 голос
/ 13 мая 2011

Если вы не используете службы в BLL и DLL, то в чем смысл, к ним нет доступа, кроме как через пользовательский интерфейс.

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