/
h0tnanny
/
IotPlatform
Обзор
Документация
Войти
/
h0tnanny
/
IotPlatform
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
develop
database/auth_schema.sql
103 строки
4 KB
h0tnanny
fix readonly permissions
01 фев 2026, 23:32
01 фев 2026, 23:32
01880f6
Код
Авторство
О чём код?
-- Auth Schema Migration for IoT Platform -- PostgreSQL 12+ -- Run: psql -h localhost -p 5433 -U postgres -d iot_platform -f database/auth_schema.sql -- Функция для updated_at (если ещё не создана в schema.sql) CREATE OR REPLACE FUNCTION update_updated_at_column() RETURNS TRIGGER AS $$ BEGIN NEW.updated_at = CURRENT_TIMESTAMP; RETURN NEW; END; $$ language 'plpgsql'; -- Таблица пользователей CREATE TABLE IF NOT EXISTS users ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), username VARCHAR(50) UNIQUE NOT NULL, email VARCHAR(255) UNIQUE NOT NULL, password_hash VARCHAR(255) NOT NULL, role VARCHAR(20) NOT NULL DEFAULT 'user', first_name VARCHAR(100), last_name VARCHAR(100), patronymic VARCHAR(100), position VARCHAR(200), is_active BOOLEAN DEFAULT TRUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Таблица refresh токенов CREATE TABLE IF NOT EXISTS refresh_tokens ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE, token VARCHAR(512) NOT NULL, expires_at TIMESTAMP NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Группы пользователей CREATE TABLE IF NOT EXISTS user_groups ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name VARCHAR(100) NOT NULL, description TEXT, owner_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Участники групп CREATE TABLE IF NOT EXISTS user_group_members ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), group_id UUID NOT NULL REFERENCES user_groups(id) ON DELETE CASCADE, user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE, role VARCHAR(20) NOT NULL DEFAULT 'viewer', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE(group_id, user_id) ); -- Владельцы ресурсов CREATE TABLE IF NOT EXISTS resource_permissions ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), resource_type VARCHAR(50) NOT NULL, resource_id VARCHAR(255) NOT NULL, owner_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE(resource_type, resource_id) ); -- Шаринг ресурсов CREATE TABLE IF NOT EXISTS resource_shares ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), resource_type VARCHAR(50) NOT NULL, resource_id VARCHAR(255) NOT NULL, shared_with_type VARCHAR(20) NOT NULL, shared_with_id UUID NOT NULL, permission VARCHAR(20) NOT NULL DEFAULT 'viewer', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE(resource_type, resource_id, shared_with_type, shared_with_id) ); -- Индексы CREATE INDEX IF NOT EXISTS idx_refresh_tokens_user_id ON refresh_tokens(user_id); CREATE INDEX IF NOT EXISTS idx_refresh_tokens_token ON refresh_tokens(token); CREATE INDEX IF NOT EXISTS idx_user_groups_owner_id ON user_groups(owner_id); CREATE INDEX IF NOT EXISTS idx_user_group_members_group_id ON user_group_members(group_id); CREATE INDEX IF NOT EXISTS idx_user_group_members_user_id ON user_group_members(user_id); CREATE INDEX IF NOT EXISTS idx_resource_permissions_owner_id ON resource_permissions(owner_id); CREATE INDEX IF NOT EXISTS idx_resource_permissions_resource ON resource_permissions(resource_type, resource_id); CREATE INDEX IF NOT EXISTS idx_resource_shares_resource ON resource_shares(resource_type, resource_id); CREATE INDEX IF NOT EXISTS idx_resource_shares_shared_with ON resource_shares(shared_with_type, shared_with_id); -- Триггеры для updated_at DROP TRIGGER IF EXISTS update_users_updated_at ON users; CREATE TRIGGER update_users_updated_at BEFORE UPDATE ON users FOR EACH ROW EXECUTE FUNCTION update_updated_at_column(); DROP TRIGGER IF EXISTS update_user_groups_updated_at ON user_groups; CREATE TRIGGER update_user_groups_updated_at BEFORE UPDATE ON user_groups FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();