我有一个加载文章并显示它的控制器。该文章有一个属性,显示它是私有的还是公共的。
如果文章是私密的,我希望用户在显示文章之前登录。
我不能简单地在操作上添加[Authorize]属性,因为如果文章是公开的,则不需要授权才能显示它。
最干燥的方法是什么?
我想依赖于默认授权模型的内置功能(如果我不需要,我不想手动编写重定向和传递参数)
答案 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;
}
}
然后使用此自定义属性修饰您的操作。