2017-05-26 13 views
1

Entity Frameworkを使用したASP.NET MVC5プロジェクトがあります。私は人々(Pajtasクラス)をグループにしています(すべてのグループには一意の番号があります)。ユーザは、そのユーザの情報を編集することができますが、そのユーザがそのグループに属する権限を持っている場合に限ります。Entity Framework(ASP.NET MVC)のSystem.NotSupportedException

すべてのユーザーにはIfiAdatlapオブジェクトがあり、IfiAdatlapオブジェクトには番号付きグループのアクセス許可が付与されています。だから私は、単純なpermisisonクラスを持っている:

 public class CsoportHozzaferes 
     { 
      [Required] 
      [Key] 
      [Column(Order = 1)] 
      public int Csoport { get; set; } 
      [Required] 
      [Key] 
      [Column(Order = 2)] 
      public virtual IfiAdatlap IfiAdatlap { get; set; } 
     } 

私のコントローラでは、私は、現在のユーザーのIfiAdatlapオブジェクトは、情報利用者が編集したい人がいるグループに権限を持っていることを確認するための機能を持っています。まず、現在のユーザーのApplicationUserオブジェクト(user)を取得します。グループのリスト(csoportok)を取得しようとするよりも、そのユーザーのグループ番号(pajtas.Csoport)がこのリストに含まれているかどうかを確認する権限があります。ない。

private void PajtasHozzaferesCheck(Pajtas pajtas) 
     { 
      var userName = User.Identity.Name; 
      var user = db.Users.FirstOrDefault(x => x.UserName == userName); 
      var csoportok = db.CsoportHozzaferesek.Where(h => h.IfiAdatlap != null && h.IfiAdatlap == user.Adatlap).Select(csh => csh.Csoport).ToList(); 
      if (!(pajtas.Csoport != null && csoportok.Contains((int)pajtas.Csoport))) 
      { 
       var tanfolyamok = db.TanfolyamHozzaferesek.Where(h => h.IfiAdatlap != null && h.IfiAdatlap == user.Adatlap).Select(tfh => tfh.Tanfolyam).ToList(); 
       var tfosztalyok = db.TanfolyamHozzaferesek.Where(h => h.IfiAdatlap != null && h.IfiAdatlap == user.Adatlap).Select(tfh => tfh.Osztaly).ToList(); 
       if (!(pajtas.TanfolyamOsztaly != null && pajtas.TanfolyamSorszam != null && tanfolyamok.Contains((int)pajtas.TanfolyamSorszam) && tfosztalyok.Contains((TanfolyamOsztaly)pajtas.TanfolyamOsztaly) && tanfolyamok.IndexOf((int)pajtas.TanfolyamSorszam) == tfosztalyok.IndexOf((TanfolyamOsztaly)pajtas.TanfolyamOsztaly))) 
       { 
        var tanfvez = db.TanfolyamvezetesHozzaferesek.Where(h => h.IfiAdatlap != null && h.IfiAdatlap == user.Adatlap).Select(tfvh => tfvh.Tanfolyam).ToList(); 
        if (!(pajtas.TanfolyamSorszam != null && tanfvez.Contains((int)pajtas.TanfolyamSorszam))) 
        { 
         if (!(User.IsInRole("Nevelo") || User.IsInRole("Admin"))) 
         { 
          //nincs jogosultság 
          throw new HttpException((int)System.Net.HttpStatusCode.Forbidden, "Hozzáférés megtagadva"); 
         } 
        } 
       } 
      } 
     } 

しかし、私はラインvar csoportok = ...で例外を取得:任意の助け

System.NotSupportedException: 'Unable to create a constant value of type 'Ifi.Models.Adatlap'. Only primitive types or enumeration types are supported in this context.' 

感謝を!

答えて

2

私はAdaplapではなくインスタンスを比較したIDを使用して条件、例えばentity.Changeであると推定:

.Where(h => h.IfiAdatlap != null && h.IfiAdatlap.Id == user.Adatlap.Id) 
2

問題がh.IfiAdatlap == user.Adatlapです。これは複雑なタイプなので、EFは比較方法を知らないため、受け入れられません。 h.IfiAdatlap.Id == user.Adatlap.IdのようなIDを比較する必要があります。

関連する問題