25 lines
1.4 KiB
SQL
25 lines
1.4 KiB
SQL
-- Case privacy is additive; absence of a row preserves current case visibility.
|
|
CREATE TABLE IF NOT EXISTS sag_case_visibility (
|
|
sag_id INTEGER PRIMARY KEY REFERENCES sag_sager(id) ON DELETE CASCADE,
|
|
restricted BOOLEAN NOT NULL DEFAULT TRUE,
|
|
version INTEGER NOT NULL DEFAULT 1,
|
|
updated_by INTEGER REFERENCES users(user_id), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
);
|
|
CREATE TABLE IF NOT EXISTS sag_case_visibility_users (
|
|
sag_id INTEGER NOT NULL REFERENCES sag_case_visibility(sag_id) ON DELETE CASCADE,
|
|
user_id INTEGER NOT NULL REFERENCES users(user_id) ON DELETE CASCADE,
|
|
PRIMARY KEY(sag_id,user_id)
|
|
);
|
|
CREATE TABLE IF NOT EXISTS sag_case_visibility_groups (
|
|
sag_id INTEGER NOT NULL REFERENCES sag_case_visibility(sag_id) ON DELETE CASCADE,
|
|
group_id INTEGER NOT NULL REFERENCES groups(id) ON DELETE CASCADE,
|
|
PRIMARY KEY(sag_id,group_id)
|
|
);
|
|
CREATE INDEX IF NOT EXISTS sag_visibility_user ON sag_case_visibility_users(user_id,sag_id);
|
|
CREATE INDEX IF NOT EXISTS sag_visibility_group ON sag_case_visibility_groups(group_id,sag_id);
|
|
INSERT INTO permissions(code,description,category) VALUES
|
|
('cases.manage_confidential','Administrere fortrolige sagers adgang','cases') ON CONFLICT DO NOTHING;
|
|
INSERT INTO group_permissions(group_id,permission_id)
|
|
SELECT g.id,p.id FROM groups g CROSS JOIN permissions p
|
|
WHERE g.name='Administrators' AND p.code='cases.manage_confidential' ON CONFLICT DO NOTHING;
|