| # |
# |
| ############################################################################## |
############################################################################## |
| """ |
""" |
| $Id: checker.py,v 1.25 2003/05/29 15:51:19 stevea Exp $ |
$Id: checker.py,v 1.26 2003/06/02 12:46:03 stevea Exp $ |
| """ |
""" |
| |
|
| import os |
import os |
| setattr_permission_func = setattr_permission_func.get |
setattr_permission_func = setattr_permission_func.get |
| self._setattr_permission_func = setattr_permission_func |
self._setattr_permission_func = setattr_permission_func |
| |
|
| |
|
| def getPermission_func(self): |
def getPermission_func(self): |
| return self._permission_func |
return self._permission_func |
| |
|
| |
|
| def check_setattr(self, object, name): |
def check_setattr(self, object, name): |
| 'See IChecker' |
'See IChecker' |
| |
|
| permission = self._setattr_permission_func(name) |
permission = self._setattr_permission_func(name) |
| if permission is not None: |
if permission is not None: |
| if permission is CheckerPublic: |
if permission is CheckerPublic: |
| return |
return |
| else: |
else: |
| __traceback_supplement__ = (TracebackSupplement, object) |
__traceback_supplement__ = (TracebackSupplement, object) |
| raise Unauthorized(name=name) |
raise Unauthorized, name |
| |
|
| __traceback_supplement__ = (TracebackSupplement, object) |
__traceback_supplement__ = (TracebackSupplement, object) |
| raise ForbiddenAttribute(name) |
raise ForbiddenAttribute, name |
| |
|
| def check(self, object, name): |
def check(self, object, name): |
| 'See IChecker' |
'See IChecker' |
| |
|
| permission = self._permission_func(name) |
permission = self._permission_func(name) |
| if permission is not None: |
if permission is not None: |
| if permission is CheckerPublic: |
if permission is CheckerPublic: |
| return |
return |
| else: |
else: |
| __traceback_supplement__ = (TracebackSupplement, object) |
__traceback_supplement__ = (TracebackSupplement, object) |
| raise Unauthorized(name=name) |
raise Unauthorized, name |
| elif name in _always_available: |
elif name in _always_available: |
| return |
return |
| |
|
| __traceback_supplement__ = (TracebackSupplement, object) |
__traceback_supplement__ = (TracebackSupplement, object) |
| raise ForbiddenAttribute(name) |
raise ForbiddenAttribute, name |
| |
|
| def proxy(self, value): |
def proxy(self, value): |
| 'See IChecker' |
'See IChecker' |
| # Now we need to create a proxy |
|
| |
|
| checker = getattr(value, '__Security_checker__', None) |
checker = getattr(value, '__Security_checker__', None) |
| if checker is None: |
if checker is None: |
| checker = selectChecker(value) |
checker = selectChecker(value) |
| class DecoratedChecker(TrustedCheckerBase): |
class DecoratedChecker(TrustedCheckerBase): |
| """A checker using further permissions relative to an original checker. |
"""A checker using further permissions relative to an original checker. |
| """ |
""" |
| |
|
| implements(IChecker) |
implements(IChecker) |
| |
|
| def __init__(self, original_checker, permission_func, |
def __init__(self, original_checker, permission_func, |
| return |
return |
| else: |
else: |
| __traceback_supplement__ = (TracebackSupplement, object) |
__traceback_supplement__ = (TracebackSupplement, object) |
| raise Unauthorized(name=name) |
raise Unauthorized, name |
| else: |
else: |
| # let the original checker decide |
# let the original checker decide |
| self._original_checker.check(object, name) |
self._original_checker.check(object, name) |
| return |
return |
| else: |
else: |
| __traceback_supplement__ = (TracebackSupplement, object) |
__traceback_supplement__ = (TracebackSupplement, object) |
| raise Unauthorized(name=name) |
raise Unauthorized, name |
| else: |
else: |
| # let the original checker decide |
# let the original checker decide |
| self._original_checker.check_getattr(object, name) |
self._original_checker.check_getattr(object, name) |
| return |
return |
| else: |
else: |
| __traceback_supplement__ = (TracebackSupplement, object) |
__traceback_supplement__ = (TracebackSupplement, object) |
| raise Unauthorized(name=name) |
raise Unauthorized, name |
| else: |
else: |
| # let the original checker decide |
# let the original checker decide |
| self._original_checker.check_setattr(object, name) |
self._original_checker.check_setattr(object, name) |
| |
|
| def proxy(self, value): |
def proxy(self, value): |
| 'See IChecker' |
'See IChecker' |
| # Now we need to create a proxy |
|
| |
|
| checker = getattr(value, '__Security_checker__', None) |
checker = getattr(value, '__Security_checker__', None) |
| if checker is None: |
if checker is None: |
| checker = selectChecker(value) |
checker = selectChecker(value) |