feat: 【日志平台】【06】完善双栈观测、联调验证与切换回退 --story=136725921 - #12023
Conversation
| action 解决。子资源 id 保持原值,不做无限制申请。 | ||
| """ | ||
| space_type = self.codec.root_resource_type_id or BKLOG_ROOT_RESOURCE_TYPE_ID | ||
| view_business_id = self.codec.encode_action(ActionEnum.VIEW_BUSINESS.id) |
There was a problem hiding this comment.
[P1] backends/v4/provider.py 直接依赖 apps.iam.handlers.actions,把之前刻意做的解耦退回去了
位置:bklog/apps/iam/backends/v4/provider.py:347(import 在 :16)
问题:相邻两行的处理方式不对称 —— space_type 走 codec,view_business_id 却直接引了 bklog 的 ActionEnum:
space_type = self.codec.root_resource_type_id or BKLOG_ROOT_RESOURCE_TYPE_ID
view_business_id = self.codec.encode_action(ActionEnum.VIEW_BUSINESS.id)V4 backend 当初专门做过与 apps.iam.handlers 的解耦,V4PermissionProvider.__init__ 里的 codec 和 action_resolver 两个注入点就是为此存在的。git log -S "from apps.iam.handlers.actions import ActionEnum" -- bklog/apps/iam/backends/v4/provider.py 显示这个 import 由本 PR 的 243d44ef 引入,是新增依赖而不是既有状态。
影响:不构成运行时故障 —— 我核对过 handlers/__init__.py 第 23 行先导 actions、第 25 行才导 permission,且 actions.py 只依赖 apps.iam.exceptions 和 handlers.resources,不反向依赖 backends,所以不会循环导入。问题在于 V4 backend 从此无法脱离 bklog 复用,而这正是前几个单里花力气建立的边界。
建议:照 root_resource_type_id 的方式收敛到 codec 上,让两行恢复对称。codec.py 目前只依赖 iam_engine.core.requests,而且 BKLOG_ROOT_RESOURCE_TYPE_ID = "space" 本来就是以字面量形式复刻 ResourceEnum.BUSINESS.id 的,这里跟随同一套写法即可:
# backends/v4/codec.py
class V4ResourceCodec:
root_resource_type_id = ""
root_view_action_id = ""
class BklogNameCodec(V4ResourceCodec):
root_resource_type_id = BKLOG_ROOT_RESOURCE_TYPE_ID
# 与 ActionEnum.VIEW_BUSINESS.id 同源,encode_action 会剥掉 _v2 后缀
root_view_action_id = "view_business_v2"# backends/v4/provider.py
space_type = self.codec.root_resource_type_id or BKLOG_ROOT_RESOURCE_TYPE_ID
if not self.codec.root_view_action_id:
return permissions
view_business_id = self.codec.encode_action(self.codec.root_view_action_id)这样 from apps.iam.handlers.actions import ActionEnum 可以整条去掉,未注入 bklog codec 的场景也会自然跳过补齐、而不是硬套一个 bklog 专属 Action。
如果更希望保持 ActionEnum 作为唯一事实来源、不接受字面量重复,另一个等价做法是走构造参数注入(V4PermissionProvider(..., root_view_action_id=ActionEnum.VIEW_BUSINESS.id)),由 bklog 侧的装配处传入,效果一样。
close #1010158081136725921