Skip to content

Commit b5ab40f

Browse files
author
ljl
committed
Merge branch 'main' of https://github.com/ideal-world/bios
2 parents 17d9703 + edde2b9 commit b5ab40f

36 files changed

+922
-471
lines changed

basic/src/helper.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
pub mod bios_ctx_helper;
12
pub mod db_helper;
23
pub mod request_helper;
34
pub mod url_helper;

basic/src/helper/bios_ctx_helper.rs

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
use crate::rbum::rbum_config::RbumConfigApi;
2+
use tardis::{
3+
basic::{dto::TardisContext, error::TardisError, result::TardisResult},
4+
web::poem::Request,
5+
TardisFuns, TardisFunsInst,
6+
};
7+
8+
fn unsafe_check_ctx<F>(request: &Request, f: F, check: bool, funs: &TardisFunsInst, ctx: &mut TardisContext) -> TardisResult<()>
9+
where
10+
F: FnOnce(TardisContext, &mut TardisContext),
11+
{
12+
if check && !ctx.owner.is_empty() {
13+
return Ok(());
14+
}
15+
let bios_ctx = if let Some(bios_ctx) = request.header(&funs.rbum_head_key_bios_ctx()).or_else(|| request.header(&funs.rbum_head_key_bios_ctx().to_lowercase())) {
16+
TardisFuns::json.str_to_obj::<TardisContext>(&TardisFuns::crypto.base64.decode_to_string(bios_ctx)?)?
17+
} else {
18+
return Err(TardisError::unauthorized(
19+
&format!("[Basic] Request is not legal, missing header [{}]", funs.rbum_head_key_bios_ctx()),
20+
"401-auth-req-ak-not-exist",
21+
));
22+
};
23+
24+
if bios_ctx.own_paths.contains(&ctx.own_paths) {
25+
f(bios_ctx, ctx);
26+
27+
Ok(())
28+
} else {
29+
Err(TardisError::forbidden(
30+
&format!("[Basic] Request is not legal from head [{}]", funs.rbum_head_key_bios_ctx()),
31+
"403-auth-req-permission-denied",
32+
))
33+
}
34+
}
35+
36+
// xxx_check_own function will check the owner is empty or not.
37+
pub fn check_own_fill_ctx(request: &Request, funs: &TardisFunsInst, ctx: &mut TardisContext) -> TardisResult<()> {
38+
unsafe_check_ctx(
39+
request,
40+
|bios_ctx, ctx| {
41+
let mut roles = bios_ctx.roles.clone();
42+
for role in bios_ctx.roles.clone() {
43+
if role.contains(':') {
44+
let extend_role = role.split(':').collect::<Vec<_>>()[0];
45+
roles.push(extend_role.to_string());
46+
}
47+
}
48+
ctx.owner = bios_ctx.owner.clone();
49+
ctx.roles = roles;
50+
ctx.groups = bios_ctx.groups;
51+
ctx.own_paths = bios_ctx.own_paths;
52+
},
53+
true,
54+
funs,
55+
ctx,
56+
)
57+
}
58+
59+
pub fn unsafe_fill_ctx(request: &Request, funs: &TardisFunsInst, ctx: &mut TardisContext) -> TardisResult<()> {
60+
unsafe_check_ctx(
61+
request,
62+
|bios_ctx, ctx| {
63+
let mut roles = bios_ctx.roles.clone();
64+
for role in bios_ctx.roles.clone() {
65+
if role.contains(':') {
66+
let extend_role = role.split(':').collect::<Vec<_>>()[0];
67+
roles.push(extend_role.to_string());
68+
}
69+
}
70+
ctx.owner = bios_ctx.owner.clone();
71+
ctx.roles = roles;
72+
ctx.groups = bios_ctx.groups;
73+
ctx.own_paths = bios_ctx.own_paths;
74+
},
75+
false,
76+
funs,
77+
ctx,
78+
)
79+
}
80+
81+
pub fn unsfae_fill_owner_only(request: &Request, funs: &TardisFunsInst, ctx: &mut TardisContext) -> TardisResult<()> {
82+
unsafe_check_ctx(
83+
request,
84+
|bios_ctx, ctx| {
85+
ctx.owner = bios_ctx.owner.clone();
86+
},
87+
false,
88+
funs,
89+
ctx,
90+
)
91+
}
92+
93+
pub fn unsfae_fill_own_paths_only(request: &Request, funs: &TardisFunsInst, ctx: &mut TardisContext) -> TardisResult<()> {
94+
unsafe_check_ctx(
95+
request,
96+
|bios_ctx, ctx| {
97+
ctx.own_paths = bios_ctx.own_paths;
98+
},
99+
false,
100+
funs,
101+
ctx,
102+
)
103+
}
104+
105+
pub fn unsfae_fill_roles_only(request: &Request, funs: &TardisFunsInst, ctx: &mut TardisContext) -> TardisResult<()> {
106+
unsafe_check_ctx(
107+
request,
108+
|bios_ctx, ctx| {
109+
let mut roles = bios_ctx.roles.clone();
110+
for role in bios_ctx.roles.clone() {
111+
if role.contains(':') {
112+
let extend_role = role.split(':').collect::<Vec<_>>()[0];
113+
roles.push(extend_role.to_string());
114+
}
115+
}
116+
ctx.roles = roles;
117+
},
118+
false,
119+
funs,
120+
ctx,
121+
)
122+
}
123+
124+
pub fn unsfae_fill_groups_only(request: &Request, funs: &TardisFunsInst, ctx: &mut TardisContext) -> TardisResult<()> {
125+
unsafe_check_ctx(
126+
request,
127+
|bios_ctx, ctx| {
128+
ctx.groups = bios_ctx.groups;
129+
},
130+
false,
131+
funs,
132+
ctx,
133+
)
134+
}

