ユーザーが私のWebサイトにログインするためにMVC5 Identity 2.0を使用しています。認証の詳細はSQLデータベースに保存されています。Asp.net Identityは、多くのオンラインチュートリアルで見られるように、標準的な方法で実装されています。
IdentityModelsのApplicationUserクラスが拡張され、整数のOrganizationIdなどのカスタムプロパティが含まれるようになりました。多くのユーザーを作成して、データベース関係の目的で共通の組織に割り当てることができます。
public class ApplicationUser : IdentityUser
{
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
//Extended Properties
public DateTime? BirthDate { get; set; }
public long? OrganizationId { get; set; }
//Key Mappings
[ForeignKey("OrganizationId")]
public virtual Organization Organization { get; set; }
}
現在ログインしているユーザーのOrganizationIdプロパティをコントローラー内から取得するにはどうすればよいですか?これは、ユーザーがログインするとメソッドを介して利用できますか、それとも、コントローラーメソッドが実行されるたびに、UserIdに基づいてデータベースから常にOrganizationIdを取得しますか?
私が見たウェブで周りを読んで、ログインしたUserIdなどを取得するために以下を使用する必要があります。
using Microsoft.AspNet.Identity;
...
User.Identity.GetUserId();
ただし、OrganizationIdはUser.Identityで使用できるプロパティではありません。User.Identityを拡張して、OrganizationIdプロパティを含める必要がありますか?もしそうなら、私はこれについてどうやって行くのですか?
私がOrganizationIdを頻繁に必要とする理由は、多くのテーブルクエリが、ログインしたユーザーに関連付けられている組織に関連するデータを取得するためにOrganizationIdに依存しているためです。