Asp.net mvc User.IsInRole对一个操作失败,但对另一个操作失败

Asp.net mvc User.IsInRole对一个操作失败,但对另一个操作失败,asp.net-mvc,asp.net-mvc-4,authorization,authorize-attribute,Asp.net Mvc,Asp.net Mvc 4,Authorization,Authorize Attribute,我在MVC应用程序中加入了一个自定义的authorize属性 if(!this.Roles.Split(',').Any(filterContext.HttpContext.User.IsInRole)) 如果是真的,它会将您重定向到未经授权的 我将此属性放在控制器级别的控制器上 一次行动很好,一次行动我就未经授权 角色系统中是否存在一些错误或问题?我已经读到登出和登入可以强制一些缓存刷新或其他东西,但是我使用的系统会对您的域凭据进行身份验证,因此无法登出 我尝试重新启动应用程序池并删除我的会话

我在MVC应用程序中加入了一个自定义的authorize属性

if(!this.Roles.Split(',').Any(filterContext.HttpContext.User.IsInRole))

如果是真的,它会将您重定向到未经授权的

我将此属性放在控制器级别的控制器上

一次行动很好,一次行动我就未经授权

角色系统中是否存在一些错误或问题?我已经读到登出和登入可以强制一些缓存刷新或其他东西,但是我使用的系统会对您的域凭据进行身份验证,因此无法登出

我尝试重新启动应用程序池并删除我的会话cookie,但没有任何效果

以前是否有人遇到过此特定问题,或者对刷新与其相关的任何缓存(假设是缓存问题)有一些指导

ETA:系统上的另一个用户为自己指定了控制器所需的角色,这两个操作对他来说都很好。所以也许我的用户不知怎么被窃听了。这是在UAT上进行的,所以调试起来比在我的本地机器上运行(运行良好)稍微困难一些


ETA2:我很确定这是一个缓存问题,因为在查询字符串中使用?1=1访问URL时,它是有效的。但我无法使缓存无效。这在将来为人员分配角色时可能是一个问题。

首先,我们需要更多的代码,然后才能给您任何明确的答案。然而:

  • 缓存可能是个问题。如果您使用的是类似于
    OutputCache
    ,则应确保您使用的是
    VaryByCustom
    ,并以某种方式在返回的自定义字符串中包含用户id或其他标识标记

  • 如果要向用户添加角色,则必须注销用户并重新登录,否则必须使其授权无效。例如,在Identity中,您可以简单地使安全戳无效,这将导致用户重新授权,更新自用户登录后已更改的声明或角色等内容

  • 相当确定的是(2),它只是根据安全令牌缓存URL。我不能发布更多的代码,因为这都是MVC角色系统的内部代码。我认为我需要找到一种方法,使用户失效并重新验证,以修复此问题。我很想知道它在哪里存储这个缓存,因为使应用程序池无效并不能清除它。进入遗留代码我去。。。