如何确保只有在博客中创建帖子的用户才能删除或编辑asp .net MVC3?

时间:2012-08-19 00:01:15

标签: asp.net sql asp.net-mvc-3

如何确保只有在博客中创建帖子的用户才能删除或编辑帖子?

即。用户可以创建博客帖子,并可以在/post/edit/{ID}进行编辑。如果用户将id更改为不属于他的帖子的其他不同值会怎样?

如何确保他编辑的帖子只属于他?

1 个答案:

答案 0 :(得分:2)

您可以编写自定义Authorize属性,在其中查询数据库以确保当前连接的用户是他试图修改的博客文章的作者:

public class EnsureAuthorOfBlogAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var authorized = base.AuthorizeCore(httpContext);
        if (!authorized)
        {
            return false;
        }

        string blogId = httpContext.Request.RequestContext.RouteData.Values["id"] as string;
        string username = httpContext.User.Identity.Name;
        return IsBlogAuthor(username, blogId);
    }

    private bool IsBlogAuthor(string username, string blogId)
    {
        // TODO: you know what to do here
        throw new NotImplementedException();
    }
}

然后使用此自定义属性修饰控制器操作:

[HttpDelete]
[EnsureAuthorOfBlog]
public ActionResult Delete(int id)
{
    ...
}

和编辑相同:

[HttpPut]
[EnsureAuthorOfBlog]
public ActionResult Update(BlogViewModel blog)
{
    ...
}