You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
use conductor::models::MetadataTag;// Set tagslet tags = vec![MetadataTag::new("environment","production"),MetadataTag::new("team","payments"),];
auth_client.set_application_tags(&tags,"app-id-123").await?;// Get tagslet tags = auth_client.get_application_tags("app-id-123").await?;// Delete tags
auth_client.delete_application_tags(&[MetadataTag::new("team","payments"),],"app-id-123").await?;
Users
Create or Update User
use conductor::models::UpsertUserRequest;let request = UpsertUserRequest::new("John Doe").with_roles(vec!["USER".to_string(),"METADATA_MANAGER".to_string()]);let user = auth_client.upsert_user(&request,"john@example.com").await?;println!("User created: {}", user.id);
Get User
let user = auth_client.get_user("john@example.com").await?;println!("User: {}", user.name);println!("Roles: {:?}", user.roles);println!("Groups: {:?}", user.groups);
List Users
// List human users onlylet users = auth_client.list_users(false).await?;// Include application userslet all_users = auth_client.list_users(true).await?;for user in&users {println!("{}: {} ({:?})", user.id, user.name, user.roles);}
let result = auth_client.check_permissions("john@example.com","WORKFLOW_DEF","my_workflow",).await?;for(permission, granted)in&result {println!("{}: {}", permission, granted);}
Groups
Create or Update Group
use conductor::models::UpsertGroupRequest;let request = UpsertGroupRequest::new("Engineering Team").with_roles(vec!["USER".to_string(),"WORKFLOW_MANAGER".to_string()]);let group = auth_client.upsert_group(&request,"engineering-team").await?;println!("Group created: {}", group.id);
Get Group
let group = auth_client.get_group("engineering-team").await?;println!("Group: {} ({})", group.id, group.description);println!("Roles: {:?}", group.roles);
List Groups
let groups = auth_client.list_groups().await?;for group in&groups {println!("{}: {}", group.id, group.description);}
Manage Group Members
// Add single user
auth_client.add_user_to_group("engineering-team","john@example.com").await?;// Add multiple users
auth_client.add_users_to_group("engineering-team",&["jane@example.com".to_string(),"bob@example.com".to_string(),]).await?;// Get users in grouplet users = auth_client.get_users_in_group("engineering-team").await?;for user in&users {println!(" {}: {}", user.id, user.name);}// Remove single user
auth_client.remove_user_from_group("engineering-team","bob@example.com").await?;// Remove multiple users
auth_client.remove_users_from_group("engineering-team",&["john@example.com".to_string(),]).await?;
use conductor::models::{SubjectRef,TargetRef,AccessType,SubjectType,TargetType};// Grant to userlet subject = SubjectRef::new(SubjectType::User,"john@example.com");let target = TargetRef::new(TargetType::WorkflowDef,"order_workflow");
auth_client.grant_permissions(&subject,&target,&[AccessType::Read,AccessType::Execute],).await?;// Grant to grouplet group_subject = SubjectRef::new(SubjectType::Group,"engineering-team");
auth_client.grant_permissions(&group_subject,&target,&[AccessType::Read,AccessType::Execute,AccessType::Update],).await?;
Get Permissions
let target = TargetRef::new(TargetType::WorkflowDef,"order_workflow");let permissions = auth_client.get_permissions(&target).await?;for(access_type, subjects)in&permissions {println!("{}:", access_type);for subject in subjects {println!(" {:?}: {}", subject.subject_type, subject.id);}}
Remove Permissions
let subject = SubjectRef::new(SubjectType::User,"john@example.com");let target = TargetRef::new(TargetType::WorkflowDef,"order_workflow");
auth_client.remove_permissions(&subject,&target,&[AccessType::Execute],// Remove only execute permission).await?;
Roles
List Roles
// All roleslet all_roles = auth_client.list_all_roles().await?;// System roles onlylet system_roles = auth_client.list_system_roles().await?;// Custom roles onlylet custom_roles = auth_client.list_custom_roles().await?;
Create Custom Role
let role_def = serde_json::json!({"name":"workflow-operator","description":"Can execute and monitor workflows","permissions":[{"resource":"WORKFLOW_DEF","actions":["READ","EXECUTE"]},{"resource":"WORKFLOW","actions":["READ","EXECUTE"]}]});let role = auth_client.create_role(&role_def).await?;println!("Created role: {:?}", role);
Get Role
let role = auth_client.get_role("workflow-operator").await?;println!("Role: {:?}", role);
Update Role
let update = serde_json::json!({"description":"Updated description","permissions":[{"resource":"WORKFLOW_DEF","actions":["READ","EXECUTE","UPDATE"]}]});let updated = auth_client.update_role("workflow-operator",&update).await?;
let access_key = auth_client.create_access_key("app-id-123").await?;// IMPORTANT: Save these immediately - secret is only shown once!println!("Key ID: {}", access_key.id);println!("Key Secret: {}", access_key.secret);
// Add role to application
auth_client.add_role_to_application_user("app-id-123","ADMIN").await?;// Remove role
auth_client.remove_role_from_application_user("app-id-123","ADMIN").await?;
// Instead of granting to individual users// Grant to groups and add users to groupslet group_request = UpsertGroupRequest::new("Workflow Operators").with_roles(vec!["USER".to_string()]);
auth_client.upsert_group(&group_request,"workflow-operators").await?;// Grant permissions to grouplet subject = SubjectRef::new(SubjectType::Group,"workflow-operators");let target = TargetRef::new(TargetType::WorkflowDef,"order_workflow");
auth_client.grant_permissions(&subject,&target,&[AccessType::Read,AccessType::Execute]).await?;// Add users to group
auth_client.add_users_to_group("workflow-operators",&["user1@example.com".to_string(),"user2@example.com".to_string(),]).await?;
2. Secure Access Keys
// Create access key and store securelylet key = auth_client.create_access_key(&app.id).await?;// Store in secure vault/secrets managerstore_in_vault("conductor_key_id",&key.id);store_in_vault("conductor_key_secret",&key.secret);// Rotate keys periodicallyasyncfnrotate_key(client:&AuthorizationClient,app_id:&str) -> Result<()>{// Create new keylet new_key = client.create_access_key(app_id).await?;// Update application to use new key// ...// Delete old keylet old_keys = client.get_access_keys(app_id).await?;for key in old_keys.iter().filter(|k| k.id != new_key.id){
client.delete_access_key(app_id,&key.id).await?;}Ok(())}