initial commit
This commit is contained in:
44
migrations/00004_create_rbac_tables.sql
Normal file
44
migrations/00004_create_rbac_tables.sql
Normal file
@@ -0,0 +1,44 @@
|
||||
-- +goose Up
|
||||
-- +goose StatementBegin
|
||||
|
||||
-- =========================================
|
||||
-- ТАБЛИЦА: user_roles - Связь пользователей и ролей (Many-to-Many)
|
||||
-- =========================================
|
||||
CREATE TABLE user_roles (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
role_id BIGINT NOT NULL REFERENCES roles(id) ON DELETE CASCADE,
|
||||
assigned_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||||
assigned_by BIGINT REFERENCES users(id),
|
||||
UNIQUE(user_id, role_id)
|
||||
);
|
||||
|
||||
COMMENT ON TABLE user_roles IS 'Связь пользователей и ролей (Many-to-Many). Один пользователь может иметь несколько ролей';
|
||||
COMMENT ON COLUMN user_roles.assigned_by IS 'Кто назначил роль (для аудита)';
|
||||
|
||||
-- =========================================
|
||||
-- ТАБЛИЦА: role_permissions - Связь ролей и разрешений (Many-to-Many)
|
||||
-- =========================================
|
||||
CREATE TABLE role_permissions (
|
||||
id BIGSERIAL PRIMARY KEY,
|
||||
role_id BIGINT NOT NULL REFERENCES roles(id) ON DELETE CASCADE,
|
||||
permission_id BIGINT NOT NULL REFERENCES permissions(id) ON DELETE CASCADE,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE(role_id, permission_id)
|
||||
);
|
||||
|
||||
COMMENT ON TABLE role_permissions IS 'Связь ролей и разрешений (Many-to-Many) для гибкой системы RBAC';
|
||||
|
||||
-- Индексы для оптимизации запросов прав доступа
|
||||
CREATE INDEX idx_user_roles_user_id ON user_roles(user_id);
|
||||
CREATE INDEX idx_user_roles_role_id ON user_roles(role_id);
|
||||
CREATE INDEX idx_role_permissions_role_id ON role_permissions(role_id);
|
||||
CREATE INDEX idx_role_permissions_permission_id ON role_permissions(permission_id);
|
||||
|
||||
-- +goose StatementEnd
|
||||
|
||||
-- +goose Down
|
||||
-- +goose StatementBegin
|
||||
DROP TABLE IF EXISTS role_permissions CASCADE;
|
||||
DROP TABLE IF EXISTS user_roles CASCADE;
|
||||
-- +goose StatementEnd
|
||||
Reference in New Issue
Block a user