Exemple #1
0
def test_permisos_usuario_correcto_algunos_falsos():
    import warden.api.rest.permisos as p
    permisos = {
        '1': [
            'urn:sistema:recurso:update',
        ],
        '2': [
            'urn:sistema:recurso:delete',
            'urn:sistema:recurso:update',
        ],
        'default': [
            'urn:sistema:recurso:create', 'urn:sistema:recurso:update:self',
            'urn:sistema:recurso:update', 'urn:sistema:recurso:delete:many',
            'urn:sistema:recurso:update:many:restricted'
        ]
    }
    ''' en este caso la segunda deleteación debe fallar. '''
    assert p.chequear_permisos('1', [
        'urn:sistema:recurso:create', 'urn:sistema:recurso:delete',
        'urn:sistema:recurso:delete:many'
    ], permisos) == (False, {
        'urn:sistema:recurso:create', 'urn:sistema:recurso:delete:many'
    })

    assert p.chequear_permisos(
        '2', ['urn:sistema:recurso:update', 'urn:sistema:recurso:delete'],
        permisos) == (True, {
            'urn:sistema:recurso:update', 'urn:sistema:recurso:delete'
        })
Exemple #2
0
def test_permisos_especificos_default_falsos():
    import warden.api.rest.permisos as p
    permisos = {'default': ['urn:sistema:recurso:update']}
    assert p.chequear_permisos('1', ['urn:sistema:recurso2:delete'],
                               permisos) == (False, set())
    assert p.chequear_permisos('1', ['urn:sistema:recurso2:create'],
                               permisos) == (False, set())
    assert p.chequear_permisos('1', ['urn:sistema:recurso2'],
                               permisos) == (False, set())
    assert p.chequear_permisos('1', ['urn:sistema:recurso'],
                               permisos) == (False, set())
Exemple #3
0
def _test_permisos_usuario_default_comodin():
    import warden.api.rest.permisos as p
    permisos = {
        '1': [
            'urn:sistema:recurso:update',
        ],
        '2': [
            'urn:sistema:recurso:delete',
            'urn:sistema:recurso:update',
        ],
        'default': [
            'urn:sistema:recurso:create', 'urn:*:*:*',
            'urn:sistema:recurso:delete:many', 'urn:sistema:recurso:update',
            'urn:sistema:recurso:update:many:restricted'
        ]
    }
    assert p.chequear_permisos('1', [
        'urn:sistema:recurso:create', 'urn:sistema:recurso:delete',
        'urn:sistema:recurso:delete:many',
        'urn:sistema:recurso:update:many:restricted'
    ], permisos) == (True,
                     set([
                         'urn:sistema:recurso:create',
                         'urn:sistema:recurso:delete',
                         'urn:sistema:recurso:delete:many',
                         'urn:sistema:recurso:update:many:restricted'
                     ]))

    assert p.chequear_permisos('1', [
        'urn:sistema:recurso:create', 'urn:sistema:recurso:delete',
        'urn:sistema:recurso:delete:many', 'urn:sistema:recurso:update:many'
    ], permisos) == (True,
                     set([
                         'urn:sistema:recurso:create',
                         'urn:sistema:recurso:delete',
                         'urn:sistema:recurso:delete:many',
                         'urn:sistema:recurso:update:many'
                     ]))

    assert p.chequear_permisos(
        '1',
        ['urn:sistema:recurso:update', 'urn:sistema:recurso:delete:many:algo'],
        permisos) == (False, set(['urn:sistema:recurso:update']))
Exemple #4
0
def _test_permisos_default_algunos_falsos():
    import warden.api.rest.permisos as p
    permisos = {
        'default': [
            'urn:sistema:recurso:create', 'urn:sistema:recurso:update:self',
            'urn:sistema:recurso:update', 'urn:sistema:recurso:delete:many',
            'urn:sistema:recurso:update:many:restricted'
        ]
    }

    assert p.chequear_permisos('1', [
        'urn:sistema:recurso:create', 'urn:sistema:recurso:delete',
        'urn:sistema:recurso:delete:many:algo'
    ], permisos) == (False, {'urn:sistema:recurso:create'})

    assert p.chequear_permisos(
        '1',
        ['urn:sistema:recurso:update', 'urn:sistema:recurso:delete:many:algo'],
        permisos) == (False, set())
