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
Trait Implementations§
Source§impl Default for GuardChain
impl Default for GuardChain
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<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
Read this value from the supplied reader. Same as
ReadEndian::read_from_little_endian().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.