2011-01-13 8 views
0

ここに私の問題があります: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を得るのですか?

答えて

2

参照:

Asp.net mvc authorize attribute integrated with a parameterが本当にこれらの事にピックアップしていない関連検索をがっかり...

+0

は、私が読んだ – Stefanvds

+0

:)にもがっかり、と私はこれは私が必要なものだと思います。今はコントローラーではなく、自分のActionで単一モジュールのIDを取得します。私はそれが正しい場合は、私はこの属性を使用するすべてのコントローラでは、モジュールのIDを返すコンストラクタを作成する必要があります。 – Stefanvds

+0

私はURLのIDを必要とするため、これを動作させることはできません – Stefanvds

関連する問題