Exemple #5
0
def test_operacion_recurso(permisos_recurso_solo_operacion):
    """
        testea que solo esté permitido una operación en el recurso, teneindo en cuenta distintos casos de usuarios y los scopes de tales operaciones.
    """
    import warden.api.rest.permisos as perm

    equivalencias_operaciones = {
        'delete': ['delete'],
        'update': ['update'],
        'read': ['read'],
        'create': ['create', 'read', 'update'],
        '*': ['create', 'read', 'update', 'delete']
    }

    for a, permisos in enumerate(permisos_recurso_solo_operacion):
        op = permisos['operacion']
        permisos_posibles = permisos['permisos']

        for i, p in enumerate(permisos_posibles):
            es_default = i % 2 == 0
            ''' acceso a todo el recurso esta denegado '''
            assert perm.chequear_permisos('1', [f'urn:sistema:recurso'],
                                          p) == (False, set())

            for _op in ['create', 'update', 'delete', 'read']:
                usuarios = ['1']
                if es_default:
                    usuarios.extend(['2', '3', '4'])
                ''' la operación permitida por los permisos es cuando op == _op '''
                if _op in equivalencias_operaciones[op]:
                    for usuario in usuarios:
                        assert perm.chequear_permisos(
                            usuario, [f'urn:sistema:recurso:{_op}'],
                            p) == (True, {f'urn:sistema:recurso:{_op}'})
                        for alc in ['sub', 'one', 'self', 'many', 'any']:
                            assert perm.chequear_permisos(
                                usuario, [f'urn:sistema:recurso:{_op}:{alc}'],
                                p) == (True,
                                       {f'urn:sistema:recurso:{_op}:{alc}'})
                            assert perm.chequear_permisos(
                                usuario, [
                                    f'urn:sistema:recurso:{_op}:{alc}:restricted'
                                ], p) == (False, set())
                else:
                    for usuario in usuarios:
                        assert perm.chequear_permisos(
                            usuario, [f'urn:sistema:recurso:{_op}'],
                            p) == (False, set())
                        for alc in ['sub', 'one', 'self', 'many', 'any']:
                            assert perm.chequear_permisos(
                                usuario, [f'urn:sistema:recurso:_{op}:{alc}'],
                                p) == (False, set())
                            assert perm.chequear_permisos(
                                usuario, [
                                    f'urn:sistema:recurso:{_op}:{alc}:restricted'
                                ], p) == (False, set())
Exemple #6
0
def test_acceso_de_admin(permisos):
    import warden.api.rest.permisos as p
    ''' chequeo con un usuario super admin de asistencia '''

    assert p.chequear_permisos('89d88b81-fbc0-48fa-badb-d32854d3d93a', [
        "urn:assistance:users:read", "urn:assistance:schedule:delete",
        "urn:assistance:schedule:create", "urn:assistance:logs:create",
        "urn:assistance:logs:read", "urn:assistance:devices:read",
        "urn:assistance:justifications:read",
        "urn:assistance:justifications:create",
        "urn:assistance:justifications:delete",
        "urn:assistance:justifications:update",
        "urn:assistance:justification-date:create",
        "urn:assistance:justification-date:delete"
    ], permisos) == (True, {
        "urn:assistance:users:read", "urn:assistance:schedule:delete",
        "urn:assistance:schedule:create", "urn:assistance:logs:create",
        "urn:assistance:logs:read", "urn:assistance:devices:read",
        "urn:assistance:justifications:read",
        "urn:assistance:justifications:create",
        "urn:assistance:justifications:delete",
        "urn:assistance:justifications:update",
        "urn:assistance:justification-date:create",
        "urn:assistance:justification-date:delete"
    })

    assert p.chequear_permisos('89d88b81-fbc0-48fa-badb-d32854d3d93a', [
        "urn:assistance:users:read", "urn:assistance:users:read:self",
        "urn:assistance:users:read:any", "urn:assistance:users:read:many",
        "urn:assistance:users:read:one", "urn:assistance:users:read:sub"
    ], permisos) == (True, {
        "urn:assistance:users:read", "urn:assistance:users:read:self",
        "urn:assistance:users:read:any", "urn:assistance:users:read:many",
        "urn:assistance:users:read:one", "urn:assistance:users:read:sub"
    })

    assert p.chequear_permisos(
        '89d88b81-fbc0-48fa-badb-d32854d3d93a',
        ["urn:assistance:general-assistance-report:read:many:restricted"],
        permisos) == (True, {
            "urn:assistance:general-assistance-report:read:many:restricted"
        })

    assert p.chequear_permisos('89d88b81-fbc0-48fa-badb-d32854d3d93a', [
        "urn:assistance:general-assistance-report:read:many:algo-inexistente"
    ], permisos) == (False, set())

    assert p.chequear_permisos('89d88b81-fbc0-48fa-badb-d32854d3d93a', [
        "urn:assistance:general-assistance-report:read:many",
        "urn:assistance:general-assistance-report:read:many:restricted",
        "urn:assistance:general-assistance-report:read:many:algo-inexistente"
    ], permisos) == (False, {
        "urn:assistance:general-assistance-report:read:many:restricted"
    })

    assert p.chequear_permisos(
        '89d88b81-fbc0-48fa-badb-d32854d3d93a',
        ["urn:assistance:general-assistance-report:read"], permisos) == (False,
                                                                         set())
