Skip to main content

shared/application/rbac/
role_service.rs

1use crate::error::Result;
2
3use crate::domain::model::Role;
4use crate::intern::rbac::RbacService;
5
6impl RbacService {
7    #[tracing::instrument(name = "auth.insert_role", skip(self, name))]
8    pub async fn upsert_role(&self, name: &str) -> Result<String> {
9        let role = Role::new(name);
10        self.role_repository.insert(role).await
11    }
12
13    #[tracing::instrument(name = "auth.find_role", skip(self, name))]
14    pub async fn find_role(&self, name: &str) -> Result<Role> {
15        self.role_repository.find(name).await
16    }
17
18    #[tracing::instrument(
19        name = "auth.find_roles_by_user_id", skip(self), fields(user.id = user_id)
20    )]
21    pub async fn find_roles_by_user_id(&self, user_id: &str) -> Result<Vec<Role>> {
22        let user_roles = self.user_role_repository.find_all(user_id).await?;
23
24        let role_ids: Vec<String> = user_roles.iter().map(|ur| ur.role_id.clone()).collect();
25
26        self.role_repository.find_by_ids(role_ids).await
27    }
28}