☰
Flagsmith Identities 完全指南:基于 Identity、Traits 与 Transient 机制实现精准用户定向
2026/10/9 7:40:00 网站建设 项目流程
  • 后端
  • 前端

【免费下载链接】flagsmith

Flagsmith is an open-source feature flag platform with remote config, experimentation, and self-hosted or cloud deployment options.

项目地址:https://gitcode.com/gh_mirrors/fl/flagsmith
点击查看免费下载

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.

项目地址:https://gitcode.com/gh_mirrors/fl/flagsmith
点击查看免费下载
上一篇:魔兽争霸3在新系统上闪退、锁30帧?WarcraftHelper 5分钟安装完整指南
下一篇:百余个站点小说一键离线下载:novel-downloader 脚本保姆级上手指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询