def requires_role(role_s, logical_operator=all):
        """
        Requires that the calling Subject be authorized to the extent that is
        required to satisfy the role_s specified and the logical operation
        upon them.

        :param role_s:   a collection of the role(s) required, specified by
                           identifiers (such as a role name)
        :type role_s:  a List of Strings

        :param logical_operator:  indicates whether all or at least one permission
                                  is true (and, any)
        :type: and OR all (from python standard library)

        :raises  AuthorizationException:  if the user does not have sufficient
                                          role membership

        Elaborate Example:
            requires_role(role_s=['sysadmin', 'developer'], logical_operator=any)

        Basic Example:
            requires_role('physician')
        """
        def outer_wrap(fn):
            @functools.wraps(fn)
            def inner_wrap(*args, **kwargs):

                subject = Yosai.get_current_subject()

                subject.check_role(role_s, logical_operator)

                return fn(*args, **kwargs)
            return inner_wrap
        return outer_wrap