ここに私の問題があります:MVC:パラメータを取るカスタム[AuthorizeAttribute]を作成しますか?
私は自分の役割で1部の権限を与えています。
[Authorize(Roles = "Admin,...")]
public class ModulesController : Controller {
.....
}
モジュールコントローラには、ユーザーが適切なモジュールのリストが表示されます。 (たくさんのモジュールがありますが、ユーザーはそのモジュールの一部にしか接続されていません)。質問のような、モジュールに結合された物の負荷があります。
例:モジュールコントローラの詳細ビュー。
public ActionResult Details(int id) {
var mod = (from p in _db.Modules
where p.Mod_ID == id
select p).First();
return accessible(mod);
}
[NonAction]
public ActionResult accessible(Module p) {
if (MvcApplication.accessible(HttpContext.User, p.Mod_ID)) {
return View(p);
}
ViewData["delError"] = "Not Accessible";
return View("Error");
}
このコードでは、このユーザーが詳細を要求した指定されたモジュールに結合されているかどうかを確認します。
私はいつも私のビューでModule
を返すとは限りませんので、これは大量のオーバーロードメソッドがあり、質問のようなモジュールのサブページについてもチェックする必要があるため、その人がアクセスしているモジュールの質問を見ていること。
これは、モジュールからIDを取得し、特定のモジュールへのアクセスを許可または拒否するauthorize属性で行いたいと思います。私の問題は、ユーザーが質問を見ることを要求したとき、私はモジュールIDをいくつかのコードで把握する必要があるということです。モジュールIDがurlにあることもありますが、必ずしもそうではありません。
どうすればいいですか?その属性を試してみると良いでしょうか?または私はこれを違う方法で行う必要がありますか?
編集:
私は答えで提案されているものをしようとしているが、どのように私は、コントローラのコンストラクタで(IDなど)routedataを得るのですか?
は、私が読んだ – Stefanvds
:)にもがっかり、と私はこれは私が必要なものだと思います。今はコントローラーではなく、自分のActionで単一モジュールのIDを取得します。私はそれが正しい場合は、私はこの属性を使用するすべてのコントローラでは、モジュールのIDを返すコンストラクタを作成する必要があります。 – Stefanvds
私はURLのIDを必要とするため、これを動作させることはできません – Stefanvds