我是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