@abc.abstractmethod<EOL><INDENT>def is_authorized_on_condition(self, agent_id, function_id, qualifier_id, condition):<DEDENT>
return<EOL>
Determines if the given agent is authorized.

        An agent is authorized if an active authorization exists whose
        ``Agent,`` ``Function`` and ``Qualifier`` matches the supplied
        parameters. Authorizations may be defined using groupings or
        hieratchical structures for both the ``Agent`` and the
        ``Qualifier`` but are queried in the de-nornmalized form.

        The ``Agent`` is generally determined through the use of an
        Authentication OSID. The ``Function`` and ``Qualifier`` are
        already known as they map to the desired authorization to
        validate.

        :param agent_id: the ``Id`` of an ``Agent``
        :type agent_id: ``osid.id.Id``
        :param function_id: the ``Id`` of a ``Function``
        :type function_id: ``osid.id.Id``
        :param qualifier_id: the ``Id`` of a ``Qualifier``
        :type qualifier_id: ``osid.id.Id``
        :param condition: an authorization condition
        :type condition: ``osid.authorization.AuthorizationCondition``
        :return: ``true`` if the user is authorized, ``false`` othersise
        :rtype: ``boolean``
        :raise: ``NotFound`` -- ``function_id`` is not found
        :raise: ``NullArgument`` -- ``agent_id`` , ``function_id, qualifier_id`` , or ``condition`` is ``null``
        :raise: ``OperationFailed`` -- unable to complete request
        :raise: ``PermissionDenied`` -- authorization failure making request
        :raise: ``Unsupported`` -- ``condition`` is not of this service

        *compliance: mandatory -- This method must be implemented.*
        *implementation notes*: Authorizations may be stored in a
        normalized form with respect to various Resources and created
        using specific nodes in a ``Function`` or ``Qualifer``
        hierarchy. The provider needs to maintain a de-normalized
        implicit authorization store or expand the applicable
        hierarchies on the fly to honor this query.  Querying the
        authorization service may in itself require a separate
        authorization. A ``PermissionDenied`` is a result of this
        authorization failure. If no explicit or implicit authorization
        exists for the queried tuple, this method should return
        ``false``.