Хороший подход для глобального доступа вошедшего в систему пользователя - PullRequest
0 голосов
/ 15 июля 2011

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

Должно ли это быть обработано в моем репозитории Users? Если да, то как? или есть лучший подход?

Ответы [ 2 ]

1 голос
/ 15 июля 2011

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

Затем в глобальном фильтре действий просто замените текущий участник на свой настроенный. Затем вы можете получить к нему доступ из любой точки мира, как обычная личность, но если вам нужна ваша дополнительная информация, вы просто приводите ее в свой собственный класс идентичности. Который предоставит вам доступ к вашей дополнительной информации.

0 голосов
/ 15 июля 2011

Вы можете написать собственный фильтр действий, который выполняется при каждом запросе (вы регистрируете его как глобальный фильтр). Этот фильтр будет загружать пользователя (например, из хранилища пользователя) и помещать его в http-контекст, например, или в ViewData.

EDIT:

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

public class LoadUserToViewDataAttribute : ActionFilterAttribute
{
    private IUserRepository _userRepository;

    public LoadUserToViewDataAttribute(IUserRepository userRepository)
    {
        _userRepository = userRepository;
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var controller = filterContext.Controller;
        var userName = filterContext.HttpContext.User.Identity.Name;
        var user = _repository.GetUser(userName);

        controller.ViewData.Add("CurrentUser", user);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...