<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def search(self, query: Optional[dict] = None, offset: int = 0, limit: Optional[int] = None, order_by: Optional[tuple] = None, secure: bool = False) -> List[IModel]: """Search for models Filtering is done through ``rulez`` based JSON/dict query, which defines boolean statements in JSON/dict structure. : param query: Rulez based query : param offset: Result offset : param limit: Maximum number of result : param order_by: Tuple of ``(field, order)`` where ``order`` is ``'asc'`` or ``'desc'`` : param secure: When set to True, this will filter out any object which current logged in user is not allowed to see : todo: ``order_by`` need to allow multiple field ordering """

        raise NotImplementedError