sova-scope 0.1.1

Scoped RBAC (tenant/workspace membership, role matrix, ownership hooks) for Sova
Documentation
use sea_orm::entity::prelude::*;
use serde::{Deserialize, Serialize};

pub mod scope_membership {
    use super::*;

    #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Serialize, Deserialize)]
    #[sea_orm(table_name = "scope_memberships")]
    pub struct Model {
        #[sea_orm(primary_key)]
        pub id: i64,
        pub scope_kind: String,
        pub scope_id: i64,
        pub user_id: i64,
        pub role: String,
    }

    #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
    pub enum Relation {}

    impl ActiveModelBehavior for ActiveModel {}
}

#[cfg(feature = "invites")]
pub mod scope_invitation {
    use super::*;

    #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Serialize, Deserialize)]
    #[sea_orm(table_name = "scope_invitations")]
    pub struct Model {
        #[sea_orm(primary_key)]
        pub id: i64,
        pub scope_kind: String,
        pub scope_id: i64,
        pub email: String,
        pub role: String,
        pub invited_by: i64,
        pub token: String,
        pub status: String,
        pub created_at: chrono::DateTime<chrono::Utc>,
    }

    #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
    pub enum Relation {}

    impl ActiveModelBehavior for ActiveModel {}
}

pub mod scope_membership_audit {
    use super::*;

    #[derive(Clone, Debug, PartialEq, DeriveEntityModel, Serialize, Deserialize)]
    #[sea_orm(table_name = "scope_membership_audit")]
    pub struct Model {
        #[sea_orm(primary_key)]
        pub id: i64,
        pub scope_kind: String,
        pub scope_id: i64,
        pub user_id: i64,
        pub actor_id: Option<i64>,
        pub action: String,
        pub old_role: Option<String>,
        pub new_role: Option<String>,
        pub created_at: chrono::DateTime<chrono::Utc>,
    }

    #[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
    pub enum Relation {}

    impl ActiveModelBehavior for ActiveModel {}
}

pub use scope_membership::Entity as ScopeMembership;
pub use scope_membership_audit::Entity as ScopeMembershipAudit;

#[cfg(feature = "invites")]
pub use scope_invitation::Entity as ScopeInvitation;