NestedAuthModifier
public class NestedAuthModifier<
A: AuthEndpoint,
I: CorvusModel,
U: CorvusModelAuthenticatable>:
RestModifier<A>, AuthEndpoint
A class that wraps a component which utilizes an .auth()
modifier. Differs
from AuthModifier
by authenticating on the user of an intermediate parent
I
of A.QuerySubject
. Requires an object U
that represents the user to
authorize.
-
The
KeyPath
to the user property of theQuerySubject
which is to be authenticated.Declaration
Swift
public typealias UserKeyPath = KeyPath< I, I.Parent<U> >
-
The
KeyPath
to the intermediateI
of the endpoint’sQuerySubject
.Declaration
Swift
public typealias IntermediateKeyPath = KeyPath< A.QuerySubject, A.QuerySubject.Parent<I> >
-
The path to the property to authenticate for.
Declaration
Swift
public let userKeyPath: UserKeyPath
-
The path to the intermediate.
Declaration
Swift
public let intermediateKeyPath: IntermediateKeyPath
-
Initializes the modifier with its underlying
QueryEndpoint
and itsauth
path, which is the keypath to the property to run authorization for.Declaration
Swift
public init( _ authEndpoint: A, intermediate: IntermediateKeyPath, user: UserKeyPath )
Parameters
queryEndpoint
The
QueryEndpoint
which the modifer is attached to.intermediate
A
KeyPath
to the intermediate.user
A
KeyPath
which leads to the property to authenticate for. -
A method which checks if the user
U
supplied in theRequest
is equal to the user belonging to the particularQuerySubject
.Throws
AnAbort
error if an item is not found.Declaration
Swift
override public func handler(_ req: Request) throws -> EventLoopFuture<Element>
Parameters
req
An incoming
Request
.Return Value
An
EventLoopFuture
containing an eagerloaded value as defined byElement
. If authorization fails or a user is not found, HTTP.unauthorized
and.notFound
are thrown respectively.