通过查询结果阻止访问

时间:2016-05-05 14:26:16

标签: c# asp.net-mvc entity-framework

我有医院和医疗专业。

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

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

我有这样的用户与医院相关联: enter image description here

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

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

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

1 个答案:

答案 0 :(得分:2)

您基本上可以更新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.
}