Skip to main content

AdminPermissionApi

Struct AdminPermissionApi 

Source
pub struct AdminPermissionApi<'a, S: AuthSchema> { /* private fields */ }
Expand description

Permission checks bound to the configuration of the registered AdminPlugin.

Every check requires at least one resource and at least one action per resource. All requested actions must be granted by one of the evaluated roles.

Implementations§

Source§

impl<'a, S: AuthSchema> AdminPermissionApi<'a, S>

Source

pub fn from_context( context: &'a AuthContext<S>, ) -> Result<Self, AdminPermissionError>

Bind to the configuration that AdminPlugin published during initialization.

Source

pub fn role_has_permission( &self, role: &str, permissions: &HashMap<String, Vec<String>>, ) -> Result<bool, AdminPermissionError>

Evaluate a role string without identifying a user.

This is not authentication. Use it only for a role that trusted server code already holds. Never pass a role that a client supplied. role may hold several roles separated by commas. Unknown roles grant nothing. admin_user_ids never applies because no user is identified.

Source

pub async fn user_has_permission( &self, user_id: &str, permissions: &HashMap<String, Vec<String>>, ) -> Result<bool, AdminPermissionError>

Evaluate the current stored roles of a user from trusted server code.

This reads the user on each call and does not check any session. The caller must authenticate the operator separately. A user without a role uses the configured default role. A user listed in admin_user_ids passes every check.

A dynamic base URL needs a configured fallback for this requestless operation.

Source

pub async fn authorize_request( &self, headers: &HashMap<String, String>, permissions: &HashMap<String, Vec<String>>, ) -> Result<AuthorizedSession, AdminPermissionError>

Authenticate the caller from request headers, then require the permissions.

The session and the user come from the framework session store on every call. Request bodies and client claims never select the user or the role. With a database or secondary storage, this read skips the cookie cache. A revoked session or a removed role therefore takes effect on the next call. The check does not return refreshed session cookies.

Auto Trait Implementations§

§

impl<'a, S> !RefUnwindSafe for AdminPermissionApi<'a, S>

§

impl<'a, S> !UnwindSafe for AdminPermissionApi<'a, S>

§

impl<'a, S> Freeze for AdminPermissionApi<'a, S>
where &'a AuthContext<S>: Freeze,

§

impl<'a, S> Send for AdminPermissionApi<'a, S>
where &'a AuthContext<S>: Send,

§

impl<'a, S> Sync for AdminPermissionApi<'a, S>
where &'a AuthContext<S>: Sync,

§

impl<'a, S> Unpin for AdminPermissionApi<'a, S>
where &'a AuthContext<S>: Unpin,

§

impl<'a, S> UnsafeUnpin for AdminPermissionApi<'a, S>
where &'a AuthContext<S>: UnsafeUnpin,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more