MVCで単純な「hello world」をコンセプトとして作成しました。インデックスビューリストには、一般的な「編集」、「詳細」、「削除」アクションリンクが続くレコードがあります。ASP.NET MVCで直接URLを使用できないようにする
ただし、レコードを所有するADグループによっては、これらのオプションの一部をレンダリングしません。たとえば、私が5レコードを引っ張っているとしたら、私はそのうちの1つのみを所有するGroup \ Roleのメンバーです。ようになり、私のインデックスページ...
名前価格
FOO1 $ 10.00詳細
foo2は$ 20.00詳細
Foo3 $ 30.00詳細|編集|このすべてが素晴らしい作品
Foo4 $ 40.00詳細
Foo5 $ 50.00詳細
Foo6 $ 60.00詳細
を削除します。問題は、ユーザーとして、/ Home/Edit/Foo1のURLを入力するだけで、私が所有していないレコードへの編集アクセスが可能になるということです。
最初の検索では、ChildActionOnly属性と呼ばれるものを実装するはずです。私が何を読んでから、それは
[ChildActionOnly]
public ActionResult Edit(string id)
{
return View(GetItem(id));
}
が、それは私が私のURLを変更し、そこに到達することができません..私のコントローラに設定された場合のように聞こえます。しかし、その属性を追加する瞬間、アクションリンクはもはや機能しません。
@Html.ActionLink("Edit", "Edit", new { id = item.FooName })
私はちょうど何かが足りないと知っています。私はすでに認証を実装しています。あなたが正しい役割に属していない限り、そのコントローラへのすべてのアクセスを既にブロックしています。しかし、一度アクセスすれば...何かを変更するアクセス権があるわけではありません。文書によると
ChildActionOnlyは私の問題の適切な修正ですか?それは私がすべてのビューをPartialViewsに変更する必要があるようにそれを使用するように見えます。かなりのURLの問題を解決するために劇的に見えます。しかし、私は知らない。それが私が求めている理由だ。 –
アクションフィルタを作成して、そのアクションにアクセスするための権限をユーザーが持つことを確認できます。 1つのアクションごと、クラスごと、またはグローバルフィルタとして登録することができます – Nkosi
ありがとうございます。私はこれを調べます。私はMVCが初めてです。 [ChildActionOnly]を使用しようとしているのと同じように、私自身のフィルタを作成して使用できるように思えます。私はそれをどうやって行うのか、どのレコードを混乱させようとしているのかを判断しなければならないと思う。 (Idが設定される前にフィルタが適用されていないので、 –