use alloc::vec;
use miden_protocol::account::{AccountComponent, AccountId, RoleSymbol};
pub mod authority;
pub mod ownable2step;
pub mod pausable;
pub mod rbac;
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum AccessControl {
AuthControlled,
Ownable2Step { owner: AccountId },
Rbac {
owner: AccountId,
authority_role: Option<RoleSymbol>,
},
}
impl IntoIterator for AccessControl {
type Item = AccountComponent;
type IntoIter = alloc::vec::IntoIter<AccountComponent>;
fn into_iter(self) -> Self::IntoIter {
match self {
AccessControl::AuthControlled => vec![Authority::AuthControlled.into()].into_iter(),
AccessControl::Ownable2Step { owner } => {
vec![Ownable2Step::new(owner).into(), Authority::OwnerControlled.into()].into_iter()
},
AccessControl::Rbac { owner, authority_role: None } => vec![
Ownable2Step::new(owner).into(),
RoleBasedAccessControl::empty().into(),
Authority::OwnerControlled.into(),
]
.into_iter(),
AccessControl::Rbac { owner, authority_role: Some(role) } => vec![
Ownable2Step::new(owner).into(),
RoleBasedAccessControl::empty().into(),
Authority::RbacControlled { role }.into(),
]
.into_iter(),
}
}
}
pub use authority::{Authority, AuthorityError};
pub use ownable2step::{Ownable2Step, Ownable2StepError};
pub use pausable::{Pausable, PausableManager, PausableStorage};
pub use rbac::RoleBasedAccessControl;