【发布时间】:2013-05-12 17:16:43
【问题描述】:
我是 MVC 新手,正在为移动应用程序构建 Web api。我正在使用 asp.net web api 和实体框架。
我已经阅读了很多关于 web api 的身份验证和授权的内容。我不清楚的部分是如何根据谁试图访问该属性来防止访问实体的特定属性。
例如假设我的模型有一个书签实体 - 该实体如下所示:
public class Bookmark
{
public long ID { get; set; }
public User Owner { get; set; }
public Boolean IsPublic { get; set; }
}
public class User
{
public string UserID { get; set; }
public DateTime DateJoined { get; set; }
public string Address {get;set;}
public virtual ICollection<Bookmark> Bookmarks { get; set; }
}
我有两个问题。
1) 虽然任何人都应该能够访问 ../mysite/username/bookmarks,但如果是另一个人请求另一个人的书签,那么我只会返回公共书签。这个逻辑应该在哪里?我相信,这个业务逻辑应该在模型中。那么我应该创建另一组像 DTO 这样的类来处理这个业务逻辑吗?我还没有看到任何将此类方法添加到实体框架类本身的示例。
2) 我注意到,当我从一个书签控制器返回一组书签时,因为 Bookmark 中有一个用户属性,它还返回用户的属性——包括我不想分享的信息——比如地址。
我不确定如何(通过在响应之前将属性清空或将它们分配给不同的 DTO)以及我应该在哪里处理这种情况(在特定于用例或控制器的 DTO 中添加方法)。
提前致谢。
【问题讨论】:
-
对于第二个问题,您可以将用户对象设置为虚拟。这会启用延迟加载,因此除非您直接访问它们,否则不应拉取属性。
标签: entity-framework asp.net-mvc-4