Exemple #7
0
def test_permisos_usuario_verdaderos():
    import warden.api.rest.permisos as p
    permisos = {
        '1': [
            'urn:sistema:recurso:delete',
            'urn:sistema:recurso:update',
        ],
        'default': [
            'urn:sistema:recurso:create', 'urn:sistema:recurso:update:self',
            'urn:sistema:recurso:update', 'urn:sistema:recurso:delete:many',
            'urn:sistema:recurso:update:many:restricted'
        ]
    }
    assert p.chequear_permisos('1', [
        'urn:sistema:recurso:create', 'urn:sistema:recurso:delete',
        'urn:sistema:recurso:delete:many:algo'
    ], permisos) == (False, {
        'urn:sistema:recurso:create', 'urn:sistema:recurso:delete'
    })

    assert p.chequear_permisos(
        '1',
        ['urn:sistema:recurso:update', 'urn:sistema:recurso:delete:many:algo'],
        permisos) == (False, {'urn:sistema:recurso:update'})
Exemple #8
0
def test_permisos_default_verdaderos():
    import warden.api.rest.permisos as p
    permisos = {
        'default': [
            'urn:sistema:recurso:create', 'urn:sistema:recurso:update:self',
            'urn:sistema:recurso:update', 'urn:sistema:recurso:delete:many',
            'urn:sistema:recurso:update:many:restricted'
        ]
    }
    assert p.chequear_permisos('1', [
        'urn:sistema:recurso:create', 'urn:sistema:recurso:update:self',
        'urn:sistema:recurso:delete:many'
    ], permisos) == (True, {
        'urn:sistema:recurso:create', 'urn:sistema:recurso:update:self',
        'urn:sistema:recurso:delete:many'
    })
Exemple #9
0
def _test_permisos_especificos_default_verdaderos():
    import warden.api.rest.permisos as p
    permisos = {
        '1': ['urn:sistema:recurso:update'],
        'default': [
            'urn:sistema:recurso:create', 'urn:sistema:recurso:update',
            'urn:sistema:recurso:update:self',
            'urn:sistema:recurso:update:many:restricted',
            'urn:sistema:recurso:delete:many'
        ]
    }
    assert p.chequear_permisos('1', ['urn:sistema:recurso:create'],
                               permisos) == (True,
                                             {'urn:sistema:recurso:create'})

    assert p.chequear_permisos(
        '1', ['urn:sistema:recurso:update:self'],
        permisos) == (True, {'urn:sistema:recurso:update:self'})
    assert p.chequear_permisos('1', ['urn:sistema:recurso:update'],
                               permisos) == (True,
                                             {'urn:sistema:recurso:update'})
    assert p.chequear_permisos(
        '1', ['urn:sistema:recurso:update:many'],
        permisos) == (True, {'urn:sistema:recurso:update:many'})
    assert p.chequear_permisos('2', ['urn:sistema:recurso:update'],
                               permisos) == (False, set())
    assert p.chequear_permisos(
        '1', ['urn:sistema:recurso:update:many:restricted'],
        permisos) == (True, {'urn:sistema:recurso:update:many:restricted'})

    assert p.chequear_permisos(
        '1', ['urn:sistema:recurso:delete:many'],
        permisos) == (True, {'urn:sistema:recurso:delete:many'})
    assert p.chequear_permisos('1',
                               ['urn:sistema:recurso:delete:many:restricted'],
                               permisos) == (False, set())
    assert p.chequear_permisos('1', ['urn:sistema:recurso:delete:many:algo'],
                               permisos) == (False, set())
