def is_permitted(self, identifiers, permission_s, log_results=True):
self.assert_realms_configured()<EOL>results = collections.defaultdict(bool)  <EOL>is_permitted_results = self._is_permitted(identifiers, permission_s)<EOL>for permission, is_permitted in is_permitted_results:<EOL><INDENT>results[permission] = results[permission] or is_permitted<EOL><DEDENT>if log_results:<EOL><INDENT>self.notify_event(identifiers,<EOL>list(results.items()),<EOL>'<STR_LIT>')<EOL><DEDENT>results = set(results.items())<EOL>return results<EOL>
Yosai differs from Shiro in how it handles String-typed Permission
parameters.  Rather than supporting *args of String-typed Permissions,
Yosai supports a list of Strings.  Yosai remains true to Shiro's API
while determining permissions a bit more pythonically.  This may
be refactored later.

:param identifiers: a collection of identifiers
:type identifiers:  subject_abcs.IdentifierCollection

:param permission_s: a collection of 1..N permissions
:type permission_s: List of permission string(s)

:param log_results:  states whether to log results (True) or allow the
                     calling method to do so instead (False)
:type log_results:  bool

:returns: a set of tuple(s), containing the Permission and a Boolean
          indicating whether the permission is granted