コード例 #1
0
    def validate(self,
                 accessed=None,
                 container=None,
                 name=None,
                 value=None,
                 *args):
        # print "Validate:", (accessed,container,name,value,args)
        p = Containers(type(container), None)
        if p is None:
            p = getattr(container,
                        '__allow_access_to_unprotected_subobjects__', None)

        if p is None:
            p = getattr(container, '__guarded_getattr_validate__', None)

        if p is not None:
            if not isinstance(p, int):  # catches bool too
                if isinstance(p, dict):
                    if isinstance(name, basestring):
                        p = p.get(name)
                    else:
                        p = 1
                else:
                    p = p(name, value)

        if p:
            return 1
        else:
            raise Unauthorized
コード例 #2
0
def guard(container, value, index=None):
    if Containers(type(container)) and Containers(type(value)):
        # Simple type.  Short circuit.
        return
    if getSecurityManager().validate(container, container, index, value):
        return
    _error(index)
コード例 #3
0
    def validate(self, accessed=None, container=None, name=None, value=None,
             *args):
        # print "Validate:", (accessed,container,name,value,args)
        p = Containers(type(container), None)
        if p is None:
            p = getattr(container,
                        '__allow_access_to_unprotected_subobjects__',
                        None)

        if p is None:
            p = getattr(container,
                        '__guarded_getattr_validate__',
                        None)

        if p is not None:
            if not isinstance(p, int): # catches bool too
                if isinstance(p, dict):
                    if isinstance(name, basestring):
                        p = p.get(name)
                    else:
                        p = 1
                else:
                    p = p(name, value)

        if p:
            return 1
        else:
            raise Unauthorized
コード例 #4
0
def guarded_getitem(object, index):
    if type(index) is SliceType:
        if index.step is not None:
            v = object[index]
        else:
            start = index.start
            stop = index.stop
            if start is None:
                start = 0
            if stop is None:
                v = object[start:]
            else:
                v = object[start:stop]
        # We don't guard slices.
        return v
    v = object[index]
    if Containers(type(object)) and Containers(type(v)):
        # Simple type.  Short circuit.
        return v
    if getSecurityManager().validate(object, object, None, v):
        return v
    raise Unauthorized('unauthorized access to element %s' % index)