Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions backend/supports/iam/src/basic/dto/iam_app_dto.rs
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,16 @@ pub struct IamAppDetailResp {
pub kind: IamAppKind,
}

/// Batch modify app set category request
///
/// 批量修改应用集合分类请求
#[derive(poem_openapi::Object, Serialize, Deserialize, Debug)]
pub struct IamAppBatchModifySetCateReq {
pub app_ids: Vec<String>,
#[oai(validator(min_length = "2", max_length = "255"))]
pub set_cate_id: String,
}

/// Transfer ownership request for app
///
/// 应用转移所有权请求
Expand Down
24 changes: 24 additions & 0 deletions backend/supports/iam/src/basic/serv/iam_app_serv.rs
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,30 @@ impl IamAppServ {
Ok(())
}

pub async fn batch_modify_set_cate(app_ids: &[String], set_cate_id: &str, funs: &TardisFunsInst, ctx: &TardisContext) -> TardisResult<()> {
let tenant_ctx = IamCertServ::use_sys_or_tenant_ctx_unsafe(ctx.clone())?;
let apps_set_id = IamSetServ::get_default_set_id_by_ctx(&IamSetKind::Apps, funs, &tenant_ctx).await?;
for app_id in app_ids {
let set_items = IamSetServ::find_set_items(Some(apps_set_id.clone()), None, Some(app_id.to_owned()), None, true, Some(true), funs, &tenant_ctx).await?;
let sort = set_items.first().map(|set_item| set_item.sort).unwrap_or(0);
for set_item in set_items {
IamSetServ::delete_set_item(&set_item.id, funs, &tenant_ctx).await?;
}
IamSetServ::add_set_item(
&IamSetItemAddReq {
set_id: apps_set_id.clone(),
set_cate_id: set_cate_id.to_string(),
sort,
rel_rbum_item_id: app_id.to_string(),
},
funs,
&tenant_ctx,
)
.await?;
}
Ok(())
}

pub async fn find_rel_account(app_id: &str, funs: &TardisFunsInst, ctx: &TardisContext) -> TardisResult<Vec<RbumRelBoneResp>> {
IamRelServ::find_to_simple_rels(&IamRelKind::IamAccountApp, app_id, None, None, funs, ctx).await
}
Expand Down
16 changes: 15 additions & 1 deletion backend/supports/iam/src/console_interface/api/iam_ci_app_api.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use std::collections::HashSet;

use crate::basic::dto::iam_app_dto::{IamAppAggAddReq, IamAppAggModifyReq};
use crate::basic::dto::iam_app_dto::{IamAppAggAddReq, IamAppAggModifyReq, IamAppBatchModifySetCateReq};
use crate::basic::dto::iam_filer_dto::IamAppFilterReq;
use crate::basic::serv::iam_app_serv::IamAppServ;

Expand Down Expand Up @@ -268,6 +268,20 @@ impl IamCiAppApi {
TardisResp::ok(result)
}

/// Batch Modify App Set Category
/// 批量修改应用集合分类
#[oai(path = "/set_cate/batch", method = "put")]
async fn batch_modify_set_cate(&self, modify_req: Json<IamAppBatchModifySetCateReq>, mut ctx: TardisContextExtractor, request: &Request) -> TardisApiResult<Void> {
let mut funs = iam_constants::get_tardis_inst();
check_without_owner_and_unsafe_fill_ctx(request, &funs, &mut ctx.0)?;
try_set_real_ip_from_req_to_ctx(request, &ctx.0).await?;
funs.begin().await?;
IamAppServ::batch_modify_set_cate(&modify_req.0.app_ids, &modify_req.0.set_cate_id, &funs, &ctx.0).await?;
funs.commit().await?;
ctx.0.execute_task().await?;
TardisResp::ok(Void {})
}

/// Add App Rel Account
/// 添加应用关联账号
#[oai(path = "/:id/account/:account_id", method = "put")]
Expand Down
1 change: 1 addition & 0 deletions backend/supports/iam/tests/test_iam_scenes_passport.rs
Original file line number Diff line number Diff line change
Expand Up @@ -784,6 +784,7 @@ pub async fn login_by_oauth2(client: &mut BIOSWebTestClient) -> TardisResult<()>
supplier: TrimString(IamCertOAuth2Supplier::WechatMp.to_string()),
ak: TrimString(app_id.to_string()),
sk: TrimString(secret.to_string()),
base_url: None,
}]),
cert_conf_by_ldap: None,
},
Expand Down
Loading