diff --git a/CHANGES.rst b/CHANGES.rst
index 0203e6a..aea7438 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -4,7 +4,12 @@ Changes
 4.1.1 (unreleased)
 ------------------
 
-- TBD
+- Fix `issue 23 <https://github.com/zopefoundation/zope.security/issues/23>`_:
+  iteration of ``collections.OrderedDict`` and its various views is
+  now allowed by default on all versions of Python.
+
+- As a further fix for issue 20, iteration of BTree itself is now
+  allowed by default.
 
 4.1.0 (2017-04-24)
 ------------------
diff --git a/src/zope/security/checker.py b/src/zope/security/checker.py
index 3187afc..344428c 100644
--- a/src/zope/security/checker.py
+++ b/src/zope/security/checker.py
@@ -770,6 +770,27 @@ if PYTHON2:
     _default_checkers[type({}.iterkeys())] = _iteratorChecker
     _default_checkers[type({}.itervalues())] = _iteratorChecker
 
+def _fixup_dictlike(dict_type):
+    empty_dict = dict_type()
+    populated_dict = dict_type({1: 2})
+    for dictlike in (empty_dict, populated_dict):
+        for attr in ('__iter__', 'keys', 'items', 'values'):
+            obj = getattr(dictlike, attr)()
+            o_type = type(obj)
+            if o_type not in _default_checkers:
+                _default_checkers[o_type] = _iteratorChecker
+
+def _fixup_odict():
+    # OrderedDicts have three different implementations: Python 2 (pure
+    # python, returns generators and lists), Python <=3.4 (pure Python,
+    # uses view classes) and CPython 3.5+ (implemented in C). These should
+    # all be iterable.
+    from collections import OrderedDict
+    _fixup_dictlike(OrderedDict)
+
+_fixup_odict()
+del _fixup_odict
+
 try:
     import BTrees
 except ImportError: # pragma: no cover
@@ -794,20 +815,14 @@ else:
         for name in ('IF', 'II', 'IO', 'OI', 'OO'):
             for family_name in ('family32', 'family64'):
                 family = getattr(BTrees, family_name)
-                btree = getattr(family, name).BTree()
-
-                empty_type = type(btree.items())
-                if empty_type not in _default_checkers:
-                    _default_checkers[empty_type] = _iteratorChecker
-
-                btree[1] = 1
-                populated_type = type(btree.items())
-                if populated_type not in _default_checkers:
-                    _default_checkers[populated_type] = _iteratorChecker
+                btree = getattr(family, name).BTree
+                _fixup_dictlike(btree)
 
     _fixup_btrees()
     del _fixup_btrees
 
+del _fixup_dictlike
+
 def _clear():
     _checkers.clear()
     _checkers.update(_default_checkers)

Iteration of OrderedDict broken under Python 3
Python 3.5 re-implemented OrderedDict in C, which results in it having custom classes for `.keys()`, `.values()`, `.items()` and `__iter__`. Likewise, Python 3 reimplemented OrderedDict to use Python "view classes" for its `__iter__`, etc. These aren't covered by the default checkers anymore. The result is code that worked prior to 3.5 suddenly raising exceptions. (Under Python 2, `__iter__` was a generator, and `keys`, `values` and `items` returned actual `list` objects.)

I think this should be handled like `dict` and `BTrees` and access granted in `_default_checkers`.

This was spotted in https://github.com/zopefoundation/zope.app.onlinehelp/pull/2

```
  File "//lib/python3.5/site-packages/zope/app/tree/node.py", line 95, in getChildObjects
    children = self._get_child_objects_adapter().getChildObjects()
  File "/lib/python3.5/site-packages/zope/app/tree/adapters.py", line 94, in getChildObjects
    return list(self.context.values()) if self.hasChildren() else []
zope.security.interfaces.ForbiddenAttribute: ('__iter__', odict_values([<zope.app.onlinehelp.onlinehelptopic.RESTOnlineHelpTopic object at 0x10f87aac8>, <zope.app.onlinehelp.onlinehelptopic.RESTOnlineHelpTopic object at 0x10f87a128>]))
```
diff --git a/src/zope/security/tests/test_checker.py b/src/zope/security/tests/test_checker.py
index ceda502..03a8883 100644
--- a/src/zope/security/tests/test_checker.py
+++ b/src/zope/security/tests/test_checker.py
@@ -391,34 +391,48 @@ class CheckerTestsBase(object):
         finally:
             _clear()
 
