我是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)我注意到,当我从书签返回一组书签时,我们会说bookmarkController,因为书签中有一个User属性,它还返回用户的属性 - 包括我不想分享的信息 - 比如地址。
我不知道如何(通过在响应或将它们分配给不同的DTO之前将属性置为无效)以及我应该在哪里处理这些场景(在用于特定于用户或控制器的DTO中添加方法)。
在此先感谢。
对于第二个问题,您可以将用户对象设置为虚拟。这样可以延迟加载,因此除非直接访问属性,否则不应拖动属性。 – DSlagle 2013-05-11 19:18:47