在 ASP MVC Identity 中,根据条件限制访问的最佳方法是什么?
In ASP MVC Identity, what is the best way to restrict access based on criteria?
我有一个单独的数据库,里面装满了员工,每个员工都有一个唯一的电子邮件地址。我正在创建的网站,员工可以注册一个帐户,如果他们有匹配的电子邮件地址,我希望他们看到他们的联系信息并在可能的情况下进行编辑。
这是我能够用来实现此目的的以下代码。
[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() an object reference is required".
有什么建议吗?
Authorize Attribute 构造函数只接受常量值,您不能为每个用户动态使用它。如果您希望您的特定类型的用户只能访问此方法,请为他们创建一个角色并改用它。
[Authorize(Roles="Admin,SpecialUsers")]
您可以创建一个新属性 class,它应该继承自 Authorize 属性 class。您可以在新属性 class 中传递所需的参数,并通过覆盖 OnAuthorization 方法进行相应播放。
我有一个单独的数据库,里面装满了员工,每个员工都有一个唯一的电子邮件地址。我正在创建的网站,员工可以注册一个帐户,如果他们有匹配的电子邮件地址,我希望他们看到他们的联系信息并在可能的情况下进行编辑。
这是我能够用来实现此目的的以下代码。
[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() an object reference is required".
有什么建议吗?
Authorize Attribute 构造函数只接受常量值,您不能为每个用户动态使用它。如果您希望您的特定类型的用户只能访问此方法,请为他们创建一个角色并改用它。
[Authorize(Roles="Admin,SpecialUsers")]
您可以创建一个新属性 class,它应该继承自 Authorize 属性 class。您可以在新属性 class 中传递所需的参数,并通过覆盖 OnAuthorization 方法进行相应播放。