mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 17:30:23 +08:00
fix: exempt admins from default user group limits
This commit is contained in:
@@ -152,6 +152,16 @@ impl<'a> AdminAppState<'a> {
|
||||
self.app.include_default_user_group_ids(group_ids).await
|
||||
}
|
||||
|
||||
pub(crate) async fn include_default_user_group_ids_for_role(
|
||||
&self,
|
||||
group_ids: &[String],
|
||||
role: &str,
|
||||
) -> Result<Vec<String>, GatewayError> {
|
||||
self.app
|
||||
.include_default_user_group_ids_for_role(group_ids, role)
|
||||
.await
|
||||
}
|
||||
|
||||
pub(crate) async fn effective_default_user_group_id(
|
||||
&self,
|
||||
) -> Result<Option<String>, GatewayError> {
|
||||
|
||||
@@ -192,7 +192,7 @@ pub(in super::super) async fn build_admin_create_user_response(
|
||||
};
|
||||
let requested_group_ids = normalize_admin_user_group_ids(payload.group_ids);
|
||||
let group_ids = state
|
||||
.include_default_user_group_ids(&requested_group_ids)
|
||||
.include_default_user_group_ids_for_role(&requested_group_ids, &role)
|
||||
.await?;
|
||||
let groups = if group_ids.is_empty() {
|
||||
Vec::new()
|
||||
|
||||
@@ -29,7 +29,7 @@ pub(in super::super) async fn build_admin_update_user_response(
|
||||
let Some(user_id) = admin_user_id_from_detail_path(request_context.path()) else {
|
||||
return Ok(build_admin_users_bad_request_response("缺少 user_id"));
|
||||
};
|
||||
let Some(_existing_user) = state.find_user_auth_by_id(&user_id).await? else {
|
||||
let Some(existing_user) = state.find_user_auth_by_id(&user_id).await? else {
|
||||
return Ok((
|
||||
http::StatusCode::NOT_FOUND,
|
||||
Json(json!({ "detail": "用户不存在" })),
|
||||
@@ -130,6 +130,7 @@ pub(in super::super) async fn build_admin_update_user_response(
|
||||
},
|
||||
None => None,
|
||||
};
|
||||
let effective_role = role.as_deref().unwrap_or(existing_user.role.as_str());
|
||||
if payload.rate_limit.is_some_and(|value| value < 0) {
|
||||
return Ok((
|
||||
http::StatusCode::BAD_REQUEST,
|
||||
@@ -251,7 +252,19 @@ pub(in super::super) async fn build_admin_update_user_response(
|
||||
let requested_group_ids = normalize_admin_user_group_ids(payload.group_ids);
|
||||
Some(
|
||||
state
|
||||
.include_default_user_group_ids(&requested_group_ids)
|
||||
.include_default_user_group_ids_for_role(&requested_group_ids, effective_role)
|
||||
.await?,
|
||||
)
|
||||
} else if role.is_some() {
|
||||
let requested_group_ids = state
|
||||
.list_user_groups_for_user(&user_id)
|
||||
.await?
|
||||
.into_iter()
|
||||
.map(|group| group.id)
|
||||
.collect::<Vec<_>>();
|
||||
Some(
|
||||
state
|
||||
.include_default_user_group_ids_for_role(&requested_group_ids, effective_role)
|
||||
.await?,
|
||||
)
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user