Несколько запросов авторизации - PullRequest
0 голосов
/ 09 марта 2012

Я довольно новичок в MVC и даже еще не освоил [Authorize].По сути, у меня есть веб-сайт, по которому для одной области требуется, чтобы они указали свой адрес электронной почты, имя и компанию, прежде чем получить доступ.Нет пароля, нет регистрации и т. Д. Тогда будет область Admin, где пользователь должен будет войти в систему, используя свой адрес электронной почты и пароль.

Мой вопрос: как мне реализовать ситуацию с двойной авторизацией?

Также забыл упомянуть, что, находясь в области Admin, они могут загружать материалы на сайты, к которым они относятся, то есть больше, чем тот, на котором они сейчас находятся.У меня есть база данных, которая содержит сайты, для которых они являются администраторами.URL-адрес будет выглядеть как / Admin / Site /, но как только они войдут в систему с правами администратора, как мне убедиться, что они не могут перейти / Admin / Site2, где Site2 - это то, для чего они не являются администраторами.

1 Ответ

1 голос
/ 09 марта 2012

Я предполагаю, что человек может быть анонимным и загружать файл, если он / она предоставил детали ранее.В этом случае проигнорируйте атрибут Authorization и напишите свой собственный.Вот быстрый пример.Он полагается на файл cookie, который будет установлен.

public class CheckEmailAddressAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var request = filterContext.HttpContext.Request;
        // if the cookie isn't set the a user never provided their details
        if (request.Cookies["mycookiename"] == null)
        {
            // Set it to the correct result, to redirect the user to provide their email address
            filterContext.Result = new ViewResult { ViewName = "GetEmailAddress" };
            filterContext.HttpContext.Response.AppendCookie(new HttpCookie("mycookiename", "true"));
        }
        else
        {
            // Don't do anything, the user already provided their email address
        }

    }
}

И укажите его так на контроллере, который выполняет загрузку.

public class DownloadController : Controller
{
    [CheckEmailAddress]
    public ActionResult Download(string name)
    {
        // Implement download
    }    
}

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

EDIT

Согласно OP, мы не хотим устанавливать cookie, кроме случаев, когда человек вводит свои данные, поэтому вот обновленный класс.

public class CheckEmailAddressAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        var request = filterContext.HttpContext.Request;
        // if the cookie isn't set the a user never provided their details
        if (request.Cookies["mycookiename"] == null)
        {
            // Set it to the correct result, to redirect the user to provide their email address
            filterContext.Result = new ViewResult { ViewName = "GetEmailAddress" };
            // filterContext.HttpContext.Response.AppendCookie(new HttpCookie("mycookiename", "true"));
        }
        else
        {
            // Don't do anything, the user already provided their email address
        }

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