Определение Пользователя с Пользователем. Идентификационные данные. Имя в конструкторе контроллера

Необходимо смочь с document.ready.apply ();

8
задан DaveRandom 25 February 2013 в 19:49
поделиться

3 ответа

Я создал собственный базовый класс Controller и добавил к нему свойство CurrentUser.

В методе Initialize я разместил логику для получения пользователя и затем добавил его в ViewData и свойство «CurrentUser» контроллера.

Мои контроллеры унаследовали настраиваемый базовый класс контроллера, и я мог ссылаться на переменную «CurrentUser» в любом месте контроллера:

public class CustomControllerClass : Controller
{
    public User CurrentUser { get; set; }

    protected override void Initialize(RequestContext requestContext)
    {
        base.Initialize(requestContext);

        if (requestContext.HttpContext.User.Identity.IsAuthenticated)
        {
            string userName = requestContext.HttpContext.User.Identity.Name;
            CurrentUser = UserRepository.GetUser(userName);
        }

        ViewData["CurrentUser"] = CurrentUser;                
    }
}
16
ответ дан 5 December 2019 в 06:54
поделиться

Does the User have to be instantiated for every Controller action or just specific ones?

If you create an ActionFilterAttribute, you do have access to the Controller context. Not sure if that is true for AuthorizationFilters, but you could try something like this:

public class MyCustomFilter: ActionFilterAttribute
{

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.Controller.ViewData["TheUser"] = User.Identity.IsAuthenticated ? UserRepository.GetUser(User.Identity.Name) : null;
        base.OnActionExecuting(filterContext);
    }
}

Then, attach this to the necessary controller actions.

1
ответ дан 5 December 2019 в 06:54
поделиться

Я настроил свой базовый контроллер аналогичным образом, используя метод конструктора, и я смог прочитать эту информацию о пользователе следующим образом. Примечание. Я храню только UserId, а не объект User, но цель моего кода - показать, как вы можете получить необходимую информацию в методе contriuctor.

public abstract class BaseController : Controller
{
    int _UserId = 0;

    public int UserId
    {
        get { return _UserId; }
        set { _UserId = value; }
    }

    public BaseController()
    {
        var userFromAuthCookie = System.Threading.Thread.CurrentPrincipal;

        if (userFromAuthCookie != null  && userFromAuthCookie.Identity.IsAuthenticated) // && !String.IsNullOrEmpty(userFromAuthCookie.Identity.Name))
        {
            busUser userBO = AceFactory.GetUser();
            string userNameFromAuthCookie = userFromAuthCookie.Identity.Name;
            _UserId = userBO.GetUserIdByUsername(userNameFromAuthCookie);
        }
    }
4
ответ дан 5 December 2019 в 06:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: