fireflies-enterprise-rbac

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Fireflies.ai Enterprise RBAC

Fireflies.ai 企业级RBAC

Overview

概述

Configure enterprise-grade access control for Fireflies.ai integrations.
为Fireflies.ai集成配置企业级访问控制。

Prerequisites

前提条件

  • Fireflies.ai Enterprise tier subscription
  • Identity Provider (IdP) with SAML/OIDC support
  • Understanding of role-based access patterns
  • Audit logging infrastructure
  • Fireflies.ai 企业版订阅
  • 支持SAML/OIDC的身份提供商(IdP)
  • 了解基于角色的访问模式
  • 审计日志基础设施

Role Definitions

角色定义

RolePermissionsUse Case
AdminFull accessPlatform administrators
DeveloperRead/write, no deleteActive development
ViewerRead-onlyStakeholders, auditors
ServiceAPI access onlyAutomated systems
角色权限适用场景
管理员完全访问权限平台管理员
开发者读写权限,无删除权限活跃开发场景
查看者只读权限利益相关者、审计人员
服务账号仅API访问权限自动化系统

Role Implementation

角色实现

typescript
enum Fireflies.aiRole {
  Admin = 'admin',
  Developer = 'developer',
  Viewer = 'viewer',
  Service = 'service',
}

interface Fireflies.aiPermissions {
  read: boolean;
  write: boolean;
  delete: boolean;
  admin: boolean;
}

const ROLE_PERMISSIONS: Record<Fireflies.aiRole, Fireflies.aiPermissions> = {
  admin: { read: true, write: true, delete: true, admin: true },
  developer: { read: true, write: true, delete: false, admin: false },
  viewer: { read: true, write: false, delete: false, admin: false },
  service: { read: true, write: true, delete: false, admin: false },
};

function checkPermission(
  role: Fireflies.aiRole,
  action: keyof Fireflies.aiPermissions
): boolean {
  return ROLE_PERMISSIONS[role][action];
}
typescript
enum Fireflies.aiRole {
  Admin = 'admin',
  Developer = 'developer',
  Viewer = 'viewer',
  Service = 'service',
}

interface Fireflies.aiPermissions {
  read: boolean;
  write: boolean;
  delete: boolean;
  admin: boolean;
}

const ROLE_PERMISSIONS: Record<Fireflies.aiRole, Fireflies.aiPermissions> = {
  admin: { read: true, write: true, delete: true, admin: true },
  developer: { read: true, write: true, delete: false, admin: false },
  viewer: { read: true, write: false, delete: false, admin: false },
  service: { read: true, write: true, delete: false, admin: false },
};

function checkPermission(
  role: Fireflies.aiRole,
  action: keyof Fireflies.aiPermissions
): boolean {
  return ROLE_PERMISSIONS[role][action];
}

SSO Integration

SSO集成

SAML Configuration

SAML配置

typescript
// Fireflies.ai SAML setup
const samlConfig = {
  entryPoint: 'https://idp.company.com/saml/sso',
  issuer: 'https://fireflies.com/saml/metadata',
  cert: process.env.SAML_CERT,
  callbackUrl: 'https://app.yourcompany.com/auth/fireflies/callback',
};

// Map IdP groups to Fireflies.ai roles
const groupRoleMapping: Record<string, Fireflies.aiRole> = {
  'Engineering': Fireflies.aiRole.Developer,
  'Platform-Admins': Fireflies.aiRole.Admin,
  'Data-Team': Fireflies.aiRole.Viewer,
};
typescript
// Fireflies.ai SAML setup
const samlConfig = {
  entryPoint: 'https://idp.company.com/saml/sso',
  issuer: 'https://fireflies.com/saml/metadata',
  cert: process.env.SAML_CERT,
  callbackUrl: 'https://app.yourcompany.com/auth/fireflies/callback',
};

// Map IdP groups to Fireflies.ai roles
const groupRoleMapping: Record<string, Fireflies.aiRole> = {
  'Engineering': Fireflies.aiRole.Developer,
  'Platform-Admins': Fireflies.aiRole.Admin,
  'Data-Team': Fireflies.aiRole.Viewer,
};

OAuth2/OIDC Integration

OAuth2/OIDC集成

typescript
import { OAuth2Client } from '@fireflies/sdk';

const oauthClient = new OAuth2Client({
  clientId: process.env.FIREFLIES_OAUTH_CLIENT_ID!,
  clientSecret: process.env.FIREFLIES_OAUTH_CLIENT_SECRET!,
  redirectUri: 'https://app.yourcompany.com/auth/fireflies/callback',
  scopes: ['read', 'write'],
});
typescript
import { OAuth2Client } from '@fireflies/sdk';

const oauthClient = new OAuth2Client({
  clientId: process.env.FIREFLIES_OAUTH_CLIENT_ID!,
  clientSecret: process.env.FIREFLIES_OAUTH_CLIENT_SECRET!,
  redirectUri: 'https://app.yourcompany.com/auth/fireflies/callback',
  scopes: ['read', 'write'],
});

Organization Management

组织管理

