2013-03-29 183 views
2

已經找不到任何相關的東西了。用戶認證

我必須在這一點上用C#在MVC中構建一個很酷的web應用程序。我創建了一個用戶模型

public class User 
{ 

    // Must be named EntityNameId, must have primary key! 
    public int UserId { get; set; } 

    [DisplayName("First Name")] 
    public string firstName { get; set; } 
    [DisplayName("Last Name")] 
    public string lastName { get; set; } 
    [DisplayName("Cell Number")] 
    public string cellNumber { get; set; } 

} 

正因爲如此已經設計爲每個用戶

/User/Profile/1 

通過其ID訪問的配置文件/儀表板。我也有其他部分,如菜單編輯項目/項目/索引/ 1,其中顯示該用戶的所有項目等我的代碼工程等過濾和填充這些頁面只爲用戶。但是到目前爲止我還沒有實現任何認證。我想用通過ApplicationServices內置的認證工具,並已與角色之前完成:

<Authorize(Roles:="Manager,Administrator")> 

但是我想限制的頁面登錄的誰特定的用戶?即/ User/Profile/1應該只能被該用戶訪問等。而不是他們所服務的角色。

有沒有人知道如何做到這一點?我知道這可能意味着將帳戶控制器和用戶控制器綁在一起,不太確定如何做到這一點,以便一切工作相同?由於應用程序基本完成,很簡單,但只需要驗證。

回答

2

只要在操作方法的頂部做一個簡單的檢查,如果它不是當前用戶,執行重定向。

public ActionResult Profile(int id) 
{ 
    if (CurrentUser.Id != id) 
    { 
     return RedirectToAction("Index"); 
    } 

    return View(); 
} 

如果你使用它很多,你可以重構它到一個方法。

+0

MVC ApplicationServices提供的內置身份驗證是否有'id'字段? – NickP

+0

@NickP如果我的內存服務正確,我認爲它有'UserID' – mattytommo

1

輔助選項是甚至不會將用戶標識傳遞給控制器​​/操作方法,只需獲取登錄用戶的標識並從那裏獲取信息即可。

[Authorize] 
public ActionResult Profile() 
{ 
    return View(profileService.GetUserProfile(CurrentUser.Id)); 
} 
+0

建議將我的用戶模型與ApplicationServices中創建的用戶模型結合起來?因爲想要用戶創建兩者?還是有更簡單的方法來加入這兩者? – NickP

+0

我不太清楚你在問什麼......上面的僞代碼示例僅僅是爲了證明你不必將Id作爲參數傳遞 - 你可以檢索數據,但是你現在可以。 – Tommy

+0

瞭解它的純粹僞。我發現CurrentUser.Id是在AccountModel中找到的一個字段,但不在我現有的用戶模型中。有沒有辦法將兩者結合起來,而不必移動我現有的控制器和veiws等? – NickP