Exemple #10
0
def test_permisos_comodin_1():
    import warden.api.rest.permisos as p
    permisos = {'default': ['urn:*:*:*']}
    assert p.chequear_permisos('1', ['urn:sistema:recurso:*'],
                               permisos) == (True,
                                             set(['urn:sistema:recurso:*']))
    assert p.chequear_permisos(
        '1', ['urn:sistema:recurso:create'],
        permisos) == (True, set(['urn:sistema:recurso:create']))
    assert p.chequear_permisos('1', ['urn:sistema:recurso'],
                               permisos) == (True, set(['urn:sistema:recurso'
                                                        ]))
    assert p.chequear_permisos(
        '1', ['urn:sistema:recurso:update'],
        permisos) == (True, set(['urn:sistema:recurso:update']))
    assert p.chequear_permisos(
        '1', ['urn:sistema2:recurso2:update'],
        permisos) == (True, set(['urn:sistema2:recurso2:update']))
    assert p.chequear_permisos(
        '1', ['urn:sistema2:recurso1:update'],
        permisos) == (True, set(['urn:sistema2:recurso1:update']))

    assert p.chequear_permisos('1', [
        'urn:sistema:recurso:create', 'urn:sistema:recurso:delete',
        'urn:sistema:recurso:delete:many',
        'urn:sistema:recurso:delete:many:algo'
    ], permisos) == (False, {
        'urn:sistema:recurso:create', 'urn:sistema:recurso:delete',
        'urn:sistema:recurso:delete:many'
    })

    assert p.chequear_permisos('1', [
        'urn:sistema:recurso:create', 'urn:sistema:recurso:delete',
        'urn:sistema:recurso:delete:many'
    ], permisos) == (True,
                     set([
                         'urn:sistema:recurso:create',
                         'urn:sistema:recurso:delete',
                         'urn:sistema:recurso:delete:many'
                     ]))
