pub mod error;
pub mod models;
pub mod storage;
pub mod cache;
pub mod middleware;
pub use models::permission::Permission;
pub use models::role::Role;
pub use models::subject::RbacSubject;
pub use storage::traits::RbacStorage;
pub use storage::memory::MemoryStorage;
pub struct RbacService<S: RbacStorage> {
storage: S,
}
impl<S: RbacStorage> RbacService<S> {
pub fn new(storage: S) -> Self {
Self { storage }
}
pub async fn create_permission(&self, permission: &Permission) -> Result<(), error::RbacError> {
self.storage.create_permission(permission).await
}
pub async fn get_permission(&self, name: &str) -> Result<Option<Permission>, error::RbacError> {
self.storage.get_permission(name).await
}
pub async fn delete_permission(&self, name: &str) -> Result<(), error::RbacError> {
self.storage.delete_permission(name).await
}
pub async fn create_role(&self, role: &Role) -> Result<(), error::RbacError> {
self.storage.create_role(role).await
}
pub async fn get_role(&self, name: &str) -> Result<Option<Role>, error::RbacError> {
self.storage.get_role(name).await
}
pub async fn delete_role(&self, name: &str) -> Result<(), error::RbacError> {
self.storage.delete_role(name).await
}
pub async fn assign_permission_to_role(&self, permission_name: &str, role_name: &str) -> Result<(), error::RbacError> {
self.storage.assign_permission_to_role(permission_name, role_name).await
}
pub async fn remove_permission_from_role(&self, permission_name: &str, role_name: &str) -> Result<(), error::RbacError> {
self.storage.remove_permission_from_role(permission_name, role_name).await
}
pub async fn get_permissions_for_role(&self, role_name: &str) -> Result<Vec<Permission>, error::RbacError> {
self.storage.get_permissions_for_role(role_name).await
}
pub async fn assign_role_to_subject(&self, role_name: &str, subject_id: &str) -> Result<(), error::RbacError> {
self.storage.assign_role_to_subject(role_name, subject_id).await
}
pub async fn remove_role_from_subject(&self, role_name: &str, subject_id: &str) -> Result<(), error::RbacError> {
self.storage.remove_role_from_subject(role_name, subject_id).await
}
pub async fn get_roles_for_subject(&self, subject_id: &str) -> Result<Vec<Role>, error::RbacError> {
self.storage.get_roles_for_subject(subject_id).await
}
pub async fn assign_permission_to_subject(&self, permission_name: &str, subject_id: &str) -> Result<(), error::RbacError> {
self.storage.assign_permission_to_subject(permission_name, subject_id).await
}
pub async fn remove_permission_from_subject(&self, permission_name: &str, subject_id: &str) -> Result<(), error::RbacError> {
self.storage.remove_permission_from_subject(permission_name, subject_id).await
}
pub async fn get_direct_permissions_for_subject(&self, subject_id: &str) -> Result<Vec<Permission>, error::RbacError> {
self.storage.get_direct_permissions_for_subject(subject_id).await
}
pub async fn subject_has_permission(&self, subject_id: &str, permission_name: &str) -> Result<bool, error::RbacError> {
self.storage.subject_has_permission(subject_id, permission_name).await
}
}