This commit is contained in:
2026-08-02 13:11:11 +02:00
parent bb4e17ba2f
commit c10925b84b
5 changed files with 119 additions and 3 deletions
+10
View File
@@ -116,6 +116,16 @@ impl ServerRepository {
.await?)
}
pub async fn get_user_permissions(
&self,
server_id: Uuid,
) -> AnyResult<Vec<server_user_permission::Model>> {
Ok(server_user_permission::Entity::find()
.filter(server_user_permission::Column::ServerId.eq(server_id))
.all(&self.context.db)
.await?)
}
pub async fn set_user_permission(
&self,
server_id: Uuid,
+23
View File
@@ -216,6 +216,23 @@ pub async fn get_user_permission(
Ok(Json(mapper::server_user_permission_to_response(permission)))
}
/// Liste les permissions directes des utilisateurs d'un serveur.
#[utoipa::path(
get,
path = "/servers/{server_id}/permissions/users",
params(("server_id" = Uuid, Path, description = "ID du serveur")),
responses((status = 200, body = [ServerUserPermissionResponse])),
tag = "Server Permissions"
)]
pub async fn list_user_permissions(
State(state): State<AppState>,
Path(server_id): Path<Uuid>,
) -> Result<Json<Vec<ServerUserPermissionResponse>>, HTTPError> {
state.repositories.server.get_by_id(server_id).await?.ok_or(HTTPError::NotFound)?;
let permissions = state.repositories.server.get_user_permissions(server_id).await?;
Ok(Json(permissions.into_iter().map(mapper::server_user_permission_to_response).collect()))
}
/// Définit ou remplace les permissions directes d'un utilisateur sur un serveur.
#[utoipa::path(
put,
@@ -232,10 +249,14 @@ pub async fn get_user_permission(
tag = "Server Permissions"
)]
pub async fn set_user_permission(
user: CurrentUser,
State(state): State<AppState>,
Path((server_id, user_id)): Path<(Uuid, Uuid)>,
Json(payload): Json<SetServerPermissionRequest>,
) -> Result<Json<ServerUserPermissionResponse>, HTTPError> {
require_server_permission(&state, &user, server_id, ServerPermission::MANAGE_MEMBERS).await?;
state.repositories.server.get_user(server_id, user_id).await?
.ok_or(HTTPError::BadRequest("User is not a member of this server".to_string()))?;
state
.repositories
.server
@@ -268,9 +289,11 @@ pub async fn set_user_permission(
tag = "Server Permissions"
)]
pub async fn remove_user_permission(
user: CurrentUser,
State(state): State<AppState>,
Path((server_id, user_id)): Path<(Uuid, Uuid)>,
) -> Result<StatusCode, HTTPError> {
require_server_permission(&state, &user, server_id, ServerPermission::MANAGE_MEMBERS).await?;
if state
.repositories
.server
+4
View File
@@ -12,6 +12,10 @@ pub fn router() -> Router<AppState> {
.delete(handlers::delete),
)
.route("/servers/{server_id}/tree", get(handlers::get_tree))
.route(
"/servers/{server_id}/permissions/users",
get(handlers::list_user_permissions),
)
.route(
"/servers/{server_id}/permissions/users/{user_id}",
get(handlers::get_user_permission)