私は最初のASP.NET MVC 3アプリケーションにフォーム認証を使用しています。そのため、サイトにログインするためのdbo.aspnet_Usersテーブルと、管理するdbo.aspnet_Rolesテーブルとdbo.aspnet_UsersInRolesテーブルがあります役割と役割の割り当て。ユーザーテーブルIDとsqlmembershipprovider
DBはSQL Serverです。
さらに私はこのようなレイアウトに何か持っている私のアプリケーションのデータベース内のユーザーテーブルを持っている:ユーザーID PKは、外部キーとユーザーのリストなど、様々な他のテーブルに使用されて
UserID (PK, int, not null)
Name (varchar(50), not null)
Phone (varchar(45), null)
Location (varchar(45), null)
を、例えば、特定の場所から取得したものは、ウェブサイトのページにドロップダウンリストなどで取得して表示されます。
私は、ページにログオンするときに、ユーザー固有のリスト私の最新のレシピが作成されましたが、ドロップダウンリストから自分自身を選択してUserIDを取得することができましたが、私は自分のログオンに結びつけたいですD.
私はこれについて非常に良い解決策を持っているのか分かりません。私が持っていた一つのアイデアは、
UserGUID(PK, uniqueidentifier, not null)
UserID(PK, int, not null)
して、GUIDを取得するような何か(かまだわからない)、aspnet_Usersテーブル内のGUIDに自分のアプリケーションのユーザーテーブルから自分のアプリケーションのデータベース・マッピングのユーザーIDでのルックアップテーブルを作成することでしたそれを見て、関連付けられたUserIDを使用して、自分がどのユーザーであるかを知ることができます。私はそれが理にかなったことを願う
誰もが同様の状況に直面しましたか?これをどうやって解決しますか?
更新:
私の現在のアプローチは、自分のアプリケーションのユーザーテーブルにUserGUID列(UNIQUEIDENTIFIER)を加えることを含む、その後、私はそうのようになりますBaseControllerを作成しました:
public abstract class BaseController : Controller
{
public Guid UserGuid { get; set; }
public int UserID { get; set; }
protected BaseController()
{
try
{
UserGuid = (Guid)Membership.GetUser().ProviderUserKey;
var db = new IceCreamEntities();
UserID = db.Users.Where(m => m.UserGUID == UserGuid).First().UserID;
}
catch (NullReferenceException)
{
UserGuid = Guid.Empty;
UserID = 0;
}
}
}
私はさまざまなコントローラーをControllerではなくBaseControllerを継承しているので、ベースのコンストラクターの一部としてその機能を利用できます。そして、私はこれを行うことができますユーザーIDとフィールドに入力する必要が私のコントローラのアクションで:
[HttpPost]
public ActionResult Create(IceCreamFlavorViewModel viewmodel)
{
...
flavor.CreatedBy = this.UserID;
...
}
これまでOK動作しているようですが、私はまだ他の人がこの問題を解決する方法に興味があります。
おかげで見て、私はそれらを見てみましょう。 – itsmatt
あなたは大歓迎ですitsmatt –