2017-03-08 81 views
1

我是一名MVC新手,並試圖構建一個簡單的Web應用程序,用戶可以在其中註冊和登錄(已經完成了MVC的身份示例)並創建了一些對象(用於例如,做一個列表中的項目),除非他們另有說明,否則基本上與他們綁定。ASP .Net MVC用戶的所有權和授權

基本上,如果沒有另行說明,一個待辦事項不能被其他用戶看到或編輯。

我試圖完成的第一步是僅使用用戶的項目填充列表。

有人可以請指出我在正確的方向嗎?

回答

1

使用ASP.NET Identity,它會處理您的任何註冊和用戶管理,甚至可以根據您的需要定義rolesclaims。現在讓我們假設你有一個像下面這樣的模型,並且你想要確保實體是由一個已定義的用戶構建的,那麼你將UserId作爲外鍵包含在你的模型中,例如:

public class CustomModel 
{ 
    public Guid Id { get; set; } 
    public string ObjectExample { get; set; } 
    public string ObjectExample2 { get; set; } 
    //FK to user 
    public string UserId { get; set; } 
} 

任何時候你想獲得userid的值,你可以調用身份的方法來獲取用戶標識象下面這樣:

User.Identity.GetUserId() 

希望這給你一個想法。

UPDATE

比方說,你想第一組數據插入到你的數據庫,它必須由用戶來定義。那麼你必須填寫你的模型,如下所示:

var entity = new CustomModel 
{ 
    Id = Guid.NewGuid(), 
    ObjectExample = "string", 
    ObjectExample2 = "secString", 
    UserId = User.Identity.GetUserId() //Identity Lib will provide this method for you 
}; 
using(MyDbContext context = new MyDbContext()) 
{ 
    context.CustomModel.Add(entity); 
} 
+0

非常感謝,這幫助我走上正軌!只是一個快速的後續問題:當我創建一個對象時,如何自動將我的userId設置爲它? – mwentosana

+0

@Iris您是先使用實體​​框架代碼還是先使用數據庫? – Valkyrie

+0

我首先使用實體​​框架代碼。 – mwentosana

2

在我看來,它更多的是一個應用程序邏輯,而不是授權。實現它的最簡單方法是查詢當前登錄用戶創建的項目,以便顯示這些項目或對其進行編輯。

授權不是關於顯示特定的用戶內容(這是個性化),而是基於關於用戶的信息和一組預定義的授權規則,允許/限制用戶訪問特定頁面或在門戶上執行特定操作。下面是幾個例子:

  1. 只有具有管理員的用戶才能看到/編輯一些內容(基於角色授權)
  2. 允許訪問那些年長的是18歲的用戶(要求基於授權)
  3. 只有來自特定地理位置的用戶(再次聲明)

正如您從示例中看到的,授權不太適合從數據庫中獲取行(如您的情況)。

經驗法則可能試圖標記具有授權屬性的操作或頁面。所以如果你想做「個性化授權」,你將不得不爲每個用戶創建行動/頁面,這不是你想要做的事情嗎?

+0

很好解釋。 – Valkyrie

+0

謝謝,我絕對需要在授權和相關事宜上更多地告知我自己! – mwentosana