mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-09-12 00:06:14 +00:00
fix: simplify folder creation by non admins
This commit is contained in:
@@ -169,38 +169,39 @@ async fn create_folder(
|
||||
check_name_conflict(&mut tx, &w_id, &ng.name).await?;
|
||||
cache.invalidate(&w_id, token).await;
|
||||
let owner = username_to_permissioned_as(&authed.username);
|
||||
let owners = &ng.owners.unwrap_or_else(|| vec![owner.clone()]);
|
||||
let owners = ng.owners.unwrap_or_else(|| vec![owner.clone()]);
|
||||
let owners = if owners.contains(&owner) {
|
||||
owners.clone()
|
||||
} else {
|
||||
owners
|
||||
.iter()
|
||||
.cloned()
|
||||
.chain(std::iter::once(owner))
|
||||
.collect()
|
||||
};
|
||||
|
||||
if let Some(extra_perms) = ng.extra_perms.clone() {
|
||||
for o in owners {
|
||||
if !extra_perms
|
||||
.get(&o)
|
||||
.and_then(|x| x.as_bool())
|
||||
.unwrap_or(false)
|
||||
{
|
||||
return Err(windmill_common::error::Error::BadRequest(format!(
|
||||
"Owner {} would not have permission to write to folder and that is an inconsistent state",
|
||||
o
|
||||
)));
|
||||
}
|
||||
let mut extra_perms = ng
|
||||
.extra_perms
|
||||
.unwrap_or_else(|| serde_json::Value::Object(serde_json::Map::new()));
|
||||
|
||||
if extra_perms.is_object() {
|
||||
let extra_mut = extra_perms.as_object_mut().unwrap();
|
||||
for o in &owners {
|
||||
extra_mut.insert(o.clone(), serde_json::json!(true));
|
||||
}
|
||||
} else {
|
||||
return Err(windmill_common::error::Error::BadRequest(format!(
|
||||
"extra_perms must be an object"
|
||||
)));
|
||||
}
|
||||
|
||||
let extra_perms = ng.extra_perms.unwrap_or_else(|| {
|
||||
let mut map = serde_json::Map::new();
|
||||
for o in owners {
|
||||
map.insert(o.clone(), serde_json::json!(true));
|
||||
}
|
||||
serde_json::Value::Object(map)
|
||||
});
|
||||
|
||||
sqlx::query_as!(
|
||||
Folder,
|
||||
"INSERT INTO folder (workspace_id, name, display_name, owners, extra_perms) VALUES ($1, $2, $3, $4, $5)",
|
||||
w_id,
|
||||
ng.name,
|
||||
ng.display_name.unwrap_or(ng.name.clone()),
|
||||
owners,
|
||||
&owners,
|
||||
extra_perms,
|
||||
)
|
||||
.execute(&mut *tx)
|
||||
|
||||
Reference in New Issue
Block a user