关于一个网站(基于EF 和 MVC3)用户实体的一个疑问

stg609 2012-09-16 10:07:39
用户实体中包含了密码等一些私密的数据,但是每次使用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对某些行为可读,而对某些行为不可读?
...全文
154 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
stg609 2012-09-26
  • 打赏
  • 举报
回复
最后我是把Get设成了private, 然后通过expression tree来获取private的值
lei00529 2012-09-21
  • 打赏
  • 举报
回复
如果你的项目不涉及外包,没必要考虑这个问题。如果有外包方面的需要,那就很有必要了。
EF做这个我觉得还是比较麻烦的,但总算不失为一种方案。
我的办法是,再增加一层,让外包团队没办法直接访问你的EF生成的增,删,改,查这些操作。
DbSet<User>.Add(user)
DbContext.Set<User>()
将这些全部屏蔽掉,改为user.Add()这种,当然中间你想给出什么样的数据,也就可以控制了。
threenewbee 2012-09-16
  • 打赏
  • 举报
回复
一般来说用户登录不需要获得密码,只要把用户输入的密码代入比较就可以了。
stg609 2012-09-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

public string Password{private get;set;}
[/Quote]

设置成private的话,用户登录,会不会也拿不出密码呢?登录业务上需要去比较输入的密码和数据库中的密码是否一致,如果是private, 应该会取不到吧
threenewbee 2012-09-16
  • 打赏
  • 举报
回复
public string Password{private get;set;}

13,190

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 分析与设计
社区管理员
  • 分析与设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