我对MVC很陌生,甚至还没有真正掌握[Authorize]
。基本上,我有一个网站,在一个区域,要求他们在访问之前提供他们的电子邮件地址,姓名和公司。没有密码,没有注册等。然后会有一个Admin
区域,用户需要使用他们的电子邮件地址和密码登录。
我的问题是,我如何实施双重授权情况?
同样忘了提及在Admin
区域内,他们可以将资料上传到他们管理的网站,即超过他们当前所在的网站。我有一个数据库,可以保存他们管理的网站。这个网址就像是/ Admin / Site /,但是一旦他们登录到管理员,我怎样才能确保他们不能去/ Admin / Site2 Site2
是他们不是管理员的人。
答案 0 :(得分:1)
我假设此人可以匿名并下载该文件,只要她/他之前提供了详细信息。在这种情况下,请忽略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”参数,以便在用户提供电子邮件地址后将其重定向到下载页面。
修改强>
根据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
}
}
}