56 lines
1.4 KiB
SQL
56 lines
1.4 KiB
SQL
-- +goose Up
|
|
-- +goose StatementBegin
|
|
-- ROLES
|
|
CREATE TABLE roles (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid (),
|
|
name TEXT NOT NULL,
|
|
scope TEXT NOT NULL,
|
|
description TEXT,
|
|
UNIQUE (name, scope)
|
|
);
|
|
|
|
-- PERMISSIONS
|
|
CREATE TABLE permissions (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid (),
|
|
name TEXT NOT NULL,
|
|
scope TEXT NOT NULL,
|
|
description TEXT,
|
|
UNIQUE (name, scope)
|
|
);
|
|
|
|
-- ROLE-PERMISSIONS (many-to-many)
|
|
CREATE TABLE role_permissions (
|
|
role_id UUID REFERENCES roles (id) ON DELETE CASCADE,
|
|
permission_id UUID REFERENCES permissions (id) ON DELETE CASCADE,
|
|
PRIMARY KEY (role_id, permission_id)
|
|
);
|
|
|
|
-- USER-ROLES (direct assignment, optional)
|
|
CREATE TABLE user_roles (
|
|
user_id UUID REFERENCES users (id) ON DELETE CASCADE,
|
|
role_id UUID REFERENCES roles (id) ON DELETE CASCADE,
|
|
PRIMARY KEY (user_id, role_id)
|
|
);
|
|
|
|
-- USER-PERMISSIONS (direct assignment, optional)
|
|
CREATE TABLE user_permissions (
|
|
user_id UUID REFERENCES users (id) ON DELETE CASCADE,
|
|
permission_id UUID REFERENCES permissions (id) ON DELETE CASCADE,
|
|
PRIMARY KEY (user_id, permission_id)
|
|
);
|
|
|
|
-- +goose StatementEnd
|
|
-- +goose Down
|
|
-- +goose StatementBegin
|
|
DROP TABLE IF EXISTS user_permissions;
|
|
|
|
DROP TABLE IF EXISTS user_roles;
|
|
|
|
DROP TABLE IF EXISTS role_permissions;
|
|
|
|
DROP TABLE IF EXISTS permissions;
|
|
|
|
DROP TABLE IF EXISTS roles;
|
|
|
|
-- +goose StatementEnd
|