0

私たちのサイトには、いくつかの動作の分割を伴う複雑な管理階層があります。ユーザートラフィックを最適に誘導するために、MangersOnly、AdminOnly、NonAdminsという承認フィルターを作成しました。

私はそれらをこのように使用することを想像しました

[MangersOnly]
public ActionResult Index()
{
}


[AdminOnly]
public ActionResult Index()
{
      return redirectoaction("Index", "Admins");
}

[NonAdmins]
public ActionResult Index()
{
      return redirectoaction("Shouldntbehere", "Errors");
}

私が悲しいことに発見したのは、属性が私のアクションメソッドのオーバーロードとして機能しないことでした。

このアーキテクチャは、私たちがしなければならないすべてのロジックチェックを回避するためのものです(これまたはそれが残っている場合は、ここまたはそこにリダイレクトします...)。目標は、authorize属性が失敗しないアクションメソッドにトラフィックを転送することです。

これらのメソッドをオーバーロードして(パラメーターや名前を変更せずに)、ユーザーをチャネルするためのこの甘い(素朴な)アーキテクチャーを維持する方法はありますか?

4

2 に答える 2

1

C#(および私が考えることができる他の言語)では、同一の署名(属性は署名の一部ではありません)を持つ複数のメソッド(MVCかどうか)を持つことはできません。したがって、このアプローチは機能しません。

IndexManager、IndexAdminなどのユーザーの権限に基づいてアンカーリンク(ビュー内)を生成し、通常どおりロールベースのセキュリティを追加するのはどうですか。ここでは名前IndexManagerが意味をなさないので、ユーザーが何をしているのかをもっと考えさせられます。それはアクションのより良い名前ですか?あなただけがこれに答えるためにあなたのドメインを知っています。

または、一般的な機能のためにベースコントローラを使用して、セキュリティレベルの動作ごとに継承します。

また、役割ベースではなく許可ベースのフィルタリングを検討することもできます。http://lostechies.com/derickbailey/2011/05/24/dont-do-role-based-authorization-checks-do-activity-based-checks/を参照してください。

于 2012-12-10T23:14:19.100 に答える
0

アプリケーションの外観と感触がユーザーごとに劇的に異なる場合は、いつでもMVC領域を利用できます。ログインに基づいて、ユーザーを特定の領域に誘導し、すべてのコンテンツアクセスと特定のユーザーグループへの配信を調整するために、この機能を使用したいくつかのアプリケーションを開発しました。

たとえば、ログインが1回のWebサイトがあり、あなたが誰であるか(カスタマーサポートまたは顧客)に応じて、すべて同じDALロジックを使用して情報を取得するさまざまな領域に誘導されますが、コントローラーは情報を取得するためにフィルターをかけることができます。範囲。これにより、マーケティング資料を注文サービスやその他の処理ロジックから簡単に分離することもできました。私はこれらの記事が本当に好きです:

MVC5エリア-http ://www.itorian.com/2013/10/area-in-mvc-5-with-example-step-by-step.html

ログインに基づくリダイレ​​クト-ASP.NETMVC5Identity2ユーザーロールに基づくログインリダイレクト

于 2015-04-03T14:05:58.013 に答える