docs: 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)
  
          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 = WebYosai.get_current_subject()
  
                  try:
                      subject.check_role(role_s, logical_operator)
  
                  except ValueError:
                      msg = ("Attempting to perform a user-only operation.  The "
                             "current Subject is NOT a user (they haven't been "
                             "authenticated or remembered from a previous login). "
                             "ACCESS DENIED.")
                      raise WebYosai.get_current_webregistry().raise_unauthorized(msg)
  
                  except AuthorizationException:
                      msg = "Access Denied.  Insufficient Role Membership."
                      raise WebYosai.get_current_webregistry().raise_forbidden(msg)
  
                  return fn(*args, **kwargs)
              return inner_wrap
          return outer_wrap