view schema/gemma_tests.sql @ 5025:4c658a8f34da

Fix row level security policies for waterway admin Since 'staging_done OR' was added to the conditions to improve performance for read access, it was also allowed to delete and partly update entries with staging_done set to true but otherwise being outside the country of the respective waterway admin. Using an extra policy for each command and using the 'staging_done OR' tweak only FOR SELECT should fix authorization while keeping performance.
author Tom Gottfried <tom@intevation.de>
date Wed, 18 Mar 2020 12:16:42 +0100
parents cf25b23e3eec
children e21cbb9768a2
line wrap: on
line source

-- This is Free Software under GNU Affero General Public License v >= 3.0
-- without warranty, see README.md and license for details.

-- SPDX-License-Identifier: AGPL-3.0-or-later
-- License-Filename: LICENSES/AGPL-3.0.txt

-- Copyright (C) 2019 by via donau
--   – Österreichische Wasserstraßen-Gesellschaft mbH
-- Software engineering by Intevation GmbH

-- Author(s):
--  * Tom Gottfried <tom@intevation.de>

--
-- pgTAP test script for gemma schema definition
--

SELECT ok(is_valid_from_item('SELECT * FROM sys_admin.published_services'),
    'Valid statement passes check');

SELECT ok(NOT is_valid_from_item('This is not SQL'),
    'Arbitrary text does not pass check');

SELECT ok(is_valid_from_item(NULL) IS NULL,
    'NULL value is not checked');

SELECT throws_ok($$
    INSERT INTO waterway.waterway_axis (wtwaxs, objnam) VALUES
        (ST_GeogFromText('MULTILINESTRING((0 0, 1 1))'), 'test'),
        (ST_GeogFromText('MULTILINESTRING((0 0, 1 1))'), 'test')
    $$,
    23505, NULL,
    'No duplicate geometries can be inserted into waterway_axis');

SELECT lives_ok($$
    INSERT INTO waterway.waterway_axis (wtwaxs, objnam, validity) VALUES (
        ST_GeogFromText('MULTILINESTRING((0 0, 1 1))'),
        'test',
        tstzrange(NULL, current_timestamp)
    ), (
        ST_GeogFromText('MULTILINESTRING((0 0, 1 1))'),
        'test',
        tstzrange(current_timestamp, NULL)
    )
    $$,
    'Duplicate axis geometries can be inserted if validity differs');

SELECT throws_ok($$
    INSERT INTO waterway.waterway_area (area) VALUES
        (ST_GeogFromText('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))')),
        (ST_GeogFromText('POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))'))
    $$,
    23505, NULL,
    'No duplicate geometries can be inserted into waterway_area');