Exemple #11
0
def test_operaciones_recurso(permisos_recurso_completo):
    '''
        Las operaciones permitidas sobre los recursos son:
        udpate, delete, create, read

        se pueden asignar los permisos por operación individual, o por recurso completo.
        urn:sistema:recurso ---> versión de recurso completo
        urn:sistema:recurso:create --> versión de operación individual

        cada operación tiene un alcance determinado por una estructura tipo arbol de oficinas y cargos.
        los cargos que se toman en cuenta para las operaciones de los recursos dependen de cada sistema.
        los alcances son:
        self ---> recurso propio
        one ----> misma unidad organizativa
        sub ----> unidades organizativas subordinadas. NO incluye one
        many ---> one + sub 
        any ----> es igual que comodín, *, o sea todos, no tiene restricción de alcance

        en los casos que sea requerido se puede asociar modificador de modelo.
        ej:
        urn:sistema:recurso:create:restricted
        urn:sistema:recurso:read:many:restricted

        en esos casos el modificador de modelo sirve para que el sistema pueda identificar restricciones a imponer.
        cualquier modificador de sistema SOBRE ESCRIBE el alcance sin modificador.
        ej:
        urn:sistema:recurso:read:many
        urn:sistema:recurso:read:many:restricted  <--- este sobreescribe el anterior.

        Los permisos se asocian dentro de un grupo, La sobre escritura de los permisos solo funciona dentro del mismo grupo
        Entre distintos grupos de permisos NO se sobreescriben.
        ej:

        '1': {
            'urn:sistema:recurso:read:many'
        },
        'default': {
            'urn:sistema:recurso:read:many:restricted'
        }

        todos los demas que no sean 1 tienen el read:many:restricted, el caso del 1 tiene read:many
    '''

    import warden.api.rest.permisos as perm
    '''
        Se asignan todos los permisos a un recurso en particular.
        Usado de esta forma no se aplican restricciones de modelo al alcance del recurso.
        Las restricciones de modelo solo se aplican explícitamente.
    '''

    for p in permisos_recurso_completo:
        ''' chequeo las operaciones '''
        assert perm.chequear_permisos('1', ['urn:sistema:recurso'],
                                      p) == (True, {'urn:sistema:recurso'})
        assert perm.chequear_permisos('1', [
            'urn:sistema:recurso', 'urn:sistema:recurso:create',
            'urn:sistema:recurso:delete', 'urn:sistema:recurso:update',
            'urn:sistema:recurso:read'
        ], p) == (True, {
            'urn:sistema:recurso', 'urn:sistema:recurso:create',
            'urn:sistema:recurso:delete', 'urn:sistema:recurso:update',
            'urn:sistema:recurso:read'
        })
        ''' 
            chequeo el alcance de las operaciones y que no tengan aplicadas restricciones de modelo 
            las chequeo en forma individual y en forma de conjunto
        '''
        permisos_a_chequear = []
        for op in ['create', 'update', 'delete', 'read']:
            for alc in ['sub', 'one', 'self', 'many', 'any']:
                assert perm.chequear_permisos(
                    '1', [f'urn:sistema:recurso:{op}:{alc}'],
                    p) == (True, {f'urn:sistema:recurso:{op}:{alc}'})
                assert perm.chequear_permisos(
                    '1', [f'urn:sistema:recurso:{op}:{alc}:restricted'],
                    p) == (False, set())
                permisos_a_chequear.append(f'urn:sistema:recurso:{op}:{alc}')
        assert perm.chequear_permisos('1', permisos_a_chequear,
                                      p) == (True, set(permisos_a_chequear))
        ''' 
            operaciones no existentes sobre el recurso 
            chequeo en forma individual y en forma de conjunto
        '''
        permisos_a_chequear = []
        for op in ['op1', 'op2']:
            assert perm.chequear_permisos('1', [f'urn:sistema:recurso:{op}'],
                                          p) == (False, set())
            permisos_a_chequear.append(f'urn:sistema:recurso:{op}')
            for alc in ['sub', 'one', 'self', 'many', 'any']:
                assert perm.chequear_permisos(
                    '1', [f'urn:sistema:recurso:{op}:{alc}'],
                    p) == (False, set())
                permisos_a_chequear.append(f'urn:sistema:recurso:{op}:{alc}')
        assert perm.chequear_permisos('1', permisos_a_chequear,
                                      p) == (False, set())
        ''' chequeo recursos inexistentes '''
        permisos_a_chequear = []
        assert perm.chequear_permisos('1', [f'urn:sistema:recurso2'],
                                      p) == (False, set())
        for op in ['create', 'update', 'delete', 'read']:
            for alc in ['sub', 'one', 'self', 'many', 'any']:
                permisos_a_chequear.append(f'urn:sistema:recurso2:{op}:{alc}')
                assert perm.chequear_permisos(
                    '1', [f'urn:sistema:recurso2:{op}:{alc}'],
                    p) == (False, set())
                assert perm.chequear_permisos(
                    '1', [f'urn:sistema:recurso2:{op}:{alc}:restricted'],
                    p) == (False, set())
        assert perm.chequear_permisos('1', permisos_a_chequear,
                                      p) == (False, set())

        assert perm.chequear_permisos('1', ['url:*'], p) == (False, set())
        assert perm.chequear_permisos('1', ['url:*:*'], p) == (False, set())
        assert perm.chequear_permisos('1', ['url:*:*:*'], p) == (False, set())
        assert perm.chequear_permisos('1', ['url:*:*:*:*'],
                                      p) == (False, set())
        assert perm.chequear_permisos('1', ['url:*:*:*:*:*'],
                                      p) == (False, set())
        assert perm.chequear_permisos('1', ['urn:sistema'],
                                      p) == (False, set())
        assert perm.chequear_permisos('1', ['urn'], p) == (False, set())
