Skip to main content

async_openai/admin/
user_roles.rs

1use crate::{
2    config::Config,
3    error::OpenAIError,
4    types::admin::{
5        roles::{AssignedRoleDetails, DeletedRoleAssignmentResource, RoleListResource},
6        users::{PublicAssignOrganizationUserRoleBody, UserRoleAssignment},
7    },
8    Client, RequestOptions,
9};
10
11/// Manage role assignments for users in the organization.
12pub struct UserRoles<'c, C: Config> {
13    client: &'c Client<C>,
14    pub user_id: String,
15    pub(crate) request_options: RequestOptions,
16}
17
18impl<'c, C: Config> UserRoles<'c, C> {
19    pub fn new(client: &'c Client<C>, user_id: &str) -> Self {
20        Self {
21            client,
22            user_id: user_id.into(),
23            request_options: RequestOptions::new(),
24        }
25    }
26
27    /// Lists all role assignments for a user.
28    #[crate::byot(R = serde::de::DeserializeOwned)]
29    pub async fn list(&self) -> Result<RoleListResource, OpenAIError> {
30        self.client
31            .get(
32                format!("/organization/users/{}/roles", self.user_id).as_str(),
33                &self.request_options,
34            )
35            .await
36    }
37
38    /// Assigns a role to a user.
39    #[crate::byot(T0 = serde::Serialize, R = serde::de::DeserializeOwned)]
40    pub async fn assign(
41        &self,
42        request: PublicAssignOrganizationUserRoleBody,
43    ) -> Result<UserRoleAssignment, OpenAIError> {
44        self.client
45            .post(
46                format!("/organization/users/{}/roles", self.user_id).as_str(),
47                request,
48                &self.request_options,
49            )
50            .await
51    }
52
53    /// Unassigns a role from a user.
54    #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
55    pub async fn unassign(
56        &self,
57        role_id: &str,
58    ) -> Result<DeletedRoleAssignmentResource, OpenAIError> {
59        self.client
60            .delete(
61                format!("/organization/users/{}/roles/{}", self.user_id, role_id).as_str(),
62                &self.request_options,
63            )
64            .await
65    }
66
67    /// Retrieves an organization role assigned to a user.
68    #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
69    pub async fn retrieve(&self, role_id: &str) -> Result<AssignedRoleDetails, OpenAIError> {
70        self.client
71            .get(
72                &format!(
73                    "/organization/users/{user_id}/roles/{role_id}",
74                    user_id = self.user_id
75                ),
76                &self.request_options,
77            )
78            .await
79    }
80}