为 Zulip 开源团队聊天设计灵活的权限

主要观点:Zulip 是开源团队聊天应用,推出了灵活的权限管理系统,通过将数千个组织无缝迁移到基于组的权限系统,介绍了新系统的工程设计及过渡过程。
关键信息

  • 过去几个月推出新权限系统,可将权限授予角色、组和用户的任意组合,用于管理频道、群组和组织。
  • 设计目标包括实现平滑增量迁移、提供最佳权限管理体验、保持性能高效、使核心设计更优雅可维护。
  • 采用将旧角色权限系统内置于新系统的方式,通过系统组解决迁移问题,允许任意嵌套组,可将权限分配给任意组合的角色、组和用户,使用 PostgreSQL CTE 查询和批量查询助手等技术保持性能,新系统设计使添加新权限设置更简单。
  • 介绍了不同设计的原因,如 Zulip 按组织分片、性能要求高、团队有算法专业知识等。
    重要细节
  • 过去 10 年约 800 个数据库迁移中,115 个与该项目相关,是最复杂的过渡。
  • 旧系统基于用户角色管理权限,新系统更灵活。
  • 系统组可保留现有用户权限配置,方便简单管理,还可用于原型设计。
  • 任意嵌套组技术在大型组织结构表示中有重要作用,Zulip 设计中组的成员是子组和用户的任意组合,通过 PostgreSQL 锁定保证子组图无环。
  • 权限在数据库中以单个组 ID 存储,可指向各种类型的组,匿名组是关键设计,方便存储配置权限。
  • 为保持性能,使用 PostgreSQL CTE 查询、设计批量查询助手、预取数据等技术,减少数据库查询次数。
  • 新系统设计使添加新权限设置更直观,决策主要围绕命名和语义。
  • 分享工程设计是为帮助他人设计系统,可查看 Zulip 开源代码了解更多。
阅读 8
0 条评论