私は MVC と EF を初めて使用し、ユーザーとロールの管理に Identity を使用するプロジェクトに取り組んでいます。Visual Studio の事前定義されたログイン関数には、ユーザー名とパスワードでユーザーを取得するために使用される FindAsync という名前の関数があります。私の場合、同じユーザー名とパスワードを持つ複数のユーザーが存在する可能性がありますが、それらは異なる会社に属します。最善のアプローチを知りたいです。FindAsync 関数 (および必要に応じて他の関数) をオーバーライドして別のパラメーターを追加する必要がありますか、または Identity を使用せずにユーザーとロールの管理を自分で実装する必要がありますか? または、別のより良い解決策はありますか?
UserManager のソース コードはまだ公開されていないため、関数をオーバーライドすることが最善の解決策であるとすれば、どうすればよいかわかりません。
以下に、私のモデルからのログイン機能とテイクアウトを示します。
public async Task<ActionResult> Login(Login model, string returnUrl)
{
if (ModelState.IsValid)
{
var user = await UserManager.FindAsync(model.UserName, model.Password);
if (user != null)
{
await SignInAsync(user, model.RememberMe);
return RedirectToLocal(returnUrl);
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
public class Company
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
public virtual ICollection<User> Users { get; set; }
public virtual ICollection<Role> Roles { get; set; }
}
public class User : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
[Required]
public virtual int CompanyId { get; set; }
[Required]
public virtual Company Company { get; set; }
}
どんな助けでも大歓迎です!