Mercurial > gemma
comparison schema/auth.sql @ 4785:1fef9d8e7eb2
Improved performance for RLS on read access.
Only do expensive regional test if data is in staging area (and on
write operations).
author | Sascha Wilde <wilde@intevation.de> |
---|---|
date | Wed, 23 Oct 2019 15:23:52 +0200 |
parents | 2440d2f86f4e |
children | 9e077ca97505 |
comparison
equal
deleted
inserted
replaced
4784:ecbb12a6e8ee | 4785:1fef9d8e7eb2 |
---|---|
127 -- Staging area | 127 -- Staging area |
128 -- TODO: add all relevant tables here | 128 -- TODO: add all relevant tables here |
129 | 129 |
130 CREATE POLICY same_country ON waterway.gauge_measurements | 130 CREATE POLICY same_country ON waterway.gauge_measurements |
131 FOR ALL TO waterway_admin | 131 FOR ALL TO waterway_admin |
132 USING ((location).country_code | 132 USING (staging_done |
133 = (SELECT country FROM users.list_users WHERE username = current_user) | 133 OR (location).country_code = |
134 ); | 134 (SELECT country FROM users.list_users |
135 WHERE username = current_user)) | |
136 WITH CHECK ((location).country_code = | |
137 (SELECT country FROM users.list_users | |
138 WHERE username = current_user)); | |
135 | 139 |
136 CREATE POLICY same_country ON waterway.waterway_profiles | 140 CREATE POLICY same_country ON waterway.waterway_profiles |
137 FOR ALL TO waterway_admin | 141 FOR ALL TO waterway_admin |
138 USING ((location).country_code = (SELECT country FROM users.list_users WHERE username = current_user)); | 142 USING (staging_done |
143 OR (location).country_code = | |
144 (SELECT country FROM users.list_users | |
145 WHERE username = current_user)) | |
146 WITH CHECK ((location).country_code = | |
147 (SELECT country FROM users.list_users | |
148 WHERE username = current_user)); | |
139 | 149 |
140 CREATE POLICY responsibility_area ON waterway.bottlenecks | 150 CREATE POLICY responsibility_area ON waterway.bottlenecks |
141 FOR ALL TO waterway_admin | 151 FOR ALL TO waterway_admin |
142 USING (users.utm_covers(area)); | 152 USING (staging_done OR users.utm_covers(area)) |
153 WITH CHECK (users.utm_covers(area)); | |
143 | 154 |
144 CREATE POLICY responsibility_area ON waterway.sounding_results | 155 CREATE POLICY responsibility_area ON waterway.sounding_results |
145 FOR ALL TO waterway_admin | 156 FOR ALL TO waterway_admin |
146 USING (users.utm_covers(area)); | 157 USING (staging_done OR users.utm_covers(area)) |
158 WITH CHECK (users.utm_covers(area)); | |
147 | 159 |
148 CREATE POLICY responsibility_area ON waterway.fairway_dimensions | 160 CREATE POLICY responsibility_area ON waterway.fairway_dimensions |
149 FOR ALL TO waterway_admin | 161 FOR ALL TO waterway_admin |
150 USING (users.utm_covers(area)); | 162 USING (staging_done OR users.utm_covers(area)) |
163 WITH CHECK (users.utm_covers(area)); | |
151 | 164 |
152 CREATE POLICY same_country ON waterway.sections | 165 CREATE POLICY same_country ON waterway.sections |
153 FOR ALL TO waterway_admin | 166 FOR ALL TO waterway_admin |
154 USING (country = ( | 167 USING (country = ( |
155 SELECT country FROM users.list_users WHERE username = current_user)); | 168 SELECT country FROM users.list_users WHERE username = current_user)); |