我如何在 Glimpse 中 "enabled in a read only capacity"?

How do I "enabled in a read only capacity" in Glimpse?

我希望能够查看用户会话以进行调试。我正在尝试按照位于 here 的“历史记录”选项卡的设置说明进行操作。我不清楚我是如何启用只读功能的 glimpse,我的 google-fu 让我失望了。有人能指出我正确的方向吗?

来自文档:

Next, you will want to flag their "session" as having Glimpse enabled in a read only capacity (meaning Glimpse will collect the information but they can't view it). Typically this is done by setting a flag on their (perhaps in the user table or another like mechanism) and having a Custom Runtime Policy look for that flag.

让我先开始解释下面的意思

a read only capacity (meaning Glimpse will collect the information but they can't view it)

Glimpse 有一堆 IRuntimePolicy 开箱即用的实现,还有更多第三方或定制的实现。

那些 IRuntimePolicy 实现决定了 Glimpse 在监控请求方面应该走多远,甚至根据某些自定义逻辑完全忽略其中的部分或全部请求。 Glimpse 在运行时对所有这些 IRuntimePolicy 实现调用 RuntimePolicy Execute(IRuntimePolicyContext policyContext) 方法。

然后每个 IRuntimePolicy 将 return 一个 RuntimePolicy 指示 Glimpse 是否应继续监视请求甚至完全停止监视。

如果您查看 RuntimePolicy 值,您会发现它是一个标志枚举,其中每个值的限制都比前一个值少(ExecuteResourceOnly 值除外,它是一个特例)。

在您的情况下,您希望监视、收集和保存有关应用程序用户发出的请求的数据,这样他们就不会在页面底部看到他们也不需要的 Glimpse Client 标记 自己。如果您查看 RuntimePolicy 而不是值 PersistResults 是您希望分配用户请求的上限值,同时请记住 Off 值可能仍然是有效值一个或多个请求。

现在的问题是:如何在没有用户交互的情况下实现这一目标?

在正常情况下,您会设置 Glimpse Control cookie,它将满足开箱即用的 Glimpse ControlCookiePolicy。如果您 运行 在生产环境中,那么很可能您有一个额外的 IRuntimePolicy 确保只允许管理员或超级用户设置该 cookie,否则任何人都可以设置该 cookie(控制 cookie不用于授权)并获取一些敏感数据。

也就是说,您现在需要一个额外的 IRuntimePolicy 来检查给定的请求是否有资格被监视,但同时表明数据应该只被持久化而不是 returned作为响应的一部分。然后,此检查应基于标识您要监视的 session 的内容,如上面文档摘录中所述。因此,如果您要为用户分配一个 DebugMySession 角色,那么您可以拥有这样的策略:

public RuntimePolicy Execute(IRuntimePolicyContext policyContext)
{
    var httpContext = policyContext.GetHttpContext();
    if (httpContext.User.IsInRole("DebugMySession"))
    {
        return RuntimePolicy.PersistResults; 
    }

    return RuntimePolicy.On;
}

请记住,returning RuntimePolicy.On 并不意味着它会启用,它只意味着此政策与最终结果无关紧要 IRuntimePolicy 实施已被处理。该策略只想确保如果已分配该角色,则最终结果的限制永远不会低于 PersistResults.

应用以上内容还意味着您必须在配置中禁用 ControlCookiePolicy,否则 ControlCookiePolicy 将 return RuntimePolicy.Off 因为 cookie 不会那里。

这同样适用于您的管理员或超级用户检查。因此,一个更好的主意可能是将 admin/super 用户角色检查与上面的调试角色检查结合起来,这样你就有了一个策略 returning 正确的 RuntimePolicy 值。