在ASP MVC Identity中,根据条件限制访问的最佳方法是什么?

时间:2016-05-20 20:58:50

标签: c# asp.net-mvc asp.net-identity-2

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

以下是我能够用来实现此目的的代码。

    [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()需要一个对象引用”。

有任何建议吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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