0

Web アプリケーションを構築しています。ユーザーが管理者としてログインしているときに、フロント エンドの特定の機能を表示できるようにしたいと考えています。

デフォルトのメンバーシップ プロバイダーを使用していますが、ユーザー設定の保存に使用する userFields という拡張テーブルがあります。

このテーブルに UserType フィールドを追加したばかりで、ページでこれをどのように取得するのが最善かを検討しています。

この情報をデータベースから取得して渡すために、各コントローラーメソッドに余分なコードを追加する必要はありません。

asp.netメンバーシップの組み込みのロール設定を使用して、これを行うためのより良い方法はありますか、またはuser.identity.nameが機能するのと同じ方法で、データベースからこの情報を公開できるクールな方法がありますか、または(ユーザー.Identity.Name).ProviderUserKey;

4

2 に答える 2

1

asp.net ロールを使用します。次に、コントローラーで認証属性を使用して、ユーザーが関連するロール セットを持っていることを確認できます。

この質問を参照してください。

これにより、特定のユーザーが特定のアクション/コントローラーにしかアクセスできないという問題が解決されます。

特定の機能だけを「見えるようにする」という問題は解決しません。そのためには、異なるビュー (または部分ビュー) を作成し、コントローラーがロールに基づいてレンダリングするビューを選択するか、ロール固有のロジックをビューに直接書き込む必要があります。

もちろん、ユーザーのフラグを別のテーブルに保存すると、独自のデータに基づいてこれらすべてを実行できます。独自の承認属性 (つまり、承認フィルター) を記述し、独自のデータを使用してビューを駆動します。モデルの他の部分と同様に、それをビュー データの一部としてビューに渡すだけです。

コントローラーを介してデータをビューに渡すためのコードを書きたくないと言いますが、これはコントローラーの目的のようなものであり、コントローラーが存在する理由です。静的メソッド、またはコントローラーをバイパスしてビューから直接 DB にアクセスする何らかのタイプのサービスを作成することもできますが、その場合は Web フォームに戻ることもできます。

于 2010-11-10T00:50:42.147 に答える
1

ユーザー オブジェクトをコンテキストに配置する標準の認証方法を使用している限り、それほど難しくはありません。ビューで、Html.RenderPartial と適切なコントローラーを使用して、このように目的を達成します...

/ホーム/インデックス ビュー:

<div id="menu">
<ul>
<li>Page 1</li>
<li>Page 2</li>
<% Html.RenderPartial("/Home/AdminView"); %>
</ul>
</div>

/ホーム/管理者ビュー:

<li>Admin 1</li>
<li>Admin 2</li>

/共有/空のビュー:

<!--Empty view for non-viewable admin stuff-->

/ホームコントローラー:

public ActionResult AdminView()
{
  //Check if user is admin
  //This should be your own logic... I usually have a few static methods that the 
  //Users or User object has to assist with checking
  if (Models.User.IsAdmin(HttpContext.User.Identity.Name))
  {
    return View();
  }
  else
  {
    return View("Empty");
  }
}

それはうまくいくはずです...それは私のやり方です。それが間違っている場合は、うまくいけば、より賢い誰かがより良い答えを投稿して、私たちが学ぶことができます

編集:

別のことを考えただけです...ユーザーオブジェクトがIPrincipalを実装している場合、それをコンテキストから抽出し、ユーザータイプにキャストして、ユーザークラスに情報を入れることができます...

こんな感じ

class User : IPrincipal
{
  //Implement IPrincipal stuff
  public string Role { get; set; }
}

次に、管理ビューのロジックは次のようになります。

public ActionResult AdminView()
{
  //Check if user is admin
  //This should be your own logic... I usually have a few static methods that the 
  //Users or User object has to assist with checking
  if ( ((Model.User)HttpContext.User).Role =="Admin" )
  {
    return View();
  }
  else
  {
    return View("Empty");
  }
}
于 2010-11-10T01:12:22.220 に答える