Skip to main content

shared/application/rbac/
role_permission_service.rs

1use crate::error::Result;
2
3use crate::domain::model::RolePermission;
4use crate::intern::rbac::RbacService;
5
6impl RbacService {
7    #[tracing::instrument(
8        name = "auth.insert_role_permission",
9        skip(self, role_id, permission_id)
10    )]
11    pub async fn insert_role_permission(&self, role_id: &str, permission_id: &str) -> Result<()> {
12        let role_permission = RolePermission::new(role_id, permission_id);
13
14        self.role_permission_repository
15            .insert(role_permission)
16            .await
17    }
18
19    #[tracing::instrument(
20        name = "auth.insert_role_permissions",
21        skip(self, role_id, permission_ids)
22    )]
23    pub async fn upsert_role_permissions(
24        &self,
25        role_id: &str,
26        permission_ids: Vec<String>,
27    ) -> Result<()> {
28        let role_permissions: Vec<RolePermission> = permission_ids
29            .iter()
30            .map(|p_id| RolePermission::new(role_id, p_id))
31            .collect();
32
33        self.role_permission_repository
34            .upsert_many(role_permissions)
35            .await
36    }
37
38    #[tracing::instrument(
39        name = "auth.find_role_permission", skip(self), fields(user.id = user_id)
40    )]
41    pub async fn find_role_permissions(&self, user_id: &str) -> Result<RolePermission> {
42        self.role_permission_repository.find(user_id).await
43    }
44}