bkpaas-python-sdk
bkpaas-python-sdk copied to clipboard
blue_krill 中 EnumField 是否可以增加一个字段 metadata,用来存储一些关联的额外数据
EnumField 定义:https://github.com/TencentBlueKing/bkpaas-python-sdk/blob/master/sdks/blue-krill/blue_krill/data_types/enum.py#L135
给 EnumField 添加一个 metadata 属性,支持定义一些扩展数据,方便程序统一管理配置。例如,定义权限中心的操作 ActionEnum 时,可以添加其允许操作的角色,关联的资源类型,在按角色授权时,可以统一根据这些数据生成权限中心需要的授权范围。
class ActionEnum:
VIEW_FOO = EnumField("view_foo", label="", metadata={"role": ["operator"], "related_resource_type": "foo"})
class AuthorizationScopes:
def get_scopes(self, role):
field_members = ActionEnum.get_field_members()
action_fields = [field for field in field_members.values() if role in field.metadata.get("role", [])]
resource_type_to_actions = defaultdict(list)
for field in action_fields:
resource_type_to_actions[field.metadata["related_resource_type"]].append(field.real_value)
EnumField 定义:https://github.com/TencentBlueKing/bkpaas-python-sdk/blob/master/sdks/blue-krill/blue_krill/data_types/enum.py#L135
给 EnumField 添加一个 metadata 属性,支持定义一些扩展数据,方便程序统一管理配置。例如,定义权限中心的操作 ActionEnum 时,可以添加其允许操作的角色,关联的资源类型,在按角色授权时,可以统一根据这些数据生成权限中心需要的授权范围。
这个需求,除了给枚举值增加 metadata 外,也有其他方式可以满足:
- 创建字典
action_perm_mdata: Dict[ActionEnum, Dict]
,来引用枚举类型 - 直接把携带 metadata 的结构化数据,作为值来定义枚举类型
VIEW_FOO = {"name": "view_foo", "role": ["operator"], "lated_resource_type": "foo"}
考虑到 metadata 本身含义较模糊,及当前需求有其他替代方案。暂时先挂起本 Issue。