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.'
感謝を!