Exemple #12
0
def test_default():
    ''' Comprobacion permisos de usuario default
    Se crean 3 tests diferentes para usuario default.
    1 --> Permisos que tiene y que deben retornar --> VERDADERO
    2 --> Permisos sobre recursos que NO tiene debe retornar --> FALSO
    3 --> Permisos DENEGADOS generados automaticamente en base al permiso de la persona que deben retornar --> FALSO

    Permisos de un usuario default:
    "urn:assistance:users:read:self",
    "urn:assistance:users:read:many:restricted",
    "urn:assistance:places:read:many",
    "urn:assistance:assistance-report:read:many:restricted",
    "urn:assistance:justification-report:read:many:restricted",
    "urn:assistance:general-assistance-report:read:many:restricted",
    "urn:assistance:schedule:read:self",
    "urn:assistance:schedule:read:many:restricted",
    "urn:assistance:justifications:read:many:restricted",
    "urn:assistance:justification-date:create:many:restricted",
    "urn:assistance:justification-date:delete:many:restricted",
    "urn:assistance:justification-date:read:self"  
    '''
    import warden.api.rest.permisos as p
    ''' Accesos permitidos '''
    assert p.chequear_permisos('default', [
        "urn:assistance:users:read:many:restricted",
        "urn:assistance:users:read:self", "urn:assistance:places:read:many",
        "urn:assistance:assistance-report:read:many:restricted",
        "urn:assistance:justification-report:read:many:restricted",
        "urn:assistance:general-assistance-report:read:many:restricted",
        "urn:assistance:schedule:read:many:restricted",
        "urn:assistance:schedule:read:self",
        "urn:assistance:justifications:read:many:restricted",
        "urn:assistance:justification-date:create:many:restricted",
        "urn:assistance:justification-date:delete:many:restricted",
        "urn:assistance:justification-date:read:self"
    ], permisos) == (True, {
        "urn:assistance:users:read:many:restricted",
        "urn:assistance:users:read:self", "urn:assistance:places:read:many",
        "urn:assistance:assistance-report:read:many:restricted",
        "urn:assistance:justification-report:read:many:restricted",
        "urn:assistance:general-assistance-report:read:many:restricted",
        "urn:assistance:schedule:read:many:restricted",
        "urn:assistance:schedule:read:self",
        "urn:assistance:justifications:read:many:restricted",
        "urn:assistance:justification-date:create:many:restricted",
        "urn:assistance:justification-date:delete:many:restricted",
        "urn:assistance:justification-date:read:self"
    })
    ''' Permisos denegados '''
    #Recursos denegados para el perfil determinado
    recursosDenegados = ['logs', 'devices', '*']
    operacionesDenegadas = ['update', '*']
    alcancesDenegados = ['any', 'one', 'sub', '*']

    for s in sistemas:
        for r in recursosDenegados:
            for o in operacionesDenegadas:
                for a in alcancesDenegados:
                    assert p.chequear_permisos('default',
                                               [f"urn:{s}:{r}:{o}:{a}"],
                                               permisos) == (False, set())
    ''' Permisos denegados generados automaticamente en base al perfil enviado '''
    #Combinaciones que deberian ser denegadas para el perfil determinado
    denegados = generarPermisosDenegados('default')
    for urn in denegados:
        for s in denegados[urn]:
            for r in denegados[urn][s]:
                for o in denegados[urn][s][r]:
                    for a in denegados[urn][s][r][o]:
                        for m in denegados[urn][s][r][o][a]:
                            if m == 'restricted':
                                print(
                                    f'Probando permiso --> {urn}:{s}:{r}:{o}:{a}:{m}'
                                )
                                assert p.chequear_permisos(
                                    'default', [f'{urn}:{s}:{r}:{o}:{a}:{m}'],
                                    permisos) == (False, set())
                            else:
                                print(
                                    f'Probando permiso --> {urn}:{s}:{r}:{o}:{a}'
                                )
                                assert p.chequear_permisos(
                                    'default', [f'{urn}:{s}:{r}:{o}:{a}'],
                                    permisos) == (False, set())