bmc_hub/migrations/1071_case_confidentiality.sql

25 lines
1.4 KiB
MySQL
Raw Normal View History

-- 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;