package host import ( "strings" "hyapp/pkg/appcode" "hyapp/pkg/xerr" ) type RoleScope string const ( RoleScopeCountry RoleScope = "country" RoleScopeRegion RoleScope = "region" RoleScopeGlobal RoleScope = "global" RoleScopeSceneOrganizationExpansion = "organization_role_expansion" RoleScopeSceneManagerOperations = "manager_operations" // RoleScopeSceneManagerAddBDLeader 兼容上一版 gateway/admin 的策略查询,解析后统一返回 manager_operations。 RoleScopeSceneManagerAddBDLeader = "manager_add_bd_leader" ) // RoleScopePolicy 把 App 固有边界和可运营扩展能力分开;业务入口只根据解析结果判断目标范围。 type RoleScopePolicy struct { Scene string BaseScope RoleScope ExpandedScope RoleScope RegionExpansionConfigurable bool } var defaultRoleScopePolicies = map[string]RoleScopePolicy{ RoleScopeSceneOrganizationExpansion: { Scene: RoleScopeSceneOrganizationExpansion, BaseScope: RoleScopeRegion, ExpandedScope: RoleScopeRegion, }, RoleScopeSceneManagerOperations: { Scene: RoleScopeSceneManagerOperations, BaseScope: RoleScopeCountry, ExpandedScope: RoleScopeRegion, RegionExpansionConfigurable: true, }, } var appRoleScopePolicyOverrides = map[string]map[string]RoleScopePolicy{ "huwaa": { RoleScopeSceneOrganizationExpansion: { Scene: RoleScopeSceneOrganizationExpansion, BaseScope: RoleScopeGlobal, ExpandedScope: RoleScopeGlobal, }, RoleScopeSceneManagerOperations: { Scene: RoleScopeSceneManagerOperations, BaseScope: RoleScopeGlobal, ExpandedScope: RoleScopeGlobal, }, }, } // ResolveRoleScopePolicy 是 App 差异的唯一解析入口;新增 App 只扩展注册表,不修改搜索或写入 handler。 func ResolveRoleScopePolicy(rawAppCode string, rawScene string) (RoleScopePolicy, error) { scene := strings.ToLower(strings.TrimSpace(rawScene)) if scene == RoleScopeSceneManagerAddBDLeader { scene = RoleScopeSceneManagerOperations } policy, ok := defaultRoleScopePolicies[scene] if !ok { return RoleScopePolicy{}, xerr.New(xerr.InvalidArgument, "role scope scene is invalid") } if overrides := appRoleScopePolicyOverrides[appcode.Normalize(rawAppCode)]; overrides != nil { if override, exists := overrides[scene]; exists { policy = override } } return policy, nil } // EffectiveScope 只允许声明为 configurable 的策略接受经理个人扩区开关。 func (p RoleScopePolicy) EffectiveScope(regionExpansionEnabled bool) RoleScope { if p.RegionExpansionConfigurable && regionExpansionEnabled { return p.ExpandedScope } return p.BaseScope }