-    @_skip_if_no_btrees
-    def test_iteration_of_btree_items(self):
-        # iteration of BTree.items() is allowed by default.
+    def _check_iteration_of_dict_like(self, dict_like):
         from zope.security.proxy import Proxy
         from zope.security.checker import Checker
-        from zope.security.checker import CheckerPublic
-        import BTrees
+        from zope.security.checker import _default_checkers
+
+        checker = _default_checkers[dict]
+
+        proxy = Proxy(dict_like, checker)
+        # empty
+        self.assertEqual([], list(proxy.items()))
+        self.assertEqual([], list(proxy.keys()))
+        self.assertEqual([], list(proxy.values()))
+        self.assertEqual([], list(proxy))
 
-        checker = Checker({'items': CheckerPublic,
-                           'keys': CheckerPublic,
-                           'values': CheckerPublic})
+        # With an object
+        dict_like[1] = 2
+        self.assertEqual([(1, 2)], list(proxy.items()))
+        self.assertEqual([1], list(proxy.keys()))
+        self.assertEqual([1], list(proxy))
+        self.assertEqual([2], list(proxy.values()))
 
+
+    @_skip_if_no_btrees
+    def test_iteration_of_btree_items_keys_values(self):
+        # iteration of BTree.items() is allowed by default.
+        import BTrees
         for name in ('IF', 'II', 'IO', 'OI', 'OO'):
             for family_name in ('family32', 'family64'):
                 family = getattr(BTrees, family_name)
                 btree = getattr(family, name).BTree()
-                proxy = Proxy(btree, checker)
-                # empty
-                self.assertEqual([], list(proxy.items()))
-                self.assertEqual([], list(proxy.keys()))
-                self.assertEqual([], list(proxy.values()))
-
-                # With an object
-                btree[1] = 2
-                self.assertEqual([(1, 2)], list(proxy.items()))
-                self.assertEqual([1], list(proxy.keys()))
-                self.assertEqual([2], list(proxy.values()))
+                self._check_iteration_of_dict_like(btree)
+
+    def test_iteration_of_odict_items_keys_values(self):
+        # iteration of OrderedDict.items() is allowed by default.
+        from collections import OrderedDict
+
+        odict = OrderedDict()
+        self._check_iteration_of_dict_like(odict)
 
+    def test_iteration_of_dict_items_keys_values(self):
+        # iteration of regular dict is allowed by default
+        self._check_iteration_of_dict_like(dict())
 
 class CheckerPyTests(unittest.TestCase, CheckerTestsBase):
 

pip install -e .[test]
parse_log_pytest
requirements.txt
pytest
apt-get update apt-get install -y gcc
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
BTrees==4.11.3
certifi==2021.5.30
cffi==1.15.1
importlib-metadata==4.8.3
iniconfig==1.1.1
packaging==21.3
persistent==4.9.3
pluggy==1.0.0
py==1.11.0
pycparser==2.21
pyparsing==3.1.4
pytest==7.0.1
six==1.17.0
tomli==1.2.3
typing_extensions==4.1.1
zipp==3.6.0
zope.component==5.1.0
zope.configuration==4.4.1
zope.event==4.6
zope.exceptions==4.6
zope.hookable==5.4
zope.i18nmessageid==5.1.1
zope.interface==5.5.2
zope.location==4.3
zope.proxy==4.6.1
zope.schema==6.2.1
-e git+https://github.com/zopefoundation/zope.security.git@2b82f83048802017a451d2abcdc2a2bae8ece182#egg=zope.security
zope.testing==5.0.1
zope.testrunner==5.6

name: zope.security
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==22.2.0
      - btrees==4.11.3
      - cffi==1.15.1
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - packaging==21.3
      - persistent==4.9.3
      - pluggy==1.0.0
      - py==1.11.0
      - pycparser==2.21
      - pyparsing==3.1.4
      - pytest==7.0.1
      - six==1.17.0
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - zipp==3.6.0
      - zope-component==5.1.0
      - zope-configuration==4.4.1
      - zope-event==4.6
      - zope-exceptions==4.6
      - zope-hookable==5.4
      - zope-i18nmessageid==5.1.1
      - zope-interface==5.5.2
      - zope-location==4.3
      - zope-proxy==4.6.1
      - zope-schema==6.2.1
      - zope-testing==5.0.1
      - zope-testrunner==5.6
