有没有办法执行条件验证?

时间:2012-09-20 00:08:26

标签: asp.net-mvc-4 forms-authentication

我们正在创建一个MVC4文档检索站点,其中某些文档需要身份验证,而其他文档允许匿名访问。

该URL包含用于检索文档列表的文件夹ID。有时,没有一个文档需要身份验证,有时候所有文档都需要进行身份验证,有时甚至是混合身份。

我该如何处理?提前谢谢。

2 个答案:

答案 0 :(得分:1)

您可以在获取可能受限文档的操作上创建自定义授权过滤器。

首先通过将文档与受限制文档的静态缓存ID列表进行比较,首先检查文档是否需要授权。

然后,如果文档受到限制,过滤器将检查当前用户是否已获得授权。如果用户已获得授权,则操作将正常呈现。否则,操作结果应放在401/403(取决于哪个)或重定向到默认的“未授权”页面。

答案 1 :(得分:0)

我会在数据库表中添加一个包含文档的bool RequiresAuthentication项。如果文档是免费的(不需要身份验证),则为false,如果不是,则为true

然后你可以在提供文件的控制器中做这样的事情。

public Details(int Id)
{
    Document doc = databaseContext.Document.Find(Id);
    if(doc.RequiresAuthentication)
    {
        if(User.Identity.IsAuthenticated)
        {
            return View(doc);
        }
        // If the user is not authenticated, redirect them to log on
        return RedirectToAction("LogOn", "Account");
    }
    else
    {
        return View(doc);
    }
}

您甚至可以将returnUrl传递给登录,这样一旦用户登录,他们就会被重定向回他们想要的文档。