camper/deploy/campsite_type_option.sql
jordi fita mas 678b5cc523 Add user-defined order to campsite types, options, seasons and carousels
I use Sortable, exactly like HTMx’s sorting example does[0].  Had to
export the slug or ID of some entries to be able to add it in the hidden
input.

For forms that use ID instead of slug, had to use an input name other
than “id” because otherwise the swap would fail due to bug #1496[1].  It
is apparently fixed in a recent version of HTMx, but i did not want to
update for fear of behaviour changes.

[0]: https://htmx.org/examples/sortable/
[1]: https://github.com/bigskysoftware/htmx/issues/1496
2023-12-20 19:52:14 +01:00

56 lines
1.6 KiB
PL/PgSQL

-- Deploy camper:campsite_type_option to pg
-- requires: roles
-- requires: schema_camper
-- requires: campsite_type
-- requires: user_profile
begin;
set search_path to camper, public;
create table campsite_type_option (
campsite_type_option_id integer generated by default as identity primary key,
campsite_type_id integer not null references campsite_type,
name text not null constraint name_not_empty check(length(trim(name)) > 0),
range int4range not null constraint range_not_negative check(lower(range) >= 0),
position integer not null default 2147483647
);
alter table campsite_type_option enable row level security;
grant select on table campsite_type_option to guest;
grant select on table campsite_type_option to employee;
grant select, insert, update, delete on table campsite_type_option to admin;
create policy guest_ok
on campsite_type_option
for select
using (true)
;
create policy insert_to_company
on campsite_type_option
for insert
with check (
exists (select 1 from campsite_type join user_profile using (company_id) where campsite_type.campsite_type_id = campsite_type_option.campsite_type_id)
)
;
create policy update_company
on campsite_type_option
for update
using (
exists (select 1 from campsite_type join user_profile using (company_id) where campsite_type.campsite_type_id = campsite_type_option.campsite_type_id)
)
;
create policy delete_from_company
on campsite_type_option
for delete
using (
exists (select 1 from campsite_type join user_profile using (company_id) where campsite_type.campsite_type_id = campsite_type_option.campsite_type_id)
)
;
commit;