Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 自定义MVC授权是如何工作的?_Asp.net Mvc_Authorization_Authorize Attribute - Fatal编程技术网

Asp.net mvc 自定义MVC授权是如何工作的?

Asp.net mvc 自定义MVC授权是如何工作的?,asp.net-mvc,authorization,authorize-attribute,Asp.net Mvc,Authorization,Authorize Attribute,当我们扩展Authorize属性时,我在理解MVC中授权是如何工作的方面遇到了一些问题 因此,在代码中,我们扩展了authorized属性,如下所示: [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)] public class AuthExtendAttribute : AuthorizeAttribute filters.Add(

当我们扩展Authorize属性时,我在理解MVC中授权是如何工作的方面遇到了一些问题

因此,在代码中,我们扩展了authorized属性,如下所示:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public class AuthExtendAttribute : AuthorizeAttribute
filters.Add(new AuthExtendAttribute());
[Authorize]
public bool DoStuff()
然后,我们将扩展添加到全局筛选器列表中,如下所示:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public class AuthExtendAttribute : AuthorizeAttribute
filters.Add(new AuthExtendAttribute());
[Authorize]
public bool DoStuff()
然后,操作方法使用Authorize属性修饰,如下所示:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = true)]
public class AuthExtendAttribute : AuthorizeAttribute
filters.Add(new AuthExtendAttribute());
[Authorize]
public bool DoStuff()
我的问题是,这个新扩展是否将替换[Authorize]属性的默认行为,或者框架是否仍将使用默认行为,然后在AuthExtendAttribute中调用重写的方法

另外,如果我可以简单地用[AuthExtend]装饰我的操作方法,为什么我需要将扩展添加到全局筛选器列表中

对于较新的MVC应用程序,我们不应该扩展Authorize属性,而是应该使用新的基于策略的授权,这也是事实吗

  • 否,默认行为将保持不变,未经授权的请求将重定向到登录

  • 为了在整个应用程序中使用该属性,您需要注册过滤器,这就是将其添加到全局过滤器列表时发生的情况

  • 不确定这个问题是否有一个excat答案,IMO应该根据您的要求而不是规则做出决定。根据我的经验,即使基于声明/角色的授权简化了系统具有不同角色时的工作,以及对应用程序某些部分的基于角色的访问。但在单个或少数用户的情况下,使用自定义授权总是很快

  • 否,默认行为将保持不变,未经授权的请求将重定向到登录

  • 为了在整个应用程序中使用该属性,您需要注册过滤器,这就是将其添加到全局过滤器列表时发生的情况

  • 不确定这个问题是否有一个excat答案,IMO应该根据您的要求而不是规则做出决定。根据我的经验,即使基于声明/角色的授权简化了系统具有不同角色时的工作,以及对应用程序某些部分的基于角色的访问。但在单个或少数用户的情况下,使用自定义授权总是很快


  • 您有两个独立的操作过滤器。通过将新过滤器注册为全局过滤器,您只需使其可用于应用程序中的所有操作

    使用原始设置,两个过滤器都将执行。如果要控制它们的执行顺序,可以查看顺序和范围属性;更多信息请点击此处:

    另外,如果我可以简单地用[AuthExtend]装饰我的操作方法,为什么我需要将扩展添加到全局过滤器列表中

    这取决于你想做什么。您的全局筛选器将对所有操作执行。通常,您只会使用扩展属性,我不明白为什么您会同时使用这两个属性。 不确定自定义筛选器是如何实现的,身份验证是如何设置的,但在全局注册筛选器后,用户将如何登录(因为他们需要获得访问登录页面的授权)

    我认为最好是使用自定义过滤器,并根据需要将其添加到控制器和/或操作的顶部

    对于较新的MVC应用程序,我们不应该扩展Authorize属性,而是应该使用新的基于策略的授权,这也是事实吗


    我不认为基于策略的授权和创建自定义操作过滤器是相互排斥的

    您有两个独立的操作过滤器。通过将新过滤器注册为全局过滤器,您只需使其可用于应用程序中的所有操作

    使用原始设置,两个过滤器都将执行。如果要控制它们的执行顺序,可以查看顺序和范围属性;更多信息请点击此处:

    另外,如果我可以简单地用[AuthExtend]装饰我的操作方法,为什么我需要将扩展添加到全局过滤器列表中

    这取决于你想做什么。您的全局筛选器将对所有操作执行。通常,您只会使用扩展属性,我不明白为什么您会同时使用这两个属性。 不确定自定义筛选器是如何实现的,身份验证是如何设置的,但在全局注册筛选器后,用户将如何登录(因为他们需要获得访问登录页面的授权)

    我认为最好是使用自定义过滤器,并根据需要将其添加到控制器和/或操作的顶部

    对于较新的MVC应用程序,我们不应该扩展Authorize属性,而是应该使用新的基于策略的授权,这也是事实吗

    我不认为基于策略的授权和创建自定义操作过滤器是相互排斥的