在我的MVC网站上,教师登录并且应该查看他的班级以及他班级中使用的所有书籍。
老师不应该看到其他人上课或预定。
这是我的模特
public class Teacher
{
public int Id { get; set; }
public string Name {get; set;}
}
public class Books
{
public int Id {get; set;}
public string Title {get; set;}
public int CourseId {get; set;}
}
public class Course
{
public int Id {get; set;}
public int Name {get; set;}
public int TeacherId {get; set;}
}
我使用带有UnitOfWork的RepositoryPattern。
为了让所有课程得到展示,我应该在我的控制器中输入这样一行:
var classes = classRepository.All.Where(x => x.TeacherId == currentTeacher.Id)
BookControler的情况会变得更糟,因为我需要检查currentTeacher的所有类:
var classes = classRepository.All.Where(x => x.TeacherId == currentTeacher.Id)
var books = bookRepository.All.Where(x => classes.Contains(y => y.Id == x.CourseId)
在我看来,这种方法可能会导致一些功能性错误。 我想要做的是,当教师登录我的存储库时自动过滤以便仅保留有关当前教师的数据,因此在我的控制器中我会:
var classes = classRepository.All; // Already filtered on currentTeacher
或
var books = bookRepository.All; // Already filtered on currentTeacher
这可能吗?怎么样?
答案 0 :(得分:0)
创建一个新的All(IPrincipal user)
方法,在该方法中传入当前经过身份验证的用户。此All
方法将在对象上下文的教师集合中查找Identity.Name
值,以获取随后返回的ID。
即。 .Where(x => x.TeacherId == currentTeacher.Id)
是此新All
方法的返回值。