clarkwinkelmann/flarum-ext-gate-logger

记录所有门控查询以进行调试

0.1.0 2021-10-31 21:44 UTC

This package is auto-updated.

Last update: 2024-08-29 05:56:03 UTC


README

MIT license Latest Stable Version Total Downloads Donate

此扩展将所有对Flarum门控的调用记录到默认的Flarum记录器中,优先级为debug

这意味着所有对User::can()User::cannot()User::assertCan()等的调用。但不是User::hasPermission()

这将创建大量的日志,因此最好只在需要调试时启用此扩展。

没有面向用户的界面。它仅将日志记录到文件中(在storage/logs中,使用默认记录器)。

性能影响将主要与记录器将日志写入磁盘的速度有关。如果您使用的是不写入磁盘的自定义日志驱动程序,性能影响可能可以忽略不计,因为逻辑与原生Flarum相同。

注意事项(不是永久的,仅在扩展启用时)

  • 此扩展完全用自定义的门控类替换了Flarum的门控类,因此随着新的Flarum更新发布,此扩展可能会使Flarum的行为与标准安装不同,或者可能会缺少重要的安全修复!
  • 如果扩展在其策略类中覆盖了AbstractPolicy::checkAbility(),则该方法将永远不会被调用!

日志格式

日志的第一行应该由自动添加的时间和调试级别前缀(这是由记录器库添加的)。

然后第一行将显示门控能力名称,然后是关于操作者(用户名或[Guest])和门控参数(模型类和ID或[GLOBAL]表示全局策略)的信息。

下一行将显示为这些参数解析的每个策略类和方法。在每个策略之后,将显示输出(ALLOWFORCE_ALLOWDENYFORCE_DENY[TRUE][FALSE][NULL])。当策略中存在以能力名称命名的方法并返回非空值时,将跳过策略上的can方法。在这种情况下,输出将显示为SKIPPED

最后一行将显示计算出的决策以及导致该决策的方法。如果策略类返回非空值,则可能是(Criteria Priority: <which criteria stopped was matched first>),如果用户是管理员,则可能是(Admin role),如果能力名称默认为权限键,则可能是(Has permission: key),或者如果没有任何匹配项,则可能是(Default)

如果某些门控调用是嵌套的,它们将按门控返回语句达到的顺序作为单独的条目出现。

以下是一些将创建的日志示例

[YYYY-MM-DD HH:mm:ss] flarum.DEBUG: Gate Logger addToDiscussion(Actor: Admin, Flarum\Tags\Tag: 2)
Flarum\Tags\Access\TagPolicy@addToDiscussion: [TRUE] => ALLOW
Flarum\Tags\Access\TagPolicy@can: SKIPPED
Flarum\Approval\Access\TagPolicy@addToDiscussion: [TRUE] => ALLOW
Decision: ALLOW (Criteria Priority: ALLOW)
[YYYY-MM-DD HH:mm:ss] flarum.DEBUG: Gate Logger administrate(Actor: Admin, [GLOBAL])
Flarum\Tags\Access\GlobalPolicy@can: [NULL]
Decision: ALLOW (Admin role)
[YYYY-MM-DD HH:mm:ss] flarum.DEBUG: Gate Logger clarkwinkelmann-author-change.edit-date(Actor: OneModerator, [GLOBAL])
Flarum\Tags\Access\GlobalPolicy@can: [NULL]
Decision: ALLOW (Has permission clarkwinkelmann-author-change.edit-date)
[YYYY-MM-DD HH:mm:ss] flarum.DEBUG: Gate Logger addToDiscussion(Actor: [Guest], Flarum\Tags\Tag: 1)
Flarum\Tags\Access\TagPolicy@addToDiscussion: [FALSE] => DENY
Flarum\Tags\Access\TagPolicy@can: SKIPPED
Flarum\Approval\Access\TagPolicy@addToDiscussion: [FALSE] => DENY
Decision: DENY (Criteria Priority: DENY)
[YYYY-MM-DD HH:mm:ss] flarum.DEBUG: Gate Logger viewHiddenGroups(Actor: [Guest], [GLOBAL])
Flarum\Tags\Access\GlobalPolicy@can: [NULL]
Decision: DENY (Default)

安装

composer require clarkwinkelmann/flarum-ext-gate-logger

支持

此扩展处于最小维护状态。

它是为客户端开发的,作为开源软件发布,以造福社区。我可能会免费发布简单的错误修复或兼容性更新。

您可以通过联系我赞助更多功能或更新。

通过Flarum社区线程提供“尽力而为”的支持。

链接