[][src]Trait aragog::AuthorizeAction

pub trait AuthorizeAction<T: Serialize + DeserializeOwned + Clone + Record> {
    type Action;
    fn is_action_authorized(
        &self,
        action: Self::Action,
        target: Option<&DatabaseRecord<T>>
    ) -> bool; fn authorize_action(
        &self,
        action: Self::Action,
        target: Option<&DatabaseRecord<T>>
    ) -> Result<(), ServiceError> { ... } }

The AuthorizeAction trait of the Aragog library. This traits allows provides the ability to authorize a Record to execute a custom action on an other one.

Example

#[derive(Serialize, Deserialize, Clone)]
pub struct Employee {
    pub is_cook: bool,
    pub is_accountant: bool,
}

#[derive(Serialize, Deserialize, Clone)]
pub struct Company {
    pub taxes_payed: bool,
    pub is_cooking_done: bool,
}

pub enum EmployeeAction {
    Cook,
    PayTaxes
}

impl AuthorizeAction<Company> for Employee {
type Action = EmployeeAction;

    fn is_action_authorized(&self, action: Self::Action, target: Option<&DatabaseRecord<Company>>) -> bool {
        if target.is_none() { return false; }
        let target = target.unwrap();
        match action {
            EmployeeAction::Cook => self.is_cook && !target.record.is_cooking_done,
            EmployeeAction::PayTaxes => self.is_accountant && !target.record.taxes_payed,
        }
    }
}

Associated Types

type Action

The action type to be authorized, like a custom enum of ACL actions (write, read) or more logic operations.

Loading content...

Required methods

fn is_action_authorized(
    &self,
    action: Self::Action,
    target: Option<&DatabaseRecord<T>>
) -> bool

Returns true if the object is authorized to do action on target

Loading content...

Provided methods

fn authorize_action(
    &self,
    action: Self::Action,
    target: Option<&DatabaseRecord<T>>
) -> Result<(), ServiceError>

If the object is authorized to do action on target then the method will return Ok(()), otherwise a ServiceError::Forbidden is returned.

Loading content...

Implementors

Loading content...