- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我当前的项目是使用 ASP.Net MVC 构建的内部 Web 应用程序,我正在向其中添加身份验证。我有一个预构建的 HTTPModule,它创建了一个具有适当角色的 IPrincipal。如果用户未通过身份验证,我将获得一个角色为“Public”的用户对象
因为这是一个内部应用程序,所以大部分页面都是私有(private)的,只有“管理员”角色才能查看。因为我有一个基本 Controller ,所以我可以这样做:
[Authorize(Roles="Admin")]
public abstract class MyControllerBase : Controller
{
...
}
我有一个问题,因为有些操作可以在公共(public)网站上查看,如果我这样归因于它们:
[Authorize(Roles="Public")]
public class LoginController : MyController
{
public ActionResult Index()
{
}
}
由于用户未通过身份验证,页面无法加载。看起来“公共(public)在继承类上被忽略的角色。有谁知道角色是否可以被继承类覆盖?
我也试图避免将所有 Controller 归因于 Roles="Admin"
谢谢,基思。
最佳答案
您可以从 AuthorizeAttribute 派生一个新属性并覆盖 OnAuthorization 方法,然后应用您的自定义属性而不是 Authorize。下面是我的自定义属性之一的 OnAuthorization 方法,如果权限不足,它会重定向到错误页面,而不是重定向到登录页面。
不过,我不确定这能给您带来什么。当你用属性装饰你的类时,大概你必须允许 Admin 和 Public (所以你限制谁,因为 Public 是任何没有经过身份验证的人?)。然后,您必须装饰每个需要单独限制为 Admin 的 Controller 方法,因为 class 属性将允许访问,否则。您可以通过仅装饰那些非公开可用的方法(或没有公开可用方法的类)来使用常规 Authorize 属性实现此行为。
我想您可以让您的属性检查以查看被调用的方法是否也用属性修饰并简单地批准授权,这将有效地将授权推迟到方法级别。您可能必须查看 AuthorizationContext 上的 RouteData 以获取操作并使用反射尝试根据参数和请求类型找到合适的方法。
public override void OnAuthorization( AuthorizationContext filterContext )
{
if (filterContext == null)
{
throw new ArgumentNullException( "filterContext" );
}
if (AuthorizeCore( filterContext.HttpContext ))
{
SetCachePolicy( filterContext );
}
else if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
// auth failed, redirect to login page
filterContext.Result = new HttpUnauthorizedResult();
}
else
{
ViewDataDictionary viewData = new ViewDataDictionary();
viewData.Add( "Message", "You do not have sufficient privileges for this operation." );
filterContext.Result = new ViewResult { MasterName = this.MasterName, ViewName = this.ViewName, ViewData = viewData };
}
}
protected void SetCachePolicy( AuthorizationContext filterContext )
{
// ** IMPORTANT **
// Since we're performing authorization at the action level, the authorization code runs
// after the output caching module. In the worst case this could allow an authorized user
// to cause the page to be cached, then an unauthorized user would later be served the
// cached page. We work around this by telling proxies not to cache the sensitive page,
// then we hook our custom authorization code into the caching mechanism so that we have
// the final say on whether a page should be served from the cache.
HttpCachePolicyBase cachePolicy = filterContext.HttpContext.Response.Cache;
cachePolicy.SetProxyMaxAge( new TimeSpan( 0 ) );
cachePolicy.AddValidationCallback( CacheValidateHandler, null /* data */);
}
关于c# - ASP.Net MVC : Can the AuthorizeAttribute be overriden?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/532773/
这是我的 CustomAuthorizeAttribute 类: public class CustomAuthorizeAttribute : AuthorizeAttribute {
TL;博士 :当 IdentityServer3 将表单发布到始终是根 url 的返回 url 时,MVC 应用程序如何知道在通过身份验证过程后重定向到某个操作? 此问题中的示例取自 Identity
在我们的 MVC 解决方案中,我们有两个 AuthorizeAttribute 的自定义实现 - 一个名为 BasicHttpAuthorizeAttribute 并已在生产中使用多年,另一个 Rol
我的应用程序中有一个自定义的 AuthorizeAttribute,它接受一个输入参数 bool UserIsOnline。此参数用于增加一个表字段,该字段包含有关上次用户交互时间的信息,即对于在后台
我有一个 ApiController 类,其中有 10 个公共(public)方法。 在这 10 个方法中,有 9 个需要 [Authorize(Roles="Admin")]。不需要的,不需要任何授
我目前正在尝试根据用户角色在新的 ASP MVC 5 应用程序中实现安全性。目标是防止用户在没有特定角色(或更高级别)的情况下访问某些 Controller 或 Controller 方法。根据到目前
我正忙着为我的名为 MyAuthorizeAttribute 的操作方法编写自己的自定义属性,我还在忙着编写代码,这是我的部分代码: [AttributeUsage(AttributeTargets.
我创建了一个自定义 AuthorizeAttribute 类来处理我的 MVC4 应用程序中的精细授权。 这是类: [AttributeUsage(AttributeTargets.Method, A
我已经从 AuthorizeAttribute 实现了 RoleAuthorize 类 public sealed class RoleAuthorize : AuthorizeAttribute {
我正在使用 MVC3/4。但这只是授权中的一般问题。 我有一个角色在数据库中名为“Trip Leader”,其中包含一个空格。 我尝试了 [Authorize(Roles="'Trip Leader'
我们想授权用户,如果他们被授权,我们想将他们的角色和权限添加到用户并将其添加到 IPrinciple 我们有两种方法可以做到这一点,一种是在 global.asax Application_Authe
我一直在互联网上寻找为什么我的自定义 AuthorizeAttribute 在我的 MVC WebApi 中不起作用。我看到有人在 SO 上问过这种事情,但还没有帮助我解决我的问题: [Attrib
我想使用标准的 AuthorizeAttribute(即不继承它)但使用自定义重定向。那可能吗?我应该在哪里检查 401 并重定向? 我试过添加 但它没有用。 最佳答案 在我的 A
在 Windows 域内网站点(使用 )上工作时,我遇到了以下问题: [Authorize(Roles = "Domain Users, Domain Admins")] public class
我有一个像这样的自定义 AuthorizeAttribute public class DevMode : AuthorizationFilterAttribute { public over
我试图阻止特定角色(比如 RoleA)中的特定用户访问特定操作。允许匿名用户访问,但不允许 RoleA 中的用户访问该操作。 所以我做了这样的事情: [AllowAnonymous] [CustomA
如果我做了more than one API调用同时出现错误 A second operation started on this context before a previous asynchro
我有一个自定义的 RequireHttpsAttribute 和一个自定义的 AuthorizeAttribute,我在 FilterConfig 中应用它们以确保所有 Controller 都使用
在我的 MVC 5 应用程序中,我按如下方式装饰我的 Controller : [Authorize] public class Controller { .. 但是,我的一个要求是使用 toke
我已经研究了一段时间,现在试图弄清楚如何在我的 View 中使用我的自定义 AuthorizeAttribute 类来显示和隐藏链接。我正在从 IsInRole 过渡到自定义 AuthorizeAtt
我是一名优秀的程序员,十分优秀!