init
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user