用户实体中包含了密码等一些私密的数据,但是每次使用EF查询都会全部返回,大家认为有没有必要屏蔽这些私密数据,又该如何屏蔽。
举个例子:
public class User
{
[Key]
public string UserName{get;set;}
[Required]
public string Password{get;set;}
public int Age {get;set;}
}
利用EF的code first设计了一个如上的User实体,包含密码。当用户通过网站的“注册”功能创建用户的时候,业务逻辑会封装一个包含了用户名和密码的User实例,并调用EF的DbSet<User>.Add(user)方法将这个新用户加入到数据库中。这个时候密码是必须的。
但是,网站上还有个功能是“显示活跃用户”,这会调用EF的DbContext.Set<User>()方法获取用户并筛选, 返回的User就会包含这个用户的所有数据(密码等)。而此时密码是不必要的,返回了密码可能会加大安全隐患。
大家是如何设计的呢? 或者EF有没有什么办法可以使一个Field对某些行为可读,而对某些行为不可读?
------解决方案--------------------------------------------------------
public string Password{private get;set;}
------解决方案--------------------------------------------------------
如果你的项目不涉及外包,没必要考虑这个问题。如果有外包方面的需要,那就很有必要了。
EF做这个我觉得还是比较麻烦的,但总算不失为一种方案。
我的办法是,再增加一层,让外包团队没办法直接访问你的EF生成的增,删,改,查这些操作。
DbSet<User>.Add(user)
DbContext.Set<User>()
将这些全部屏蔽掉,改为user.Add()这种,当然中间你想给出什么样的数据,也就可以控制了。