我正在为我的.NET Core应用程序实现安全特性,但发现自己不断重复相同的条件逻辑。 有没有一种方法可以在一个地方进行概括,并将其应用于我想要的部分? 我记得使用委托或Func来处理这种情况,但我不太确定... 有什么想法吗?
以下是我尝试编写一次并在多个地方应用的代码。
var currentUser = _httpContext.HttpContext.Session.GetCurrentUser<SessionContext>();
if(currentUser.Roles.Any())
{
// ex query here. This could be any piece of code
var q = from u in _dbContext.Users
join d in _dbContext.Users on u.DoctorId equals d.Id into ud
from docU in ud.DefaultIfEmpty()
select new
{
User = u,
Doctor = docU
};
if(!currentUser.Roles.Contains("Administrator"))
{
if(currentUser.Roles.Contains("Doctor"))
{
//do something here
//ex.
q = q.Where(x => (x.Doctor != null ? x.Doctor.Id == currentUserId : false));
}
else if (currentUser.Roles.Contains("Patient"))
{
//do something else here
//ex.
q = q.Where(x => x.User.Id == currentUserId);
}
}
}
else
throw new Exception("No roles applied to logged in user");
[Authorize(Roles = "Doctor", "Patient")]
的授权属性。 - ejwill