2

私の MVC3 アプリは、ユーザーがログオンするための 3 つの方法を提供します

  1. メール + エイリアス
  2. OpenID プロバイダー
  3. ユーザー名 + パスワード

最初の 2 つは、アカウントを持たない訪問者向けで、コメントや投票を行うことができます。最後は、昇格された権限を持つ db ユーザー アカウントを持つ作成者と管理者用です。したがって、2 つのログオン フォームがあります。1 つはビジター用で、もう 1 つはフル ユーザー用です。

認証されていない/許可されていないリソースへのアクセス試行は、標準でログイン ページにリダイレクトされます。

質問:

  1. これらのリクエストを条件付きで適切なものにリダイレクトするにはどうすればよいですか? フル ユーザー ログオン フォームに対して作成者/管理者権限を必要とするリソースと、訪問者ログオン フォームに対して訪問者権限のみを必要とするリソースは?

  2. また、AJAX または部分的なビュー呼び出しの場合にリダイレクトを回避することはできますか? たとえば、コメントの部分ビューをエントリ ビューに埋め込みたいと思います。認証されていない場合は、リダイレクトせずに、そこに訪問者のログオンを埋め込むだけです。

更新: 2 つの Atuhorize 属性を維持したくありません。

4

1 に答える 1

1

1- から継承し[AuthorizeAttribute]、目的の Unauthorized ページにルーティングするように実装をカスタマイズできます。

選択した awnser は次の質問です: ASP.NET MVC で無許可のコントローラーをリダイレクトする

2- ajax 呼び出し (つまり、$.Get(url)または$("#somediv").Load(url)) からパーシャルをロードしている場合は、によって呼び出されるアクションurlがカスタム で適切に装飾されていることを確認してください[AuthorizeAttribute]

それ以外の場合は、ユーザーが認証されているかどうかを確認するために、剃刀ビューにいくつかのロジックが必要になります。の線に沿った何か

  @if (User.Identity.IsAuthenticated)
  {
      // Normal case
  }
  else
  {
      @Html.Partial("Login")
  }

ログイン部分が目的のログイン ビューを表示する場所。

アップデート

シナリオごとに 1 つずつ、2 つの異なる属性を実装できます。

[AttributeUsage( AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false )]
public class IsUserAdminAttribute : CustomAuthorizedBaseAttribute
{
    // Custom logic to redirect to admin logon partial/view
    ...
}

[AttributeUsage( AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false )]
public class IsAuthenticatedAttribute : CustomAuthorizedBaseAttribute
{
    // Custom logic to redirect to basic/comment logon partial/view
    ...
}

[AttributeUsage( AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false )]
public abstract class CustomAuthorizedBaseAttribute : AuthorizeAttirbute
{
    // Shared custom logic implementation
    ...
}

また、シナリオに応じて、どちらか一方を使用してコントローラー アクションを装飾することもできます。

于 2011-12-19T22:48:02.647 に答える