# Query Modifiers

Query modifiers provide you a last minute chance to modify the query of any root resolver before its query is run. These query modifiers provide a convenient time to perform query level authentication. To setup a query modifier, update the botanist_object attribute to include ModifiesQuery = true. It should look like the following:

#[botanist_object(Context = Context, ModifiesQuery = true)]

Next, implement the trait QueryModifier on the Diesel model in question:

impl<'a> QueryModifier<HeroQuery<'a>, Context> for Hero {
    fn modify_query(query: HeroQuery<'a>, context: &Context) -> HeroQuery<'a> {
        query
    }
}

BoxedSelectQuery

The HeroQuery type is automatically generated for convenience. A helper type will be generated in the form of <Model Name>Query.

Generally, you'll want to modify the query here instead of just returning it as is. Any standard functions from the Diesel DSL will work here, HeroQuery is just a BoxedSelectQuery.