basic/src/rbum/rbum_config.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ pub struct RbumConfig {
3030
pub cache_key_cert_err_times_: String,
3131
// table name (support prefix matching) -> <c><u><d>
3232
pub event_domains: HashMap<String, String>,
33+
pub head_key_bios_ctx: String,
3334
}
3435

3536
impl Default for RbumConfig {
@@ -49,6 +50,7 @@ impl Default for RbumConfig {
4950
cache_key_cert_locked_: "rbum:cert:locked:".to_string(),
5051
cache_key_cert_err_times_: "rbum:cert:err_times:".to_string(),
5152
event_domains: HashMap::from([("rbum_".to_string(), "cud".to_string())]),
53+
head_key_bios_ctx: "Bios-Ctx".to_string(),
5254
}
5355
}
5456
}
@@ -95,6 +97,7 @@ pub trait RbumConfigApi {
9597
fn rbum_conf_cache_key_cert_locked_(&self) -> String;
9698
fn rbum_conf_cache_key_cert_err_times_(&self) -> String;
9799
fn rbum_conf_match_event(&self, table_name: &str, operate: &str) -> bool;
100+
fn rbum_head_key_bios_ctx(&self) -> String;
98101
}
99102

100103
impl RbumConfigApi for TardisFunsInst {
@@ -153,4 +156,7 @@ impl RbumConfigApi for TardisFunsInst {
153156
fn rbum_conf_match_event(&self, table_name: &str, operate: &str) -> bool {
154157
RbumConfigManager::match_event(self.module_code(), table_name, operate)
155158
}
159+
fn rbum_head_key_bios_ctx(&self) -> String {
160+
RbumConfigManager::get_config(self.module_code(), |conf| conf.head_key_bios_ctx.to_string())
161+
}
156162
}

basic/src/rbum/serv/rbum_item_serv.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1100,13 +1100,13 @@ impl RbumCrudOperation<rbum_item_attr::ActiveModel, RbumItemAttrAddReq, RbumItem
11001100
(rbum_item_attr::Entity, rbum_item_attr::Column::CreateTime),
11011101
(rbum_item_attr::Entity, rbum_item_attr::Column::UpdateTime),
11021102
])
1103-
.expr_as(Expr::col((rbum_item::Entity, rbum_item::Column::Name)), Alias::new("rel_rbum_item_name"))
1103+
// .expr_as(Expr::col((rbum_item::Entity, rbum_item::Column::Name)), Alias::new("rel_rbum_item_name"))
11041104
.expr_as(Expr::col((rbum_kind_attr::Entity, rbum_kind_attr::Column::Name)), Alias::new("rel_rbum_kind_attr_name"))
11051105
.from(rbum_item_attr::Entity)
1106-
.inner_join(
1107-
rbum_item::Entity,
1108-
Expr::col((rbum_item::Entity, rbum_item::Column::Id)).equals((rbum_item_attr::Entity, rbum_item_attr::Column::RelRbumItemId)),
1109-
)
1106+
// .inner_join(
1107+
// rbum_item::Entity,
1108+
// Expr::col((rbum_item::Entity, rbum_item::Column::Id)).equals((rbum_item_attr::Entity, rbum_item_attr::Column::RelRbumItemId)),
1109+
// )
11101110
.inner_join(
11111111
rbum_kind_attr::Entity,
11121112
Expr::col((rbum_kind_attr::Entity, rbum_kind_attr::Column::Id)).equals((rbum_item_attr::Entity, rbum_item_attr::Column::RelRbumKindAttrId)),

gateway/spacegate-lib/src/marker.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+

gateway/spacegate-lib/src/plugin.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ pub mod anti_xss;
33
pub mod audit_log;
44
pub mod auth;
55
pub mod ip_time;
6-
pub mod rewrite_ns_b_ip;
6+
pub mod rewrite_ns_b_ip;

0 commit comments

Comments
 (0)