控制器仅需要特定参数的授权

时间:2011-04-01 11:40:30

标签: asp.net-mvc-3 authorization

我有一个加载文章并显示它的控制器。该文章有一个属性,显示它是私有的还是公共的。

如果文章是私密的,我希望用户在显示文章之前登录。

我不能简单地在操作上添加[Authorize]属性,因为如果文章是公开的,则不需要授权才能显示它。

最干燥的方法是什么?

我想依赖于默认授权模型的内置功能(如果我不需要,我不想手动编写重定向和传递参数)

1 个答案:

答案 0 :(得分:3)

  

最干燥的方法是什么?

编写自定义授权属性:

public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var articleId = httpContext.Request["id"] as string;
        var article = SomeRepository.GetArticle(id);
        // You can also correlate the article with the currently 
        // connected user and see if it belongs to him, ...
        return article.IsPublic;
    }
}

然后使用此自定义属性修饰您的操作。