User.IsInRole 一个操作失败但另一个操作失败
User.IsInRole fails for one action but not for another
我已将自定义授权属性放入我的 MVC 应用程序中,它
if (!this.Roles.Split(',').Any(filterContext.HttpContext.User.IsInRole))
如果为真,它会将您重定向到未授权。
我把这个属性放在控制器级别的控制器上。
一次操作正常,一次操作未授权。
角色系统是否存在错误或问题?我读过注销和登录可以强制刷新某些缓存或其他内容,但是我使用的系统使用您的域凭据进行身份验证,因此无法注销。
我已经尝试重新启动应用程序池并删除我的会话 cookie,但没有任何效果。
有没有人以前遇到过这个具体问题或者有一些关于可能刷新与之相关的缓存的指导(假设这是一个缓存问题)?
ETA:系统上的另一个用户给了自己控制器所需的角色,这两个操作对他来说都很好。所以也许我的用户不知何故被窃听了。这是在 UAT 上,所以比我本地机器上的 运行 更难调试(工作正常)。
ETA2:我很确定这是一个缓存问题,因为在查询字符串中使用 ?1=1 转到 URL,它可以工作。我无法使缓存无效。这可能是将来给人们分配角色时的问题。
首先,我们需要更多代码才能给您任何明确的答案。然而:
缓存可能是个问题。如果您使用 OutputCache
之类的东西,您应该确保您使用的是 VaryByCustom
并以某种方式在返回的自定义字符串中包含用户 ID 或其他标识标记。
如果您要向用户添加角色,则必须注销用户并重新登录,否则会使他们的授权无效。例如,在 Identity 中,您可以简单地使安全标记无效,这将导致用户重新获得授权,更新自他们登录后已更改的声明或角色等内容。
我已将自定义授权属性放入我的 MVC 应用程序中,它
if (!this.Roles.Split(',').Any(filterContext.HttpContext.User.IsInRole))
如果为真,它会将您重定向到未授权。
我把这个属性放在控制器级别的控制器上。
一次操作正常,一次操作未授权。
角色系统是否存在错误或问题?我读过注销和登录可以强制刷新某些缓存或其他内容,但是我使用的系统使用您的域凭据进行身份验证,因此无法注销。
我已经尝试重新启动应用程序池并删除我的会话 cookie,但没有任何效果。
有没有人以前遇到过这个具体问题或者有一些关于可能刷新与之相关的缓存的指导(假设这是一个缓存问题)?
ETA:系统上的另一个用户给了自己控制器所需的角色,这两个操作对他来说都很好。所以也许我的用户不知何故被窃听了。这是在 UAT 上,所以比我本地机器上的 运行 更难调试(工作正常)。
ETA2:我很确定这是一个缓存问题,因为在查询字符串中使用 ?1=1 转到 URL,它可以工作。我无法使缓存无效。这可能是将来给人们分配角色时的问题。
首先,我们需要更多代码才能给您任何明确的答案。然而:
缓存可能是个问题。如果您使用
OutputCache
之类的东西,您应该确保您使用的是VaryByCustom
并以某种方式在返回的自定义字符串中包含用户 ID 或其他标识标记。如果您要向用户添加角色,则必须注销用户并重新登录,否则会使他们的授权无效。例如,在 Identity 中,您可以简单地使安全标记无效,这将导致用户重新获得授权,更新自他们登录后已更改的声明或角色等内容。