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 访问。我还有其他部分,例如用于编辑项目 /Item/Index/1 的菜单,它显示该用户的所有项目等。我的代码可以为用户过滤和填充这些页面。然而,到目前为止,我还没有实现任何身份验证。我想通过 ApplicationServices 使用内置的身份验证工具,并且以前使用过角色:

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

但是,我想将页面限制为登录的特定用户?即 /User/Profile/1 应该只能由该用户等访问,而不是他们所服务的角色。

有谁知道如何做到这一点?我知道这可能意味着将帐户控制器和用户控制器捆绑在一起,不太确定如何做到这一点,以便一切工作都一样?由于应用程序基本完成,非常简单,但只需要身份验证。

4

2 回答 2

2

只需在操作方法的顶部做一个简单的检查,如果不是当前用户,则执行重定向。

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

    return View();
}

如果你经常使用它,你可以将它重构为一个方法。

于 2013-03-29T16:40:20.150 回答
1

第二个选项是甚至不将用户 ID 传递给控制器​​/操作方法,只需获取登录用户的 ID 并从那里获取信息。

[Authorize]
public ActionResult Profile()
{
    return View(profileService.GetUserProfile(CurrentUser.Id));
}
于 2013-03-29T16:43:22.260 回答