- Cargo workspace with 1250-line and no-placeholder CI gates wired first - tc-domain: id newtypes, SessionKey codec (proptest round-trip), Role, GatedCategory (spec §15), AccessPolicy, core entities - tc-config: figment TOML+env config, DeployTarget/provider/auth selection with semantic validation - migrations/0001: full spec §14 schema incl. DB-enforced append-only audit_log - tc-db: compile-time-checked sqlx repos (workspaces, users, agents+policies, credits, audit) with committed .sqlx offline metadata - tc-testkit: per-test real-Postgres databases (testcontainers or TC_TEST_DATABASE_URL), embedded migrations Co-Authored-By: Claude Fable 5 <[email protected]>
17 lines
429 B
Rust
17 lines
429 B
Rust
use serde::{Deserialize, Serialize};
|
|
|
|
/// Workspace-level RBAC role (spec §14: User.role Owner|Member).
|
|
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
|
|
#[serde(rename_all = "lowercase")]
|
|
pub enum Role {
|
|
Owner,
|
|
Member,
|
|
}
|
|
|
|
impl Role {
|
|
/// Owners administer provisioning, billing, and access policy (spec §1).
|
|
pub fn is_owner(&self) -> bool {
|
|
matches!(self, Role::Owner)
|
|
}
|
|
}
|