1pub mod error;
62pub mod models;
63pub mod storage;
64pub mod cache;
65pub mod middleware;
66
67pub use models::permission::Permission;
68pub use models::role::Role;
69pub use models::subject::RbacSubject;
70pub use storage::traits::RbacStorage;
71pub use storage::memory::MemoryStorage;
72
73pub struct RbacService<S: RbacStorage> {
75 storage: S,
76}
77
78impl<S: RbacStorage> RbacService<S> {
79 pub fn new(storage: S) -> Self {
81 Self { storage }
82 }
83
84 pub async fn create_permission(&self, permission: &Permission) -> Result<(), error::RbacError> {
86 self.storage.create_permission(permission).await
87 }
88
89 pub async fn get_permission(&self, name: &str) -> Result<Option<Permission>, error::RbacError> {
91 self.storage.get_permission(name).await
92 }
93
94 pub async fn delete_permission(&self, name: &str) -> Result<(), error::RbacError> {
96 self.storage.delete_permission(name).await
97 }
98
99 pub async fn create_role(&self, role: &Role) -> Result<(), error::RbacError> {
101 self.storage.create_role(role).await
102 }
103
104 pub async fn get_role(&self, name: &str) -> Result<Option<Role>, error::RbacError> {
106 self.storage.get_role(name).await
107 }
108
109 pub async fn delete_role(&self, name: &str) -> Result<(), error::RbacError> {
111 self.storage.delete_role(name).await
112 }
113
114 pub async fn assign_permission_to_role(&self, permission_name: &str, role_name: &str) -> Result<(), error::RbacError> {
116 self.storage.assign_permission_to_role(permission_name, role_name).await
117 }
118
119 pub async fn remove_permission_from_role(&self, permission_name: &str, role_name: &str) -> Result<(), error::RbacError> {
121 self.storage.remove_permission_from_role(permission_name, role_name).await
122 }
123
124 pub async fn get_permissions_for_role(&self, role_name: &str) -> Result<Vec<Permission>, error::RbacError> {
126 self.storage.get_permissions_for_role(role_name).await
127 }
128
129 pub async fn assign_role_to_subject(&self, role_name: &str, subject_id: &str) -> Result<(), error::RbacError> {
131 self.storage.assign_role_to_subject(role_name, subject_id).await
132 }
133
134 pub async fn remove_role_from_subject(&self, role_name: &str, subject_id: &str) -> Result<(), error::RbacError> {
136 self.storage.remove_role_from_subject(role_name, subject_id).await
137 }
138
139 pub async fn get_roles_for_subject(&self, subject_id: &str) -> Result<Vec<Role>, error::RbacError> {
141 self.storage.get_roles_for_subject(subject_id).await
142 }
143
144 pub async fn assign_permission_to_subject(&self, permission_name: &str, subject_id: &str) -> Result<(), error::RbacError> {
146 self.storage.assign_permission_to_subject(permission_name, subject_id).await
147 }
148
149 pub async fn remove_permission_from_subject(&self, permission_name: &str, subject_id: &str) -> Result<(), error::RbacError> {
151 self.storage.remove_permission_from_subject(permission_name, subject_id).await
152 }
153
154 pub async fn get_direct_permissions_for_subject(&self, subject_id: &str) -> Result<Vec<Permission>, error::RbacError> {
156 self.storage.get_direct_permissions_for_subject(subject_id).await
157 }
158
159 pub async fn subject_has_permission(&self, subject_id: &str, permission_name: &str) -> Result<bool, error::RbacError> {
161 self.storage.subject_has_permission(subject_id, permission_name).await
162 }
163}