From 8918bd3f2a9f45f7dbc907dfc64f129840f71356 Mon Sep 17 00:00:00 2001 From: ljl <17743125563@163.com> Date: Fri, 17 Nov 2023 10:27:05 +0800 Subject: [PATCH] iam:fix role add async task. --- .../src/console_app/api/iam_ca_role_api.rs | 8 +++- .../console_interface/api/iam_ci_role_api.rs | 40 +++++++++++++------ .../src/console_system/api/iam_cs_role_api.rs | 8 +++- .../src/console_tenant/api/iam_ct_role_api.rs | 8 +++- 4 files changed, 45 insertions(+), 19 deletions(-) diff --git a/support/iam/src/console_app/api/iam_ca_role_api.rs b/support/iam/src/console_app/api/iam_ca_role_api.rs index d880c84cb..12ae9ae46 100644 --- a/support/iam/src/console_app/api/iam_ca_role_api.rs +++ b/support/iam/src/console_app/api/iam_ca_role_api.rs @@ -125,7 +125,7 @@ impl IamCaRoleApi { /// Delete Role By Role Id #[oai(path = "/:id", method = "delete")] - async fn delete(&self, id: Path, ctx: TardisContextExtractor, request: &Request) -> TardisApiResult { + async fn delete(&self, id: Path, ctx: TardisContextExtractor, request: &Request) -> TardisApiResult> { add_remote_ip(request, &ctx.0).await?; let mut funs = iam_constants::get_tardis_inst(); funs.begin().await?; @@ -155,7 +155,11 @@ impl IamCaRoleApi { IamRoleServ::delete_item_with_all_rels(&id.0, &funs, &ctx.0).await?; funs.commit().await?; ctx.0.execute_task().await?; - TardisResp::ok(Void {}) + if let Some(task_id) = TaskProcessor::get_task_id_with_ctx(&ctx.0).await? { + TardisResp::accepted(Some(task_id)) + } else { + TardisResp::ok(None) + } } /// Add Role Rel Account diff --git a/support/iam/src/console_interface/api/iam_ci_role_api.rs b/support/iam/src/console_interface/api/iam_ci_role_api.rs index afbdccdfb..29c27ceaa 100644 --- a/support/iam/src/console_interface/api/iam_ci_role_api.rs +++ b/support/iam/src/console_interface/api/iam_ci_role_api.rs @@ -1,13 +1,16 @@ +use tardis::tokio; use crate::basic::serv::iam_app_serv::IamAppServ; use crate::basic::serv::iam_cert_serv::IamCertServ; use crate::basic::serv::iam_role_serv::IamRoleServ; use crate::iam_constants::{self, RBUM_SCOPE_LEVEL_APP}; use bios_basic::helper::request_helper::add_remote_ip; use tardis::web::context_extractor::TardisContextExtractor; -use tardis::web::poem::Request; +use tardis::web::poem::{Request, RequestBody}; use tardis::web::poem_openapi; use tardis::web::poem_openapi::param::{Path, Query}; use tardis::web::web_resp::{TardisApiResult, TardisResp, Void}; +use bios_basic::process::task_processor::TaskProcessor; + #[derive(Clone, Default)] pub struct IamCiRoleApi; @@ -69,23 +72,34 @@ impl IamCiRoleApi { account_ids: Query, ctx: TardisContextExtractor, request: &Request, - ) -> TardisApiResult { + ) -> TardisApiResult> { add_remote_ip(request, &ctx.0).await?; let ctx = ctx.0; - let mut funs = iam_constants::get_tardis_inst(); - funs.begin().await?; let apps_split: Vec<&str> = app_ids.0.split(',').collect::>(); let account_split: Vec<&str> = account_ids.0.split(',').collect::>(); - for app_id in apps_split { - let mock_app_ctx = IamCertServ::try_use_app_ctx(ctx.clone(), Some(app_id.to_string()))?; - for account_id in account_split.clone() { - IamAppServ::add_rel_account(app_id, account_id, true, &funs, &mock_app_ctx).await?; - IamRoleServ::add_rel_account(&id.0, account_id, Some(RBUM_SCOPE_LEVEL_APP), &funs, &mock_app_ctx).await?; - } - } - funs.commit().await?; + let ctx_clone = ctx.clone(); + ctx.add_async_task(Box::new(|| { + Box::pin(async move { + let task_handle = tokio::spawn(async move { + let funs = iam_constants::get_tardis_inst(); + for app_id in apps_split { + let mock_app_ctx = IamCertServ::try_use_app_ctx(ctx_clone.clone(), Some(app_id.to_string())).unwrap_or(ctx_clone.clone()); + for account_id in account_split.clone() { + let _ = IamAppServ::add_rel_account(app_id, account_id, true, &funs, &mock_app_ctx).await; + let _ = IamRoleServ::add_rel_account(&id.0, account_id, Some(RBUM_SCOPE_LEVEL_APP), &funs, &mock_app_ctx).await; + } + } + }); + task_handle.await.unwrap(); + Ok(()) + }) + })).await?; ctx.execute_task().await?; - TardisResp::ok(Void {}) + if let Some(task_id) = TaskProcessor::get_task_id_with_ctx(&ctx).await? { + TardisResp::accepted(Some(task_id)) + } else { + TardisResp::ok(None) + } } /// Add Role Rel Account diff --git a/support/iam/src/console_system/api/iam_cs_role_api.rs b/support/iam/src/console_system/api/iam_cs_role_api.rs index 971146b98..5453ab25d 100644 --- a/support/iam/src/console_system/api/iam_cs_role_api.rs +++ b/support/iam/src/console_system/api/iam_cs_role_api.rs @@ -122,7 +122,7 @@ impl IamCsRoleApi { /// Delete Role By Role Id #[oai(path = "/:id", method = "delete")] - async fn delete(&self, id: Path, tenant_id: Query>, ctx: TardisContextExtractor, request: &Request) -> TardisApiResult { + async fn delete(&self, id: Path, tenant_id: Query>, ctx: TardisContextExtractor, request: &Request) -> TardisApiResult> { let ctx = IamCertServ::try_use_tenant_ctx(ctx.0, tenant_id.0)?; add_remote_ip(request, &ctx).await?; let mut funs = iam_constants::get_tardis_inst(); @@ -130,7 +130,11 @@ impl IamCsRoleApi { IamRoleServ::delete_item_with_all_rels(&id.0, &funs, &ctx).await?; funs.commit().await?; ctx.execute_task().await?; - TardisResp::ok(Void {}) + if let Some(task_id) = TaskProcessor::get_task_id_with_ctx(&ctx).await? { + TardisResp::accepted(Some(task_id)) + } else { + TardisResp::ok(None) + } } /// Add Role Rel Account diff --git a/support/iam/src/console_tenant/api/iam_ct_role_api.rs b/support/iam/src/console_tenant/api/iam_ct_role_api.rs index a519e39ba..af1e9f321 100644 --- a/support/iam/src/console_tenant/api/iam_ct_role_api.rs +++ b/support/iam/src/console_tenant/api/iam_ct_role_api.rs @@ -121,14 +121,18 @@ impl IamCtRoleApi { /// Delete Role By Role Id #[oai(path = "/:id", method = "delete")] - async fn delete(&self, id: Path, ctx: TardisContextExtractor, request: &Request) -> TardisApiResult { + async fn delete(&self, id: Path, ctx: TardisContextExtractor, request: &Request) -> TardisApiResult> { add_remote_ip(request, &ctx.0).await?; let mut funs = iam_constants::get_tardis_inst(); funs.begin().await?; IamRoleServ::delete_item_with_all_rels(&id.0, &funs, &ctx.0).await?; funs.commit().await?; ctx.0.execute_task().await?; - TardisResp::ok(Void {}) + if let Some(task_id) = TaskProcessor::get_task_id_with_ctx(&ctx.0).await? { + TardisResp::accepted(Some(task_id)) + } else { + TardisResp::ok(None) + } } /// Add Role Rel Account