48 lines
1.1 KiB
Rust
48 lines
1.1 KiB
Rust
use db::permissions::PermissionRaw;
|
|
|
|
use crate::prelude::*;
|
|
|
|
#[derive(Deserialize, Debug)]
|
|
pub struct Params {
|
|
folder_id: Uuid,
|
|
permission_type: PermissionRaw,
|
|
user_id: i32,
|
|
}
|
|
|
|
pub async fn set(
|
|
claims: Claims,
|
|
State(pool): State<Pool>,
|
|
Json(params): Json<Params>,
|
|
) -> Result<StatusCode, StatusCode> {
|
|
let root = db::folder::get_root(claims.user_id, &pool)
|
|
.await
|
|
.handle_internal()?;
|
|
if params.folder_id == root {
|
|
return Err(StatusCode::BAD_REQUEST);
|
|
}
|
|
|
|
db::folder::get_permissions(params.folder_id, claims.user_id, &pool)
|
|
.await
|
|
.handle_internal()?
|
|
.can_manage_guard()?;
|
|
|
|
let folder_info = db::folder::get_by_id(params.folder_id, &pool)
|
|
.await
|
|
.handle_internal()?
|
|
.ok_or(StatusCode::NOT_FOUND)?;
|
|
if folder_info.owner_id == params.user_id {
|
|
return Err(StatusCode::BAD_REQUEST);
|
|
}
|
|
|
|
db::permissions::insert(
|
|
params.user_id,
|
|
params.folder_id,
|
|
params.permission_type,
|
|
&pool,
|
|
)
|
|
.await
|
|
.handle_internal()?;
|
|
|
|
Ok(StatusCode::NO_CONTENT)
|
|
}
|