clarkwinkelmann / flarum-ext-gate-logger
记录所有门控查询以进行调试
Requires
- flarum/core: ^1.0
README
此扩展将所有对Flarum门控的调用记录到默认的Flarum记录器中,优先级为debug
。
这意味着所有对User::can()
、User::cannot()
、User::assertCan()
等的调用。但不是User::hasPermission()
。
这将创建大量的日志,因此最好只在需要调试时启用此扩展。
没有面向用户的界面。它仅将日志记录到文件中(在storage/logs
中,使用默认记录器)。
性能影响将主要与记录器将日志写入磁盘的速度有关。如果您使用的是不写入磁盘的自定义日志驱动程序,性能影响可能可以忽略不计,因为逻辑与原生Flarum相同。
注意事项(不是永久的,仅在扩展启用时)
- 此扩展完全用自定义的门控类替换了Flarum的门控类,因此随着新的Flarum更新发布,此扩展可能会使Flarum的行为与标准安装不同,或者可能会缺少重要的安全修复!
- 如果扩展在其策略类中覆盖了
AbstractPolicy::checkAbility()
,则该方法将永远不会被调用!
日志格式
日志的第一行应该由自动添加的时间和调试级别前缀(这是由记录器库添加的)。
然后第一行将显示门控能力名称,然后是关于操作者(用户名或[Guest]
)和门控参数(模型类和ID或[GLOBAL]
表示全局策略)的信息。
下一行将显示为这些参数解析的每个策略类和方法。在每个策略之后,将显示输出(ALLOW
、FORCE_ALLOW
、DENY
、FORCE_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社区线程提供“尽力而为”的支持。