diff options
| author | mo khan <mo@mokhan.ca> | 2025-07-15 16:37:08 -0600 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2025-07-17 16:30:22 -0600 |
| commit | 45df4d0d9b577fecee798d672695fe24ff57fb1b (patch) | |
| tree | 1b99bf645035b58e0d6db08c7a83521f41f7a75b /src/bin/cli.rs | |
| parent | f94f79608393d4ab127db63cc41668445ef6b243 (diff) | |
feat: migrate from Cedar to SpiceDB authorization system
This is a major architectural change that replaces the Cedar policy-based
authorization system with SpiceDB's relation-based authorization.
Key changes:
- Migrate from Rust to Go implementation
- Replace Cedar policies with SpiceDB schema and relationships
- Switch from envoy `ext_authz` with Cedar to SpiceDB permission checks
- Update build system and dependencies for Go ecosystem
- Maintain Envoy integration for external authorization
This change enables more flexible permission modeling through SpiceDB's
Google Zanzibar inspired relation-based system, supporting complex
hierarchical permissions that were difficult to express in Cedar.
Breaking change: Existing Cedar policies and Rust-based configuration
will no longer work and need to be migrated to SpiceDB schema.
Diffstat (limited to 'src/bin/cli.rs')
| -rw-r--r-- | src/bin/cli.rs | 94 |
1 files changed, 0 insertions, 94 deletions
diff --git a/src/bin/cli.rs b/src/bin/cli.rs deleted file mode 100644 index 78aa1ba1..00000000 --- a/src/bin/cli.rs +++ /dev/null @@ -1,94 +0,0 @@ -use authzd::EntitiesRepository; -use authzd::gitlab::Api; -use clap::{Parser, Subcommand}; - -#[derive(Parser, Debug)] -#[command( - author, - version, - about = "Authorization CLI for managing Cedar entities and policies" -)] -struct Args { - #[command(subcommand)] - command: Commands, -} - -#[derive(Subcommand, Debug)] -enum Commands { - /// Generate entities from GitLab API - Generate { - /// Project ID or path (e.g., gitlab-org/gitlab) - #[arg(short, long)] - project: String, - - /// Output file path - #[arg(short, long, default_value = "entities.json")] - output: String, - - /// GitLab API token - #[arg(short, long, env = "GITLAB_TOKEN")] - token: String, - - /// GitLab instance URL - #[arg( - short = 'H', - long, - env = "GITLAB_HOST", - default_value = "https://gitlab.com" - )] - host: String, - }, - Server { - /// Address to bind to - #[arg(short, long, env = "BIND_ADDR", default_value = "127.0.0.1:50052")] - addr: String, - }, -} - -#[tokio::main] -async fn main() -> Result<(), Box<dyn std::error::Error>> { - let args = Args::parse(); - - match args.command { - Commands::Generate { - project, - output, - token, - host, - } => { - let repository = EntitiesRepository::new(Api::new(token, host)); - let entities = repository.all(project).await?; - EntitiesRepository::is_valid(&entities)?; - let json = serde_json::to_string_pretty(&entities)?; - std::fs::write(&output, json)?; - - println!( - "Successfully generated {} entities to {}", - entities.len(), - output - ); - } - Commands::Server { addr } => { - tracing_subscriber::fmt() - .json() - .with_ansi(false) - .with_current_span(true) - .with_file(true) - .with_level(false) - .with_line_number(true) - .with_max_level(tracing::Level::INFO) - .with_span_list(true) - .with_target(false) - .with_thread_ids(false) - .with_thread_names(false) - .init(); - - tracing::info!(address = %addr, "Starting"); - authzd::authorization::Server::new(authzd::authorization::CedarAuthorizer::default())? - .serve(addr.parse().unwrap()) - .await?; - } - } - - Ok(()) -} |
