pub struct GuardChain {
pub guards: Vec<Arc<dyn Guard>>,
}Expand description
GuardChain — 守卫链(AND 语义组合)
所有 Guard 必须通过,任一失败则整个链失败。
对齐 NestJS UseGuards(...) 多个 Guard 的 AND 语义。
§执行顺序
按添加顺序执行(先添加先执行)。建议顺序:
AuthGuard(先检查登录)AdminGuard/PermissionGuard/RoleGuard(再检查权限)
§用法
ⓘ
use sz_rust_core::guard::{AuthGuard, AdminGuard, GuardChain};
use std::sync::Arc;
let chain = GuardChain::new()
.with_guard(Arc::new(AuthGuard))
.with_guard(Arc::new(AdminGuard));Fields§
§guards: Vec<Arc<dyn Guard>>守卫列表(按添加顺序执行)
Implementations§
Source§impl GuardChain
impl GuardChain
Sourcepub fn new() -> GuardChain
pub fn new() -> GuardChain
创建空的 GuardChain
Sourcepub fn with_guard(self, guard: Arc<dyn Guard>) -> GuardChain
pub fn with_guard(self, guard: Arc<dyn Guard>) -> GuardChain
添加 Guard(builder 风格)
Sourcepub fn from_guards(guards: Vec<Arc<dyn Guard>>) -> GuardChain
pub fn from_guards(guards: Vec<Arc<dyn Guard>>) -> GuardChain
从 Guard 列表创建 GuardChain
Trait Implementations§
Source§impl Default for GuardChain
impl Default for GuardChain
Source§fn default() -> GuardChain
fn default() -> GuardChain
Returns the “default value” for a type. Read more
Auto Trait Implementations§
impl !RefUnwindSafe for GuardChain
impl !UnwindSafe for GuardChain
impl Freeze for GuardChain
impl Send for GuardChain
impl Sync for GuardChain
impl Unpin for GuardChain
impl UnsafeUnpin for GuardChain
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.