typescript
interface Fireflies.aiOrganization {
  id: string;
  name: string;
  ssoEnabled: boolean;
  enforceSso: boolean;
  allowedDomains: string[];
  defaultRole: Fireflies.aiRole;
}

async function createOrganization(
  config: Fireflies.aiOrganization
): Promise<void> {
  await firefliesClient.organizations.create({
    ...config,
    settings: {
      sso: {
        enabled: config.ssoEnabled,
        enforced: config.enforceSso,
        domains: config.allowedDomains,
      },
    },
  });
}
typescript
interface Fireflies.aiOrganization {
  id: string;
  name: string;
  ssoEnabled: boolean;
  enforceSso: boolean;
  allowedDomains: string[];
  defaultRole: Fireflies.aiRole;
}

async function createOrganization(
  config: Fireflies.aiOrganization
): Promise<void> {
  await firefliesClient.organizations.create({
    ...config,
    settings: {
      sso: {
        enabled: config.ssoEnabled,
        enforced: config.enforceSso,
        domains: config.allowedDomains,
      },
    },
  });
}

Access Control Middleware

访问控制中间件

typescript
function requireFireflies.aiPermission(
  requiredPermission: keyof Fireflies.aiPermissions
) {
  return async (req: Request, res: Response, next: NextFunction) => {
    const user = req.user as { firefliesRole: Fireflies.aiRole };

    if (!checkPermission(user.firefliesRole, requiredPermission)) {
      return res.status(403).json({
        error: 'Forbidden',
        message: `Missing permission: ${requiredPermission}`,
      });
    }

    next();
  };
}

// Usage
app.delete('/fireflies/resource/:id',
  requireFireflies.aiPermission('delete'),
  deleteResourceHandler
);
typescript
function requireFireflies.aiPermission(
  requiredPermission: keyof Fireflies.aiPermissions
) {
  return async (req: Request, res: Response, next: NextFunction) => {
    const user = req.user as { firefliesRole: Fireflies.aiRole };

    if (!checkPermission(user.firefliesRole, requiredPermission)) {
      return res.status(403).json({
        error: 'Forbidden',
        message: `Missing permission: ${requiredPermission}`,
      });
    }

    next();
  };
}

// Usage
app.delete('/fireflies/resource/:id',
  requireFireflies.aiPermission('delete'),
  deleteResourceHandler
);

Audit Trail

审计追踪

typescript
interface Fireflies.aiAuditEntry {
  timestamp: Date;
  userId: string;
  role: Fireflies.aiRole;
  action: string;
  resource: string;
  success: boolean;
  ipAddress: string;
}

async function logFireflies.aiAccess(entry: Fireflies.aiAuditEntry): Promise<void> {
  await auditDb.insert(entry);

  // Alert on suspicious activity
  if (entry.action === 'delete' && !entry.success) {
    await alertOnSuspiciousActivity(entry);
  }
}
typescript
interface Fireflies.aiAuditEntry {
  timestamp: Date;
  userId: string;
  role: Fireflies.aiRole;
  action: string;
  resource: string;
  success: boolean;
  ipAddress: string;
}

async function logFireflies.aiAccess(entry: Fireflies.aiAuditEntry): Promise<void> {
  await auditDb.insert(entry);

  // Alert on suspicious activity
  if (entry.action === 'delete' && !entry.success) {
    await alertOnSuspiciousActivity(entry);
  }
}

Instructions

操作步骤

Step 1: Define Roles

步骤1:定义角色

Map organizational roles to Fireflies.ai permissions.
将组织角色映射到Fireflies.ai权限。

Step 2: Configure SSO

步骤2:配置SSO

Set up SAML or OIDC integration with your IdP.
与你的身份提供商(IdP)设置SAML或OIDC集成。

Step 3: Implement Middleware

步骤3:实现中间件

Add permission checks to API endpoints.
为API端点添加权限检查。

Step 4: Enable Audit Logging

步骤4:启用审计日志

Track all access for compliance.
追踪所有访问行为以满足合规要求。

Output

输出结果

  • Role definitions implemented
  • SSO integration configured
  • Permission middleware active
  • Audit trail enabled
  • 已实现角色定义
  • 已配置SSO集成
  • 权限中间件已激活
  • 审计追踪已启用

Error Handling

错误处理

IssueCauseSolution
SSO login failsWrong callback URLVerify IdP config
Permission deniedMissing role mappingUpdate group mappings
Token expiredShort TTLRefresh token logic
Audit gapsAsync logging failedCheck log pipeline
问题原因解决方案
SSO登录失败回调URL错误验证IdP配置
权限被拒绝缺少角色映射更新组映射关系
令牌过期TTL过短实现令牌刷新逻辑
审计日志缺失异步日志记录失败检查日志管道

Examples

示例

Quick Permission Check

快速权限检查

typescript
if (!checkPermission(user.role, 'write')) {
  throw new ForbiddenError('Write permission required');
}
typescript
if (!checkPermission(user.role, 'write')) {
  throw new ForbiddenError('Write permission required');
}

Resources

参考资源

Next Steps

下一步

For major migrations, see
fireflies-migration-deep-dive
.
如需进行大规模迁移,请查看
fireflies-migration-deep-dive