通过查询结果阻止访问

我有医院和医疗专科。

My Medical Specialties页面以这种方式按医院ID返回数据:

localhost / MedicalSpecialities / 1,1是HospitalID。 如果我手动更改链接,我可以访问任何医院信息。

我有这样的用户与医院相关联: 在此处输入图像描述

我需要查询用户已关联的医院ID,并检查当前的HospitalID是否在列表中。

这将返回用户已连接的所有医院:

var userID = User.Identity.GetUserId(); var result = db.Hospitals.Include("UserHospitals") .Where(x => x.UserHospitals .Any(u => u.Id == userID)) .ToList(); 

您基本上可以更新Any()方法中的条件,以包含对HospitalId列的检查。

 var hospitalId =5; var result = db.Hospitals .Include(y=>y.UserHospitals) .Where(x => x.UserHospitals.Any(u => u.Id == userID && u.HospitalID==hospitalId )) .ToList(); 

如果您期望这种情况只有一家医院,您也可以考虑使用FirstOrDefault()方法。

 var singleHospital = db.Hospitals .Include(y=>y.UserHospitals) .Where(x => x.UserHospitals.Any(u => u.Id == userID && u.HospitalID==hospitalId )) .FirstOrDefault(); if(singleHospital!=null) { //Safely use it. }