prefix: /opt/conda/envs/zope.security

src/zope/security/tests/test_checker.py::CheckerPyTests::test_iteration_of_btree_items_keys_values src/zope/security/tests/test_checker.py::CheckerPyTests::test_iteration_of_odict_items_keys_values src/zope/security/tests/test_checker.py::CheckerTests::test_iteration_of_btree_items_keys_values src/zope/security/tests/test_checker.py::CheckerTests::test_iteration_of_odict_items_keys_values
src/zope/security/tests/test_checker.py::Test_ProxyFactory::test_no_checker_no_dunder_no_select src/zope/security/tests/test_checker.py::Test_ProxyFactory::test_no_checker_no_dunder_w_select src/zope/security/tests/test_checker.py::Test_ProxyFactory::test_no_checker_w_dunder src/zope/security/tests/test_checker.py::Test_ProxyFactory::test_w_already_proxied_different_checker src/zope/security/tests/test_checker.py::Test_ProxyFactory::test_w_already_proxied_no_checker src/zope/security/tests/test_checker.py::Test_ProxyFactory::test_w_already_proxied_same_checker src/zope/security/tests/test_checker.py::Test_ProxyFactory::test_w_explicit_checker src/zope/security/tests/test_checker.py::Test_canWrite::test_ok src/zope/security/tests/test_checker.py::Test_canWrite::test_w_setattr_forbidden_getattr_allowed src/zope/security/tests/test_checker.py::Test_canWrite::test_w_setattr_forbidden_getattr_forbidden src/zope/security/tests/test_checker.py::Test_canWrite::test_w_setattr_forbidden_getattr_unauth src/zope/security/tests/test_checker.py::Test_canWrite::test_w_setattr_unauth src/zope/security/tests/test_checker.py::Test_canAccess::test_ok src/zope/security/tests/test_checker.py::Test_canAccess::test_w_getattr_unauth src/zope/security/tests/test_checker.py::Test_canAccess::test_w_setattr_forbidden_getattr_allowed src/zope/security/tests/test_checker.py::CheckerPyTests::test_check_available_by_default src/zope/security/tests/test_checker.py::CheckerPyTests::test_check_miss src/zope/security/tests/test_checker.py::CheckerPyTests::test_check_non_public_w_interaction_allows src/zope/security/tests/test_checker.py::CheckerPyTests::test_check_non_public_w_interaction_denies src/zope/security/tests/test_checker.py::CheckerPyTests::test_check_public src/zope/security/tests/test_checker.py::CheckerPyTests::test_check_setattr_miss src/zope/security/tests/test_checker.py::CheckerPyTests::test_check_setattr_miss_none_set src/zope/security/tests/test_checker.py::CheckerPyTests::test_check_setattr_public src/zope/security/tests/test_checker.py::CheckerPyTests::test_check_setattr_w_interaction_allows src/zope/security/tests/test_checker.py::CheckerPyTests::test_check_setattr_w_interaction_denies src/zope/security/tests/test_checker.py::CheckerPyTests::test_class_conforms_to_IChecker src/zope/security/tests/test_checker.py::CheckerPyTests::test_ctor_w_non_dict_get_permissions src/zope/security/tests/test_checker.py::CheckerPyTests::test_ctor_w_non_dict_set_permissions src/zope/security/tests/test_checker.py::CheckerPyTests::test_instance_conforms_to_IChecker src/zope/security/tests/test_checker.py::CheckerPyTests::test_iteration_of_dict_items_keys_values src/zope/security/tests/test_checker.py::CheckerPyTests::test_permission_id_hit src/zope/security/tests/test_checker.py::CheckerPyTests::test_permission_id_miss src/zope/security/tests/test_checker.py::CheckerPyTests::test_proxy_already_proxied src/zope/security/tests/test_checker.py::CheckerPyTests::test_proxy_no_checker_no_dunder_w_select src/zope/security/tests/test_checker.py::CheckerPyTests::test_proxy_no_checker_w_dunder src/zope/security/tests/test_checker.py::CheckerPyTests::test_proxy_no_dunder_no_select src/zope/security/tests/test_checker.py::CheckerPyTests::test_setattr_permission_id_hit src/zope/security/tests/test_checker.py::CheckerPyTests::test_setattr_permission_id_miss src/zope/security/tests/test_checker.py::CheckerPyTests::test_setattr_permission_id_miss_none_set src/zope/security/tests/test_checker.py::CheckerTests::test_check_available_by_default src/zope/security/tests/test_checker.py::CheckerTests::test_check_miss src/zope/security/tests/test_checker.py::CheckerTests::test_check_non_public_w_interaction_allows src/zope/security/tests/test_checker.py::CheckerTests::test_check_non_public_w_interaction_denies src/zope/security/tests/test_checker.py::CheckerTests::test_check_public src/zope/security/tests/test_checker.py::CheckerTests::test_check_setattr_miss src/zope/security/tests/test_checker.py::CheckerTests::test_check_setattr_miss_none_set src/zope/security/tests/test_checker.py::CheckerTests::test_check_setattr_public src/zope/security/tests/test_checker.py::CheckerTests::test_check_setattr_w_interaction_allows src/zope/security/tests/test_checker.py::CheckerTests::test_check_setattr_w_interaction_denies src/zope/security/tests/test_checker.py::CheckerTests::test_class_conforms_to_IChecker src/zope/security/tests/test_checker.py::CheckerTests::test_ctor_w_non_dict_get_permissions src/zope/security/tests/test_checker.py::CheckerTests::test_ctor_w_non_dict_set_permissions src/zope/security/tests/test_checker.py::CheckerTests::test_instance_conforms_to_IChecker src/zope/security/tests/test_checker.py::CheckerTests::test_iteration_of_dict_items_keys_values src/zope/security/tests/test_checker.py::CheckerTests::test_permission_id_hit src/zope/security/tests/test_checker.py::CheckerTests::test_permission_id_miss src/zope/security/tests/test_checker.py::CheckerTests::test_proxy_already_proxied src/zope/security/tests/test_checker.py::CheckerTests::test_proxy_no_checker_no_dunder_w_select src/zope/security/tests/test_checker.py::CheckerTests::test_proxy_no_checker_w_dunder src/zope/security/tests/test_checker.py::CheckerTests::test_proxy_no_dunder_no_select src/zope/security/tests/test_checker.py::CheckerTests::test_setattr_permission_id_hit src/zope/security/tests/test_checker.py::CheckerTests::test_setattr_permission_id_miss src/zope/security/tests/test_checker.py::CheckerTests::test_setattr_permission_id_miss_none_set src/zope/security/tests/test_checker.py::TracebackSupplementTests::test_getInfo_builtin_types src/zope/security/tests/test_checker.py::TracebackSupplementTests::test_getInfo_newstyle_instance src/zope/security/tests/test_checker.py::GlobalTests::test___reduce__ src/zope/security/tests/test_checker.py::GlobalTests::test___repr__ src/zope/security/tests/test_checker.py::GlobalTests::test_ctor_name_and_module src/zope/security/tests/test_checker.py::Test_NamesChecker::test_empty_names_no_kw src/zope/security/tests/test_checker.py::Test_NamesChecker::test_w_names_no_kw src/zope/security/tests/test_checker.py::Test_NamesChecker::test_w_names_no_kw_explicit_permission src/zope/security/tests/test_checker.py::Test_NamesChecker::test_w_names_w_kw_no_clash src/zope/security/tests/test_checker.py::Test_NamesChecker::test_w_names_w_kw_w_clash src/zope/security/tests/test_checker.py::Test_InterfaceChecker::test_derived_iface src/zope/security/tests/test_checker.py::Test_InterfaceChecker::test_simple_iface_w_explicit_permission src/zope/security/tests/test_checker.py::Test_InterfaceChecker::test_simple_iface_w_kw src/zope/security/tests/test_checker.py::Test_InterfaceChecker::test_simple_iface_wo_kw src/zope/security/tests/test_checker.py::Test_InterfaceChecker::test_w_clash src/zope/security/tests/test_checker.py::Test_MultiChecker::test_empty src/zope/security/tests/test_checker.py::Test_MultiChecker::test_w_spec_as_iface src/zope/security/tests/test_checker.py::Test_MultiChecker::test_w_spec_as_mapping src/zope/security/tests/test_checker.py::Test_MultiChecker::test_w_spec_as_names src/zope/security/tests/test_checker.py::Test_MultiChecker::test_w_spec_as_names_and_iface src/zope/security/tests/test_checker.py::Test_MultiChecker::test_w_spec_as_names_and_iface_clash src/zope/security/tests/test_checker.py::Test_MultiChecker::test_w_spec_as_names_and_mapping_clash src/zope/security/tests/test_checker.py::Test_selectCheckerPy::test_w_basic_types_NoProxy src/zope/security/tests/test_checker.py::Test_selectCheckerPy::test_w_checker_inst src/zope/security/tests/test_checker.py::Test_selectCheckerPy::test_w_factory_factory src/zope/security/tests/test_checker.py::Test_selectCheckerPy::test_w_factory_returning_NoProxy src/zope/security/tests/test_checker.py::Test_selectCheckerPy::test_w_factory_returning_None src/zope/security/tests/test_checker.py::Test_selectCheckerPy::test_w_factory_returning_checker src/zope/security/tests/test_checker.py::Test_selectChecker::test_w_basic_types_NoProxy src/zope/security/tests/test_checker.py::Test_selectChecker::test_w_checker_inst src/zope/security/tests/test_checker.py::Test_selectChecker::test_w_factory_factory src/zope/security/tests/test_checker.py::Test_selectChecker::test_w_factory_returning_NoProxy src/zope/security/tests/test_checker.py::Test_selectChecker::test_w_factory_returning_None src/zope/security/tests/test_checker.py::Test_selectChecker::test_w_factory_returning_checker src/zope/security/tests/test_checker.py::Test_getCheckerForInstancesOf::test_hit src/zope/security/tests/test_checker.py::Test_getCheckerForInstancesOf::test_miss src/zope/security/tests/test_checker.py::Test_defineChecker::test_w_duplicate src/zope/security/tests/test_checker.py::Test_defineChecker::test_w_module src/zope/security/tests/test_checker.py::Test_defineChecker::test_w_newstyle_class src/zope/security/tests/test_checker.py::Test_defineChecker::test_w_wrong_type src/zope/security/tests/test_checker.py::Test_undefineChecker::test_hit src/zope/security/tests/test_checker.py::Test_undefineChecker::test_miss src/zope/security/tests/test_checker.py::CombinedCheckerTests::test_check_lhs_forbidden_rhs_forbidden src/zope/security/tests/test_checker.py::CombinedCheckerTests::test_check_lhs_forbidden_rhs_ok src/zope/security/tests/test_checker.py::CombinedCheckerTests::test_check_lhs_forbidden_rhs_unauth src/zope/security/tests/test_checker.py::CombinedCheckerTests::test_check_lhs_ok_rhs_not_called src/zope/security/tests/test_checker.py::CombinedCheckerTests::test_check_lhs_unauth_rhs_forbidden src/zope/security/tests/test_checker.py::CombinedCheckerTests::test_check_lhs_unauth_rhs_ok src/zope/security/tests/test_checker.py::CombinedCheckerTests::test_check_lhs_unauth_rhs_unauth src/zope/security/tests/test_checker.py::CombinedCheckerTests::test_check_setattr_lhs_forbidden_rhs_forbidden src/zope/security/tests/test_checker.py::CombinedCheckerTests::test_check_setattr_lhs_forbidden_rhs_ok src/zope/security/tests/test_checker.py::CombinedCheckerTests::test_check_setattr_lhs_forbidden_rhs_unauth src/zope/security/tests/test_checker.py::CombinedCheckerTests::test_check_setattr_lhs_ok_rhs_not_called src/zope/security/tests/test_checker.py::CombinedCheckerTests::test_check_setattr_lhs_unauth_rhs_forbidden src/zope/security/tests/test_checker.py::CombinedCheckerTests::test_check_setattr_lhs_unauth_rhs_ok src/zope/security/tests/test_checker.py::CombinedCheckerTests::test_check_setattr_lhs_unauth_rhs_unauth src/zope/security/tests/test_checker.py::CombinedCheckerTests::test_class_conforms_to_IChecker src/zope/security/tests/test_checker.py::CombinedCheckerTests::test_instance_conforms_to_IChecker src/zope/security/tests/test_checker.py::CheckerLoggingMixinTests::test_check_forbidden_attribute src/zope/security/tests/test_checker.py::CheckerLoggingMixinTests::test_check_getattr_forbidden_attribute src/zope/security/tests/test_checker.py::CheckerLoggingMixinTests::test_check_getattr_ok_normal_verbosity src/zope/security/tests/test_checker.py::CheckerLoggingMixinTests::test_check_getattr_ok_raised_verbosity_available_by_default src/zope/security/tests/test_checker.py::CheckerLoggingMixinTests::test_check_getattr_ok_raised_verbosity_normal_name src/zope/security/tests/test_checker.py::CheckerLoggingMixinTests::test_check_getattr_unauthorized src/zope/security/tests/test_checker.py::CheckerLoggingMixinTests::test_check_ok_normal_verbosity src/zope/security/tests/test_checker.py::CheckerLoggingMixinTests::test_check_ok_raised_verbosity_available_by_default src/zope/security/tests/test_checker.py::CheckerLoggingMixinTests::test_check_ok_raised_verbosity_normal_name src/zope/security/tests/test_checker.py::CheckerLoggingMixinTests::test_check_setattr_forbidden_attribute src/zope/security/tests/test_checker.py::CheckerLoggingMixinTests::test_check_setattr_ok_normal_verbosity src/zope/security/tests/test_checker.py::CheckerLoggingMixinTests::test_check_setattr_ok_raised_verbosity_normal_name src/zope/security/tests/test_checker.py::CheckerLoggingMixinTests::test_check_setattr_unauthorized src/zope/security/tests/test_checker.py::CheckerLoggingMixinTests::test_check_setitem_unauthorized src/zope/security/tests/test_checker.py::CheckerLoggingMixinTests::test_check_unauthorized src/zope/security/tests/test_checker.py::CheckerLoggingMixinTests::test_check_unauthorized_raised_verbosity src/zope/security/tests/test_checker.py::Test__instanceChecker::test_hit src/zope/security/tests/test_checker.py::Test__instanceChecker::test_miss src/zope/security/tests/test_checker.py::Test_moduleChecker::test_hit src/zope/security/tests/test_checker.py::Test_moduleChecker::test_miss src/zope/security/tests/test_checker.py::BasicTypesTests::test___delitem__ src/zope/security/tests/test_checker.py::BasicTypesTests::test___setitem__ src/zope/security/tests/test_checker.py::BasicTypesTests::test_clear src/zope/security/tests/test_checker.py::BasicTypesTests::test_update src/zope/security/tests/test_checker.py::Test::testAlwaysAvailable src/zope/security/tests/test_checker.py::Test::testLayeredProxies src/zope/security/tests/test_checker.py::Test::testMultiChecker src/zope/security/tests/test_checker.py::Test::test_ProxyFactory src/zope/security/tests/test_checker.py::Test::test_ProxyFactory_using_proxy src/zope/security/tests/test_checker.py::Test::test_canWrite_canAccess src/zope/security/tests/test_checker.py::Test::test_defineChecker_error src/zope/security/tests/test_checker.py::Test::test_defineChecker_module src/zope/security/tests/test_checker.py::Test::test_defineChecker_newstyle_class src/zope/security/tests/test_checker.py::Test::test_define_and_undefineChecker src/zope/security/tests/test_checker.py::Test::test_iteration src/zope/security/tests/test_checker.py::TestCheckerPublic::test_that_CheckerPublic_identity_works_even_when_proxied src/zope/security/tests/test_checker.py::TestCheckerPublic::test_that_pickling_CheckerPublic_retains_identity src/zope/security/tests/test_checker.py::TestCombinedChecker::test_checking src/zope/security/tests/test_checker.py::TestCombinedChecker::test_interface src/zope/security/tests/test_checker.py::TestBasicTypes::test src/zope/security/tests/test_checker.py::test_suite
src/zope/security/checker.py CHANGES.rst
src/zope/security/checker.py CHANGES.rst