shared/application/rbac/
permission_service.rs1use crate::error::Result;
2
3use crate::domain::model::Permission;
4use crate::intern::rbac::RbacService;
5
6impl RbacService {
7 #[tracing::instrument(name = "auth.insert_permission", skip(self, name))]
8 pub async fn upsert_permission(&self, name: &str) -> Result<String> {
9 let permission = Permission::new(name);
10
11 self.permission_repository.insert(permission).await
12 }
13
14 #[tracing::instrument(name = "auth.insert_permissions", skip(self, names))]
15 pub async fn upsert_permissions(&self, names: Vec<String>) -> Result<Vec<String>> {
16 let permissions: Vec<Permission> = names.iter().map(|n| Permission::new(n)).collect();
17
18 self.permission_repository.upsert_many(permissions).await
19 }
20
21 #[tracing::instrument(name = "auth.find_permission", skip(self, role_id))]
22 pub async fn find_permissions_by_role_id(&self, role_id: &str) -> Result<Vec<Permission>> {
23 let role_permissions = self.role_permission_repository.find_all(role_id).await?;
24
25 let permission_ids: Vec<String> = role_permissions
26 .iter()
27 .map(|rp| rp.permission_id.clone())
28 .collect();
29
30 self.permission_repository.find_by_ids(permission_ids).await
31 }
32}