2017-02-05 15 views
0

私は完全な.Netコアアプリケーションをユーザーで作成し、実稼働環境に認証する方法を学ぶ方法として、いくつかの静的IPアドレスを管理する簡単なアプリを開発しています。.Netコアのコントローラで認証されたユーザーデータ

私は、Identity Framework CoreとEntity Framework Coreを含むVisual Studio 2015の.Net Core Webアプリケーションテンプレートを使い始めました。私は次のモデルを構築し、そこからCRUDページでコントローラを生成しました。そのすべてが素晴らしい作品です。

これまでのところ、私は組み込みコードを使用して問題なくログイン/登録/ログアウトなどを行うことができます。私はこのデータをユーザ固有のものにしたいので、ユーザAは自分のアドレスを取得し、ユーザBは自分のアドレスを取得します。これは、アイデンティティ・フレームワーク・テーブルへの何らかの外部キーを必要とするため、ユーザーまでIPアドレスを照合して表示することができます。私は.Net Coreでこれを処理する最善の方法は何だろうと思っていましたか?私は.Net Coreに固有の例を見つけることができませんでした。

モデル:コントローラの

public class IpAddress 
{ 
    [Key] 
    public int id { get; set; } 

    [Required] 
    [MaxLength(255)] 
    public string hostname { get; set; } 

    [MinLength(9)] 
    [MaxLength(21)] 
    public string ipv4 { get; set; } 

    [MaxLength(45)] 
    public string ipv6 { get; set; } 

    [Required] 
    public bool vm { get; set; } 

    [Required] 
    public bool container { get; set; } 

    [Required] 
    public bool docker { get; set; } 

    [Required] 
    public string operating_system { get; set; } 

    [Required] 
    public string description { get; set; } 
} 

最初の部分(インデックスと詳細ルート):

[Authorize] 
public class IpAddressesController : Controller 
{ 
    private readonly IpAddressContext _context; 

    public IpAddressesController(IpAddressContext context) 
    { 
     _context = context;  
    } 

    // GET: IpAddresses 
    public async Task<IActionResult> Index() 
    { 
     return View(await _context.IpAddresses.ToListAsync()); 
    } 

    // GET: IpAddresses/Details/5 
    public async Task<IActionResult> Details(int? id) 
    { 
     if (id == null) 
     { 
      return NotFound(); 
     } 

     var ipAddress = await _context.IpAddresses.SingleOrDefaultAsync(m => m.id == id); 
     if (ipAddress == null) 
     { 
      return NotFound(); 
     } 

     return View(ipAddress); 
    } 
... 

だから、私はそれがへの外部キーを追加するのと同じくらい簡単だろうと仮定し、言ったようにモデルを作成し、その外部キーに基づいたLinqクエリを使用してコントローラ内のデータを取得します。私はLinqにはあまりよくないので、それを助けてくれれば幸いです。それが助けになるならば、私は確かにより多くのコードを提供することができます。

答えて

0

あなたは正しいです。あなたは(userテーブルにあなたをリンクする)あなたのIPアドレステーブルに外部キーを追加する必要があります。

[ForeignKey("ApplicationUser"), Column("Id")] 
public int UserId { get; set; } 

その後、あなたはそれからのことができるようになります

[ForeignKey("UserId")] 
public virtual IpAddress IpAddress{ get; set; } 

に一致するようにAspNetUsersテーブルに情報を追加しますLINQを使用してユーザーのIPアドレス情報を取得します。

_context.IpAddresses.SingleOrDefaultAsync(m => m.UserId == userIid); 
関連する問題