C# 在ASP MVC Identity中,基于标准限制访问的最佳方法是什么?

C# 在ASP MVC Identity中,基于标准限制访问的最佳方法是什么?,c#,asp.net-mvc,asp.net-identity-2,C#,Asp.net Mvc,Asp.net Identity 2,我有一个单独的员工数据库,每个人都有一个唯一的电子邮件地址。我正在创建的网站,员工可以注册一个帐户,如果他们有匹配的电子邮件地址,我希望他们看到他们的联系信息,并在可能的情况下进行编辑 下面是我能够用来实现这一点的代码 [AllowAnonymous] // GET: Contacts/Details/ public ActionResult Details(int? id) { if (id == null) {

我有一个单独的员工数据库,每个人都有一个唯一的电子邮件地址。我正在创建的网站,员工可以注册一个帐户,如果他们有匹配的电子邮件地址,我希望他们看到他们的联系信息,并在可能的情况下进行编辑

下面是我能够用来实现这一点的代码

    [AllowAnonymous] 
    // GET: Contacts/Details/
    public ActionResult Details(int? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Contact contact = db.Contacts.Find(id);
        if(User.IsInRole("Admin")||(User.Identity.GetUserName()==contact.Email))
        {
            return View(contact);
        }

        if (contact == null)
        {
            return HttpNotFound();
        }

        return RedirectToAction("AccessDenied","Error");

    }
理想情况下,我希望删除
[AllowAnonymous]
,并使用类似

[Authorize(Roles="Admin",Users=User.Identity.GetUserName())] 
但这引出了一个错误:

“User.Identity.GetUserName()需要对象引用”


有什么建议吗?

授权属性构造函数只接受常量值,不能为每个用户动态使用它。如果希望特定类型的用户只能访问此方法,请为他们创建一个角色,然后改用它

[Authorize(Roles="Admin,SpecialUsers")] 

您可以创建一个新的属性类,它应该继承自Authorizate属性类。您可以在新的属性类中传递所需的参数,并通过重写授权方法进行相应的播放。

使用
Users=User.Identity.GetUserName()
您试图实现什么?编辑:哦,我现在明白了。您可以创建一个操作筛选器。这是一个相当轻松的过程。你如何创造索赔?您是否使用ASP.Net MVC附带的默认ASP.Net标识码?