Skip to content

feat: 【日志平台】【06】完善双栈观测、联调验证与切换回退 --story=136725921 - #12023

Open
CaiYuP wants to merge 4 commits into
TencentBlueKing:feat/iam-v4-bklogfrom
CaiYuP:feat/iam-v4-support06/#1010158081136725921
Open

feat: 【日志平台】【06】完善双栈观测、联调验证与切换回退 --story=136725921#12023
CaiYuP wants to merge 4 commits into
TencentBlueKing:feat/iam-v4-bklogfrom
CaiYuP:feat/iam-v4-support06/#1010158081136725921

Conversation

@CaiYuP

@CaiYuP CaiYuP commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

close #1010158081136725921

Comment thread bklog/apps/iam/backends/v4/provider.py Outdated
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)

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[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__ 里的 codecaction_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.exceptionshandlers.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 侧的装配处传入,效果一样。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants