2013-03-29 139 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