1

ユーザーがサイトに登録してからブログを書くことができる ASP.NET MVC ブログ アプリがあるとします。ここで、ブログ編集ページが blogId を受け取り、ブログに関連する情報を表示するとします。アクション メソッドでは、アクション メソッドによって受信される BlogId が、ログインしたユーザーが作成したものであることをどのように確認できますか? 誰かが URL を変更し、ログインしているユーザーに属していないブログの ID を入力するシナリオが考えられます。これを防ぐ最善の方法は何ですか?

考えられる 1 つのオプションは、アクション メソッドでブログの作成者を取得し、それをログイン ユーザーの ID と照合して、ユーザーがその特定のブログを編集するためのアクセス権を持っていることを確認することです。アクションメソッドでこれを指定するのではなく、ある種のフィルタによってこれを達成できますか?

4

1 に答える 1

2

アクションメソッドでこれを指定するのではなく、ある種のフィルタによってこれを達成できますか?

もちろん。カスタム認証属性を書くことができます:

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

        var user = httpContext.User;

        var rd = httpContext.Request.RequestContext.RouteData;
        var id = rd.Values["postid"] as string;
        if (string.IsNullOrEmpty(id))
        {
            return false;
        }

        return IsOwnerOfBlogPost(user.Identity.Name, id);
    }

    private bool IsOwnerOfPost(string username, string postId)
    {
        // hit your dabatase here and validate if the current user
        // is owner of the blog post
        throw new NotImplementedException();
    }
}

コントローラー アクションを装飾するために使用できます。

[AuthorizeBlogPostOwner]
public ActionResult SomeAction(string postId)
{
    ... if we got that far it means that the current user is owner of the blog post
}
于 2013-09-18T10:55:02.390 に答える