Skip to main content

shared/application/rbac/
permission_service.rs

1use 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}