Macro diana::if_authed[][src]

macro_rules! if_authed {
    ($auth_state : expr, { $($key : expr => $value : expr), + }, $code : block) => { ... };
}
Expand description

Checks to see if the given authentication state matches the series of given claims. This must be provided with the authentication state, a series of claims to check against, and code to execute if the user is authenticated. This will call bail! with an ErrorKind::Unauthorised error if the user is unauthenticated, so that must be handled in your function’s return type!

Example

This is a simplified version of the internal logic that publishes data to the subscriptions server.

use diana::{
    errors::{Result, GQLResult},
    graphql_utils::get_auth_data_from_ctx,
    async_graphql::{Object as GQLObject},
    if_authed,
};

#[derive(Default, Clone)]
pub struct PublishMutation;
#[GQLObject]
impl PublishMutation {
    async fn publish(
        &self,
        raw_ctx: &async_graphql::Context<'_>,
        channel: String,
        data: String,
    ) -> Result<bool> {
        let auth_state = get_auth_data_from_ctx(raw_ctx)?;
        if_authed!(
            auth_state,
            {
                "role" => "graphql_server"
            },
            {
                // Your code here
                Ok(true)
            }
        )
    }
}