Dinâmico ou cláusula Linq
Hoje, atualmente, temos uma declaração como esta:
var Query = (from dp in db.Patients
select dp);
var UserID = User.Identity.GetUserId();
if (User.IsInRole("Administrator"))
{
Query = Query.Where(x => x.AdministratorID == UserID);
}
if (User.IsInRole("Counselor"))
{
Query = Query.Where(x => x.CounselorID == UserID);
}
if (User.IsInRole("Physician"))
{
Query = Query.Where(x => x.PhysicianID == UserID);
}
O problema é que temos usuários que podem ter várias funções. Se um usuário é um conselheiro e um médico, queremos que o sistema recue todos os pacientes em que CounselorID == UserID ou PhysicianID == UserID.
Como isso pode ser feito dinamicamente se não sabemos qual papel o usuário terá quando a página for carregada?
A cláusula .Where atual usa apenas umE declaração precisamos de umOU declaração.
Idealmente, haveria uma solução como esta:
if (User.IsInRole("Administrator"))
{
Query = Query.Where(x => x.AdministratorID == UserID);
}
if (User.IsInRole("Counselor"))
{
Query = Query.WhereOr(x => x.CounselorID == UserID);
}
if (User.IsInRole("Physician"))
{
Query = Query.WhereOr(x => x.PhysicianID == UserID);
}