2011-01-07 14 views
0

私はWebFormsから来る相対MVCのnoobです。私はいくつかの例外を除いてMVCをかなりよく把握していると思います。パターンが壊れている可能性があります。私はこれを短くしようとしているので、私が求めていることの大部分は比較的明らかであると仮定しています。MVC2ルーティングとセキュリティ:パラメータを安全に渡す方法は?

私は記事があるニュースサイトを持っているとします。その場合、mynewssite.com/Articles/123の形式のURLは、どの記事を閲覧するか気にしないのでうまく機能します。ユーザーは、URL内のArticleIDを必要なものに変更して、その記事をプルアップできます。私の場合、私は、ユーザーがそれらに属しているデータエンティティ(記事など)を表示/編集できるようにしたいだけです。これを達成するために、私はUserID(GUID)をデータベース内の外部キーとして使用し、選択するためのデータのリストを表示しています。ここで問題が発生します... Url.Action( "Edit"、New with {.id = item.id})によって作成されたリンクをクリックしたとき(HTMLコンテンツを追加する必要があるためActionLinkを使用していませんリンク内で)、IDはクエリ文字列のパラメータとして表示されます。私はそれのためのルートを追加することができますが、IDはまだ彼らが改ざんするためにURLに表示されます。明白な意味は、URLを改ざんすることによって、彼らが望む任意のエンティティを表示/編集できることです。

私には何が欠けていますか? パラメータをURLに追加せずにパラメータを渡す方法はありますか?私はそれらをページ上のフォームに入れてフォームを提出できることを知っていますが、これは私の例では扱いにくいようですが、私はこのアイデアと矛盾する場所でjQuery.ajaxを使用しています。 Editメソッドのデータに対してUserIDをチェックすることもできますが、面倒なようです。

この質問は広すぎますか?何が必要なのか教えてください。ありがとう。

答えて

0

Winformsであっても、ユーザーが所有する記事のみをフィルタリングするために、各要求に特別なロジックを追加する必要があります。なぜMVCが違うのか分からない。もちろん、web.configを使用して、指定したURLへのアクセスを拒否できますが、表示するデータのパラメータをとる単一のページを使用する場合は使用できません。

おそらくデータベースレベルでこれをフィルタリングすることです。ユーザーIDを含むwhere句を追加すると、アプリは「レコードが見つかりません」というエラーを返し、必要な処理を実行できます。

0

forms authenticationを使用できます。このようにして、ユーザーが改ざんできないユーザー名を含む暗号化されたクッキーが認証されます。次に、現在接続されているユーザーがこの記事を編集する権限を持っているかどうかを確認できます。

+0

ご返信ありがとうございます。私はフォーム認証を使用しています。私はちょうど私がすべての要求でこのデータのための許可を持っているかどうかを確認する必要があると思うべきではないと思う。たぶん私はWebFormsに慣れているので、私はちょうど(FAで)フォルダを保護し、それを使ってやることができます。私の主な質問は、このタイプの状況でパラメータを渡すMVCベスト/標準的な方法は何ですか。私は正しい方法でMVCを使用していることを確認したい。 –

関連する問題