CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-apache-airflow-providers-fab

Flask App Builder (FAB) authentication and authorization provider for Apache Airflow

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

Overview
Eval results
Files

cli-commands.mddocs/

CLI Commands

Command-line interface for user management, role administration, permission synchronization, and database operations. These commands are integrated into Airflow's CLI through the FAB auth manager.

Capabilities

User Management Commands

Commands for creating, managing, and maintaining user accounts.

def users_list(output: str | None = None, verbose: bool = False) -> None:
    """List all users in the system."""

def users_create(
    username: str,
    email: str, 
    firstname: str,
    lastname: str,
    role: str,
    password: str | None = None,
    use_random_password: bool = False,
    verbose: bool = False
) -> None:
    """Create a new user account."""

def user_reset_password(
    username: str | None = None,
    email: str | None = None, 
    password: str | None = None,
    use_random_password: bool = False,
    verbose: bool = False
) -> None:
    """Reset a user's password."""

def users_delete(
    username: str | None = None,
    email: str | None = None,
    verbose: bool = False
) -> None:
    """Delete a user account."""

def add_role(
    username: str | None = None,
    email: str | None = None,
    role: str,
    verbose: bool = False
) -> None:
    """Add a role to a user."""

def remove_role(
    username: str | None = None,
    email: str | None = None, 
    role: str,
    verbose: bool = False
) -> None:
    """Remove a role from a user."""

def users_import(filepath: str, verbose: bool = False) -> None:
    """Import users from JSON file."""

def users_export(filepath: str, verbose: bool = False) -> None:
    """Export all users to JSON file."""

Role Management Commands

Commands for creating and managing user roles and their permissions.

def roles_list(
    permissions: bool = False,
    output: str | None = None, 
    verbose: bool = False
) -> None:
    """List all roles in the system."""

def roles_create(roles: list[str], verbose: bool = False) -> None:
    """Create new roles."""

def roles_delete(roles: list[str], verbose: bool = False) -> None:
    """Delete existing roles."""

def roles_add_perms(
    roles: list[str],
    resources: list[str],
    actions: list[str],
    verbose: bool = False
) -> None:
    """Add permissions to roles."""

def roles_del_perms(
    roles: list[str],
    resources: list[str], 
    actions: list[str] | None = None,
    verbose: bool = False
) -> None:
    """Delete permissions from roles."""

def roles_export(
    filepath: str,
    pretty: bool = False,
    verbose: bool = False
) -> None:
    """Export roles to JSON file."""

def roles_import(filepath: str, verbose: bool = False) -> None:
    """Import roles from JSON file."""

Permission Synchronization

Command for synchronizing permissions with the current Airflow installation.

def sync_perm(include_dags: bool = False, verbose: bool = False) -> None:
    """Update permissions for existing roles and optionally DAGs."""

Database Commands

Commands for managing the FAB metadata database schema (available in Airflow 3.0+).

def migratedb(
    revision: str | None = None,
    version: str | None = None,
    sql_only: bool = False,
    from_revision: str | None = None,
    from_version: str | None = None,
    verbose: bool = False
) -> None:
    """Migrate the FAB metadata database to the latest version."""

def downgrade(
    to_revision: str | None = None,
    to_version: str | None = None,
    sql_only: bool = False,
    yes: bool = False,
    from_revision: str | None = None,
    from_version: str | None = None,
    verbose: bool = False
) -> None:
    """Downgrade the schema of the FAB metadata database."""

def resetdb(
    yes: bool = False,
    skip_init: bool = False,
    verbose: bool = False
) -> None:
    """Reset and rebuild the FAB metadata database."""

Utility Functions

Helper functions used by CLI commands for common operations.

# Located in cli_commands/utils.py
def get_user_by_username_or_email(
    username: str | None = None,
    email: str | None = None
) -> User | None:
    """Get user by username or email."""

def validate_role_exists(role_name: str) -> bool:
    """Validate that a role exists in the system."""

Usage Examples

User Management

# List all users
airflow users list

# Create a new admin user
airflow users create \
    --username admin \
    --firstname Admin \
    --lastname User \
    --role Admin \
    --email admin@example.com

# Reset user password
airflow users reset-password --username admin

# Add role to existing user
airflow users add-role --username analyst --role Viewer

# Import users from JSON file
airflow users import users.json

# Export users to JSON file  
airflow users export users_backup.json

Role Management

# List all roles with permissions
airflow roles list --permissions

# Create new roles
airflow roles create DataAnalyst DataViewer

# Add permissions to role
airflow roles add-perms DataAnalyst --resource DAG --action can_read can_edit

# Remove permissions from role
airflow roles del-perms DataViewer --resource Variable --action can_delete

# Export roles to file
airflow roles export roles_backup.json --pretty

# Import roles from file
airflow roles import roles_backup.json

Permission Synchronization

# Sync permissions (standard resources only)
airflow sync-perm

# Sync permissions including DAG-specific permissions
airflow sync-perm --include-dags

Database Management (Airflow 3.0+)

# Migrate FAB database to latest version
airflow fab-db migrate

# Show migration SQL without executing
airflow fab-db migrate --show-sql-only

# Downgrade to specific revision
airflow fab-db downgrade --to-revision abc123

# Reset FAB database (destructive)
airflow fab-db reset --yes

User Import/Export Format

User JSON Format

[
    {
        "email": "user1@example.com",
        "firstname": "John", 
        "lastname": "Doe",
        "roles": ["Viewer", "Op"],
        "username": "johndoe"
    },
    {
        "email": "user2@example.com",
        "firstname": "Jane",
        "lastname": "Smith", 
        "roles": ["Admin"],
        "username": "janesmith"
    }
]

Role JSON Format

[
    {
        "name": "DataAnalyst"
    },
    {
        "name": "DataViewer" 
    }
]

Types

from typing import TYPE_CHECKING
from airflow.cli.cli_config import CLICommand, ActionCommand, GroupCommand

if TYPE_CHECKING:
    from argparse import Namespace
    from airflow.providers.fab.auth_manager.models import User, Role

Command Groups

The CLI commands are organized into the following groups:

  • users: User account management (create, delete, list, import, export, etc.)
  • roles: Role and permission management (create, delete, add/remove permissions, etc.)
  • sync-perm: Permission synchronization (standalone command)
  • fab-db: Database schema management (Airflow 3.0+ only)

Install with Tessl CLI

npx tessl i tessl/pypi-apache-airflow-providers-fab

docs

api-endpoints.md

auth-backends.md

auth-manager.md

cli-commands.md

index.md

models.md

tile.json