pub struct EnsureOriginEqualOrHigherPrivilege<Origin, PrivilegeCmp>(/* private fields */);Expand description
EnsureOrigin implementation that checks that an origin has equal or higher privilege
compared to the expected Origin.
It will take the shortcut of comparing the incoming origin with the expected Origin and if
both are the same the origin is accepted.
§Example
#[derive(Eq, PartialEq, Debug)]
pub enum Origin {
Root,
SomethingBelowRoot,
NormalUser,
}
struct OriginPrivilegeCmp;
impl PrivilegeCmp<Origin> for OriginPrivilegeCmp {
fn cmp_privilege(left: &Origin, right: &Origin) -> Option<Ordering> {
match (left, right) {
(Origin::Root, Origin::Root) => Some(Ordering::Equal),
(Origin::Root, _) => Some(Ordering::Greater),
(Origin::SomethingBelowRoot, Origin::SomethingBelowRoot) => Some(Ordering::Equal),
(Origin::SomethingBelowRoot, Origin::Root) => Some(Ordering::Less),
(Origin::SomethingBelowRoot, Origin::NormalUser) => Some(Ordering::Greater),
(Origin::NormalUser, Origin::NormalUser) => Some(Ordering::Equal),
(Origin::NormalUser, _) => Some(Ordering::Less),
}
}
}
parameter_types! {
pub const ExpectedOrigin: Origin = Origin::SomethingBelowRoot;
}
type EnsureOrigin = EnsureOriginEqualOrHigherPrivilege<ExpectedOrigin, OriginPrivilegeCmp>;
// `Root` has an higher privilege as our expected origin.
assert!(EnsureOrigin::ensure_origin(Origin::Root).is_ok());
// `SomethingBelowRoot` is exactly the expected origin.
assert!(EnsureOrigin::ensure_origin(Origin::SomethingBelowRoot).is_ok());
// The `NormalUser` origin is not allowed.
assert!(EnsureOrigin::ensure_origin(Origin::NormalUser).is_err());Trait Implementations§
Source§impl<OuterOrigin, Origin, PrivilegeCmp> EnsureOrigin<OuterOrigin> for EnsureOriginEqualOrHigherPrivilege<Origin, PrivilegeCmp>
impl<OuterOrigin, Origin, PrivilegeCmp> EnsureOrigin<OuterOrigin> for EnsureOriginEqualOrHigherPrivilege<Origin, PrivilegeCmp>
Source§fn try_origin(o: OuterOrigin) -> Result<Self::Success, OuterOrigin>
fn try_origin(o: OuterOrigin) -> Result<Self::Success, OuterOrigin>
Perform the origin check.
Source§fn ensure_origin(o: OuterOrigin) -> Result<Self::Success, BadOrigin>
fn ensure_origin(o: OuterOrigin) -> Result<Self::Success, BadOrigin>
Perform the origin check.
Source§fn ensure_origin_or_root(
o: OuterOrigin,
) -> Result<Option<Self::Success>, BadOrigin>where
OuterOrigin: OriginTrait,
fn ensure_origin_or_root(
o: OuterOrigin,
) -> Result<Option<Self::Success>, BadOrigin>where
OuterOrigin: OriginTrait,
The same as
ensure_origin except that Root origin will always pass. This can only be
used if Success has a sensible impl of Default since that will be used in the result.Source§fn try_origin_or_root(
o: OuterOrigin,
) -> Result<Option<Self::Success>, OuterOrigin>where
OuterOrigin: OriginTrait,
fn try_origin_or_root(
o: OuterOrigin,
) -> Result<Option<Self::Success>, OuterOrigin>where
OuterOrigin: OriginTrait,
The same as
try_origin except that Root origin will always pass. This can only be
used if Success has a sensible impl of Default since that will be used in the result.Auto Trait Implementations§
impl<Origin, PrivilegeCmp> Freeze for EnsureOriginEqualOrHigherPrivilege<Origin, PrivilegeCmp>
impl<Origin, PrivilegeCmp> RefUnwindSafe for EnsureOriginEqualOrHigherPrivilege<Origin, PrivilegeCmp>where
Origin: RefUnwindSafe,
PrivilegeCmp: RefUnwindSafe,
impl<Origin, PrivilegeCmp> Send for EnsureOriginEqualOrHigherPrivilege<Origin, PrivilegeCmp>
impl<Origin, PrivilegeCmp> Sync for EnsureOriginEqualOrHigherPrivilege<Origin, PrivilegeCmp>
impl<Origin, PrivilegeCmp> Unpin for EnsureOriginEqualOrHigherPrivilege<Origin, PrivilegeCmp>
impl<Origin, PrivilegeCmp> UnwindSafe for EnsureOriginEqualOrHigherPrivilege<Origin, PrivilegeCmp>where
Origin: UnwindSafe,
PrivilegeCmp: UnwindSafe,
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
Source§impl<T> CheckedConversion for T
impl<T> CheckedConversion for T
Source§impl<T, U> DefensiveTruncateInto<U> for Twhere
U: DefensiveTruncateFrom<T>,
impl<T, U> DefensiveTruncateInto<U> for Twhere
U: DefensiveTruncateFrom<T>,
Source§fn defensive_truncate_into(self) -> U
fn defensive_truncate_into(self) -> U
Defensively truncate a value and convert it into its bounded form.
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<Src, Dest> IntoTuple<Dest> for Srcwhere
Dest: FromTuple<Src>,
impl<Src, Dest> IntoTuple<Dest> for Srcwhere
Dest: FromTuple<Src>,
fn into_tuple(self) -> Dest
Source§impl<T, Outer> IsWrappedBy<Outer> for T
impl<T, Outer> IsWrappedBy<Outer> for T
Source§impl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
Source§fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
Source§fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
Consume self to return an equivalent value of
T. Read moreSource§impl<T, U> TryIntoKey<U> for Twhere
U: TryFromKey<T>,
impl<T, U> TryIntoKey<U> for Twhere
U: TryFromKey<T>,
type Error = <U as TryFromKey<T>>::Error
fn try_into_key(self) -> Result<U, <U as TryFromKey<T>>::Error>
Source§impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
Source§fn unchecked_into(self) -> T
fn unchecked_into(self) -> T
The counterpart to
unchecked_from.Source§impl<T, S> UniqueSaturatedInto<T> for S
impl<T, S> UniqueSaturatedInto<T> for S
Source§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
Consume self to return an equivalent value of
T.