- 后端
- 前端
【免费下载链接】flagsmith
Flagsmith is an open-source feature flag platform with remote config, experimentation, and self-hosted or cloud deployment options.
Flagsmith 是开源的功能开关(Feature Flag)平台,其核心能力之一便是按用户(Identity)精准控制功能开关与远程配置。本文围绕 docs/docs/flagsmith-concepts/identities.md 展开,系统讲解 Identities 的创建机制、Identity Overrides 定向覆盖、Traits 特性存储与四类数据类型、Traits 驱动 Segments 的实战用法,以及面向隐私场景的 Transient Traits 机制,并辅以仓库源码(Identity 模型、Trait 模型、SDK 服务)印证底层实现。读完本文,你将掌握如何为单个用户覆盖功能开关、存储并利用用户属性数据,以及如何在保护隐私的同时完成分段定向。
为什么需要 Identities:从全局开关到单用户定向
Feature flags 本身是一种"钝"工具:开启或关闭,作用范围是整个用户群体。文档开篇即指出,若想做到更精确的定向,例如执行按百分比的分阶段发布或 A/B 与多变量测试,就必须识别你的用户(identify your users)。
在 Flagsmith 中,Identities 的创建是自动的:当客户端 SDK 第一次以某个唯一字符串标识用户(通常发生在用户登录应用或站点时),SDK 会携带身份信息向 Flagsmith API 发起请求,服务端即自动创建对应的 Identity。这一点在源码中得到印证——IdentityViewSet 中的SDKIdentitiesDeprecated视图明确注释:"if Identity does not exist it will create one, otherwise will fetch existing",底层调用Identity.objects.get_or_create_for_sdk(identifier=..., environment=...)完成"不存在则创建、存在则拉取"的幂等逻辑。
⚠️ 安全提示(文档原意)
SDK 侧的 Flagsmith API 本身就是公开设计,环境密钥(environment key)理应公开。因此,识别用户时所使用的 identity 值必须是难以猜测的。如果你使用递增整数作为用户标识,攻击者只需枚举该整数即可批量拉取任意用户的标识及关联 Traits,从而造成用户属性数据泄露。
官方强烈建议使用不可猜测、不可识别的身份键,例如 GUID(UUID)。从源码看,Identity 的
identifier字段为CharField(max_length=2000)(见 models.py),足以容纳标准 UUID 字符串。
Identity 与环境的绑定关系
Identities按环境(environment)隔离。文档明确指出:同一个项目内,joe@yourwebsite.com在 Development 环境与 Production 环境中是两个不同的 Identity,各自可以有独立的开关状态。
这一点在数据模型层面有明确体现:Identity 模型 通过environment = models.ForeignKey(Environment, related_name="identities", on_delete=models.CASCADE)关联环境,并声明unique_together = ("environment", "identifier")——即"环境 + 标识符"构成唯一约束,同一标识符在不同环境下天然是两个实体。同时,模型还定义了composite_key属性(f"{self.environment.api_key}_{self.identifier}")与get_hash_key()方法(models.py),后者用于多变量功能与百分比分段时的哈希分桶,可选用 Identity 主键 ID 或复合键作为哈希输入。
权限模型同样与环境对齐:在 views.py 中,查看 Identity 需要VIEW_IDENTITIES权限,增删改需要MANAGE_IDENTITIES权限,且均通过NestedEnvironmentPermissions按环境校验。这与>const identifier = "user_512356"; const traits = { app_version: YourApplication.getVersion() } const flags = flagsmith.getIdentityFlags(identifier, traits);
此处设置了app_version键,值为YourApplication.getVersion()的返回值。随后你即可创建基于应用版本的 Segment,按版本管理功能开关——例如对旧版本隐藏新功能、对新版本放量。
Traits 是完全自由格式的:你可以在平台中存储任意数量、任意相关信息的 traits,再用 Segments 基于这些值控制功能。典型用法包括:登录次数、是否接受条款、主题偏好(深色模式)、是否执行过特定动作等(见>赞
- 后端
- 前端
【免费下载链接】flagsmith
Flagsmith is an open-source feature flag platform with remote config, experimentation, and self-hosted or cloud deployment options.
相关推荐
Material UI Popper 组件完全指南:基于 Popper.js 的精准定位浮层实现原理与实战
Material UI Popper 组件完全指南:基于 Popper.js 的精准定位浮层实现原理与实战 Material UI 的 Popper 组件是一个
前端UI组件设计系统Fabric.js事件系统完全指南:实现精准的用户交互控制
Fabric.js事件系统完全指南:实现精准的用户交互控制 Fabric.js作为强大的JavaScript Canvas库,其事件系统是实现丰富用户交互的核心
前端图形学ChatterUI核心组件源码解析:React Native高性能UI实现原理
ChatterUI核心组件源码解析:React Native高性能UI实现原理 ChatterUI是一款基于React Native构建的高性能LLM前端应用,
人工智能大模型本地部署AI 应用交互助手