mod config;
mod error;
mod impl_;
mod interface;
mod types;
pub use config::{DefaultPolicy, PermissionConfig};
pub use error::{PermissionConfigError, PermissionError};
pub use interface::{PermissionChecker, PermissionLifecycle, PermissionProvider, PolicyManager};
pub use types::{PermissionAction, PolicySet, RolePolicy, TablePermission};
pub async fn new(config: PermissionConfig) -> Result<impl PermissionProvider, PermissionConfigError> {
config.validate()?;
impl_::default::YamlPermissionProvider::new(config)
.await
.map_err(|e| PermissionConfigError::InvalidValue {
field: "policy_path".into(),
reason: e.to_string(),
})
}
#[cfg(feature = "cache")]
pub async fn with_cache(
config: PermissionConfig,
cache: std::sync::Arc<oxcache::Cache<String, RolePolicy>>,
) -> Result<impl PermissionProvider, PermissionConfigError> {
config.validate()?;
impl_::default::YamlPermissionProvider::with_cache(config, cache)
.await
.map_err(|e| PermissionConfigError::InvalidValue {
field: "policy_path".into(),
reason: e.to_string(),
})
}
pub fn new_in_memory() -> impl PermissionProvider {
impl_::memory::MemoryPermissionProvider::new()
}