| return Proxy(value, checker) |
return Proxy(value, checker) |
| |
|
| |
|
| class CombinedChecker(TrustedCheckerBase): |
class CombinedChecker(Checker): |
| """A checker that combines two other checkers in a logical-or fashion. |
"""A checker that combines two other checkers in a logical-or fashion. |
| |
|
| The following table describes the result of a combined checker in detail. |
The following table describes the result of a combined checker in detail. |
| |
|
| def __init__(self, checker1, checker2): |
def __init__(self, checker1, checker2): |
| """Create a combined checker.""" |
"""Create a combined checker.""" |
| self._checker1 = checker1 |
Checker.__init__(self, |
| |
checker1.get_permissions, |
| |
checker1.set_permissions) |
| self._checker2 = checker2 |
self._checker2 = checker2 |
| |
|
| def check(self, object, name): |
def check(self, object, name): |
| 'See IChecker' |
'See IChecker' |
| try: |
try: |
| self._checker1.check(object, name) |
Checker.check(self, object, name) |
| except ForbiddenAttribute: |
except ForbiddenAttribute: |
| self._checker2.check(object, name) |
self._checker2.check(object, name) |
| except Unauthorized, unauthorized_exception: |
except Unauthorized, unauthorized_exception: |
| def check_getattr(self, object, name): |
def check_getattr(self, object, name): |
| 'See IChecker' |
'See IChecker' |
| try: |
try: |
| self._checker1.check_getattr(object, name) |
Checker.check_getattr(self, object, name) |
| except ForbiddenAttribute: |
except ForbiddenAttribute: |
| self._checker2.check_getattr(object, name) |
self._checker2.check_getattr(object, name) |
| except Unauthorized, unauthorized_exception: |
except Unauthorized, unauthorized_exception: |
| def check_setattr(self, object, name): |
def check_setattr(self, object, name): |
| 'See IChecker' |
'See IChecker' |
| try: |
try: |
| self._checker1.check_setattr(object, name) |
Checker.check_setattr(self, object, name) |
| except ForbiddenAttribute: |
except ForbiddenAttribute: |
| self._checker2.check_setattr(object, name) |
self._checker2.check_setattr(object, name) |
| except Unauthorized, unauthorized_exception: |
except Unauthorized, unauthorized_exception: |
| except ForbiddenAttribute: |
except ForbiddenAttribute: |
| raise unauthorized_exception |
raise unauthorized_exception |
| |
|
| def proxy(self, value): |
|
| 'See IChecker' |
|
| checker = getattr(value, '__Security_checker__', None) |
|
| if checker is None: |
|
| checker = selectChecker(value) |
|
| if checker is None: |
|
| return value |
|
| |
|
| return Proxy(value, checker) |
|
| |
|
| class CheckerLoggingMixin: |
class CheckerLoggingMixin: |
| """Debugging mixin for checkers. |
"""Debugging mixin for checkers. |
| |
|