2016-05-08 42 views
1

MVC5プロジェクトでは、管理者がコントロールパネルでレッスンを作成し、レッスンがデータベースに保存されます(現時点では2レッスンのみです)。一方、これらのレッスンでは、CanCreateMathHomework、CanCreateChemistryHomeworkの役割をいくつか作成して、関連レッスンの教師だけがASP.NET IDを使用して関連レッスンの宿題を公開できるようにします。これまではすべてが完璧に機能し、教師はレッスンの宿題を公開することができます。ASP.NET IDを持つカスタム認証属性

LessonController:

[Authorize(Roles = "CanCreateMathHomework")] 
public ActionResult CreateMathHw() 
{ 
    //code omitted for brevity 
} 


[Authorize(Roles = "CanCreateChemistryHomework")] 
public ActionResult CreateChemistryHw() 
{ 
    //code omitted for brevity 
} 

しかし、私は、データベースまたはの新しいアクションに新しいロールを作成せずに自分の宿題を公開する新しく作成されたレッスンの先生を聞かせて柔軟な許可メカニズムを作成したいですコントローラー私がしたいことは:

1)管理者は、レッスンの新しいレッスンと教師を作成し続け、これまでと同じようにデータベースに保存します。

2)管理者は、新しく作成されたレッスンの教師に許可を与え、他の教師としてレッスンのhwを公開できるようにします。

3)コントローラに新しいアクションメソッドを作成する必要はなく、ソフトウェア開発者を必要とせずにすべてを実行する必要があります。

どのようにですか?出来ますか?もしそうなら、これを実行するためにグローバルロールとアクションメソッドを使用できますか?私は本当に非常に混乱しており、どんな助けにも感謝します。ありがとう。

答えて

1

残念ながら、Authorizeはあなたが記述している方法では機能しません。

しかし、aspnetアイデンティティデータベースでは、ユーザ、ロール、その他の面白い認証情報のテーブルを作成することができるので、これらのaspnetテーブルと "xhomework"テーブルの間の結合を作成するだけです。ロール/ユーザーを他の表の項目にリンクします。

それから(詳細はこちらをご覧ください:https://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute(v=vs.118).aspx)を既存の承認属性やその両親のいずれかから派生させて新しい属性を作成することができます。これは、あなたの「フィルタ」を与えるだろう...

をOnAuthorizationをオーバーライドして、独自のセキュリティ条件を拒否できるようにアクションが実行される前にリクエストに適用されます(https://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.onauthorization(v=vs.118).aspx#M:System.Web.Mvc.AuthorizeAttribute.OnAuthorization(System.Web.Mvc.AuthorizationContext)参照)

...そこから、新しい結合テーブルを管理するためのUIが必要です。

+0

ありがとうございました。投票+ –

+0

あなたの問題の解決に役立つ場合は、これをあなたの質問に対する回答としてください。 – War

+0

はい、そうです。しかし、私の問題は解決されておらず、それが答えとしてマークしていない理由です。ごめんなさい :( –

関連する問題