问题标签 [authorize-attribute]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - ASP.NET MVC:如何在 C# 中使用反射查找具有 [Authorize] 属性的控制器?(或如何构建动态站点。主菜单?)
也许我应该在深入探讨标题问题之前备份并扩大范围......
我目前正在用 ASP.NET MVC 1.0 编写一个 Web 应用程序(尽管我的 PC 上确实安装了 MVC 2.0,所以我并不完全限于 1.0)——我已经开始使用标准 MVC 项目,它有你的基本的“欢迎使用 ASP.NET MVC”,并在右上角显示 [Home] 选项卡和 [About] 选项卡。很标准,对吧?
我添加了 4 个新的控制器类,我们称它们为“天文学家”、“生物学家”、“化学家”和“物理学家”。附加到每个新控制器类的是 [Authorize] 属性。
例如,对于 BiologistController.cs
这些 [Authorize] 标签自然会根据角色限制哪些用户可以访问不同的控制器,但我想根据用户所属的角色在我的网站顶部的 Site.Master 页面中动态构建一个菜单。例如,如果“JoeUser”是角色“Astronomer”和“Physicist”的成员,导航菜单会显示:
[首页] [天文学家] [物理学家] [关于]
当然,它不会列出指向“生物学家”或“化学家”控制器索引页面的链接。
或者,如果“JohnAdmin”是角色“Admin”的成员,所有 4 个控制器的链接将显示在导航栏中。
好吧,你明白了……现在是真正的问题……
从这个 StackOverflow 主题关于在 ASP.NET 中构建动态菜单的答案开始,我试图了解如何完全实现这一点。(我是新手,需要更多指导,所以请和我一起裸露。)
答案建议扩展 Controller 类(称为“ExtController”),然后让每个新的 WhatController 从 ExtController 继承。
我的结论是,我需要在这个 ExtController 构造函数中使用反射来确定哪些类和方法具有附加到它们的 [Authorize] 属性来确定角色。然后使用静态字典,将角色和控制器/方法存储在键值对中。
我想象它是这样的:
这是可行的吗?如果是这样,我如何在 ExtController 构造函数中执行反射以发现 [Authorize] 属性和相关角色(如果有)
还!随意超出此问题的范围,并提出解决此“Dynamic Site.Master Menu based on Roles”问题的替代方法。我是第一个承认这可能不是最好的方法的人。
编辑
经过大量阅读和实验,我想出了自己的解决方案。我的答案见下文。欢迎任何建设性的反馈/批评!
linq - 使用 LINQ 和反射:如何在我的程序集中查询所有具有 [Authorize] 属性的类?
目前,我正在尝试使用反射和 LINQ 确定我的程序集中的哪些“控制器”类具有与它们关联的 [Authorize] 属性。
这段代码几乎可以工作。
如果我逐步跟踪 LINQ 语句,我可以看到,当我“鼠标悬停”时,我在 LINQ 语句中定义的“attribs”范围变量填充了单个属性,并且该属性恰好是 AuthorizeAttribute 类型. 它看起来像这样:
显然,我的 LINQ 语句中的这一行是错误的:
我应该在那里写什么来检测“attribs”是否包含 AuthorizeAttribute 类型?
c# - 如果当前用户不是 [Authorize] 要求的角色,我可以自动重定向他们吗?
在我正在构建的 ASP.NET MVC 站点中,我有一些方法,使用它们的用户必须处于某个角色(碰巧,如果他们不是,则意味着他们已从站点中暂停) . 为此,我使用该[Authorize(Roles="RoleName")]
属性没有任何困难。
但是,我不太明白没有通过该[Authorize]
检查的用户会发生什么?他们展示了什么?
如果他们尝试使用这些方法,我想将暂停的用户重定向到不同的操作。现在,我一直在使用一个空白[Authorize]
属性(没有指定任何角色),然后在操作代码中检查用户是否是角色的一部分。
我的方法对我来说就像一种代码味道。如果他们没有通过[Authorize]
检查,是否可以指定向用户显示什么(或将他们重定向到哪里)?
.net - 授权过滤器与操作过滤器
我在我的应用程序中使用 .NET mvc2。我想要对我的操作进行一些自定义授权。我用谷歌搜索了一下,似乎有两种选择。
- 在自定义操作过滤器中实现 onActionExecuting 中的逻辑,请参阅这篇文章
- 子类 authorizeattribute 或实现 Iauthorization 接口并将我的逻辑放在那里
我的问题是哪种技术更可取,以及使用每种技术的优缺点
编辑:此外,我可以在我的基本控制器中覆盖 onActionExecuting 和 onAuthorization ,这让我可以直接访问控制器变量。
security - 使用 ActionFilterAttribute/AuthorizeAttribute 隐藏/显示内容
我正在将 MVC 2 与期货一起使用,并且我正在尝试根据角色隐藏/显示内容。如果身份验证未能通过属性全部显示控制器子操作,是否有使用 ActionFilterAttribute 或 AuthorizeAttribute 的方法?或者我对这些属性所能做的就是重定向或抛出错误消息?如果身份验证失败,我只需要子操作基本上不返回任何内容。
asp.net-mvc - 获取 ASP.NET MVC 中当前操作/控制器的自定义属性列表
查看http://lukesampson.com/post/471548689/entering-and-exiting-https-with-asp-net-mvc为 ASP.NET MVC2 编写的示例代码,我注意到他们可以检查自定义属性是否为通过分别访问filterContext.ActionDescriptor
和应用于当前动作或控制器filterContext.ActionDescriptor.ControllerDescriptor
:
检查自定义属性的动作和控制器的 ASP.NET MVC 1 方法是什么?在 ASP.NET MVC 1 中filterContext.ActionDescriptor
,我无法判断。
asp.net-mvc - ASP.NET MVC Beta Authorize 属性将我发送到错误的操作
今天我开始玩 MVC 3 Beta。从默认 MVC 3 模板中的应用程序开始,在 Home 控制器中添加了一个新操作,如下所示(带有视图)
现在,当我尝试导航到 Secured 操作时,我收到 404 page not found 错误。
这是我的 web.config 中的身份验证部分。
如果我理解正确,Authorize 属性应该会导致 401 未经授权的 HTTP 响应,该响应应该被身份验证处理程序拦截并将我重定向到 loginUrl。这应该导致帐户/登录操作。
我的 MVC 2 应用程序按预期工作,并将我带到 Account/LogOn 操作,我错过了什么吗?还是这是 MVC 3 beta 中的错误?
jquery - 当授权失败时,返回部分视图的控制器操作会插入登录页面
我有一个使用 jQuery 从控制器操作加载部分视图的视图。控制器操作由 Authorize 属性修饰,如果用户在调用该操作时超时,而不是被重定向到正确的 LogOn 页面,则 LogOn 页面将插入到局部视图所在的视图中。
这里有另一篇文章描述了一个使用 jQuery 的解决方案,但不幸的是它不包含我需要的任何代码示例,因为我对 jQuery 不是很熟悉(并且是 Web 开发的新手),我需要解决这个问题我会尽快。
我想做的就是将用户重定向到正确的登录页面,这对我来说听起来很直接,但到目前为止似乎还没有。如果 jQuery 是要走的路,有人可以发布一个代码示例,那真的会帮助我。
谢谢。
.net - 是否存在与.net 的标准 Web 表单(不是 MVC)等效的授权属性
我正在开发一个将使用 Windows 角色提供程序的项目,并且我想将功能限制在某些 AD 组中。
使用 MVC,我可以使用AuthorizeAttribute
上面的操作方法并相应地重定向。对于不使用 MVC 的标准 Web 表单应用程序(.NET 3.5),我可以做类似的事情吗?
c# - 有没有办法让 AuthorizeAttribute 响应状态码 403 Forbidden 而不是重定向?
如果用户未登录并且他们请求标记为 的操作[Authorize]
,则响应是重定向到 Account/LogOn 操作(状态代码 302 Found)。
有没有办法让响应变成状态码 403 Forbidden 呢?