gpt4 book ai didi

c# - 在 asp.net web api 应用程序中自定义 System.Web.Http.AuthorizeAttribute

转载 作者:可可西里 更新时间:2023-11-01 17:01:04 24 4
gpt4 key购买 nike

我想像这样自定义 System.Web.Http.AuthorizeAttribute 类:

 public class MyAuthorizeAttribute : System.Web.Http.AuthorizeAttribute
{

public PermissionsEnum IsPermitted { get; set; }


protected override bool IsAuthorized(HttpActionContext actionContext)
{
if (System.Web.HttpContext.Current.Session["Role"] == null) return false;
string rol = (string)System.Web.HttpContext.Current.Session["Role"];

if (rol == "Admin" || Roles == "Super Admin") IsPermitted = PermissionsEnum.Administration;
else IsPermitted = PermissionsEnum.Collaboration;
return base.IsAuthorized(actionContext);
}
}

[Flags]
public enum PermissionsEnum
{
Administration,
Collaboration
}

我在 Controller 中使用它:

[MyAuthorizeAttribute(IsPermitted = PermissionsEnum.Administration)]
public class PointageController : Controller
{
public ActionResult GraphesEtStatistiques()
{
return View();
}
[MyAuthorizeAttribute(IsPermitted = PermissionsEnum.Administration)]
public ActionResult Pointage()
{
return View();
}
public ActionResult Parametrage()
{
return View();
}
public ActionResult GetMessages()
{
MessagesRepository _messageRepository = new MessagesRepository();
return PartialView("_MessagesList", _messageRepository.GetAllMessages());
}
}

我的问题是我什至可以访问 Pointage View IsPermitted=PermissionsEnum.Collaboration !!!! .

所以:

  1. 这个问题的原因是什么?
  2. 我该如何解决?

最佳答案

  1. What is the reason of this problem?

您的问题是您的 IsAuthorize 方法中的逻辑不正确。

  1. How can I fix it?

...设置断点并调试您的 IsAuthorized 方法。

从您提供的代码来看,根据其当前的结构方式,IsPermitted 属性是多余的。您在装饰 Controller 时将其传递到属性中,但随后在 IsAuthorized 方法中,您对注入(inject)的值不做任何操作。相反,您可以独立设置它。然后你调用基本 AuthorizeAttributeIsAuthorized 方法,基本属性没有你的枚举的概念。

我不确定这是否会解决您的 domain 需求,但这至少会为您提供一个功能性的 IsAuthorized 方法,您可以从中构建:

protected override bool IsAuthorized(HttpActionContext actionContext)
{
if (System.Web.HttpContext.Current.Session["Role"] == null) return false;
string role = (string)System.Web.HttpContext.Current.Session["Role"];

if ((role == "Admin" || role == "Super Admin") //recycling your condition
&& IsPermitted == PermissionsEnum.Administration) return true;

if ((role == "Collaborator"
&& IsPermitted == PermissionsEnum.Collaborator) return true;

return false;
}

关于c# - 在 asp.net web api 应用程序中自定义 System.Web.Http.AuthorizeAttribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35271881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com