188 lines
8.2 KiB
SQL
188 lines
8.2 KiB
SQL
-- +goose Up
|
||
-- +goose StatementBegin
|
||
|
||
-- =========================================
|
||
-- НАЧАЛЬНЫЕ ДАННЫЕ: Роли
|
||
-- =========================================
|
||
INSERT INTO roles (name, description) VALUES
|
||
('requester', 'Маломобильный гражданин - может создавать заявки на помощь'),
|
||
('volunteer', 'Волонтёр - может откликаться на заявки и оказывать помощь'),
|
||
('moderator', 'Модератор - управляет системой, модерирует заявки и жалобы'),
|
||
('admin', 'Администратор - полный доступ ко всем функциям системы')
|
||
ON CONFLICT (name) DO NOTHING;
|
||
|
||
-- =========================================
|
||
-- НАЧАЛЬНЫЕ ДАННЫЕ: Разрешения
|
||
-- =========================================
|
||
|
||
-- Разрешения для заявок
|
||
INSERT INTO permissions (name, resource, action, description) VALUES
|
||
('request.create', 'request', 'create', 'Создание заявок на помощь'),
|
||
('request.read', 'request', 'read', 'Просмотр заявок'),
|
||
('request.read_all', 'request', 'read', 'Просмотр всех заявок (включая чужие)'),
|
||
('request.update_own', 'request', 'update', 'Редактирование своих заявок'),
|
||
('request.delete_own', 'request', 'delete', 'Удаление своих заявок'),
|
||
('request.moderate', 'request', 'moderate', 'Модерация заявок (одобрение/отклонение)'),
|
||
('request.delete_any', 'request', 'delete', 'Удаление любых заявок')
|
||
ON CONFLICT (name) DO NOTHING;
|
||
|
||
-- Разрешения для откликов волонтёров
|
||
INSERT INTO permissions (name, resource, action, description) VALUES
|
||
('volunteer_response.create', 'volunteer_response', 'create', 'Отклик на заявки'),
|
||
('volunteer_response.read', 'volunteer_response', 'read', 'Просмотр откликов'),
|
||
('volunteer_response.cancel', 'volunteer_response', 'delete', 'Отмена своего отклика')
|
||
ON CONFLICT (name) DO NOTHING;
|
||
|
||
-- Разрешения для рейтингов
|
||
INSERT INTO permissions (name, resource, action, description) VALUES
|
||
('rating.create', 'rating', 'create', 'Оставление рейтинга волонтёру'),
|
||
('rating.read', 'rating', 'read', 'Просмотр рейтингов'),
|
||
('rating.read_all', 'rating', 'read', 'Просмотр всех рейтингов')
|
||
ON CONFLICT (name) DO NOTHING;
|
||
|
||
-- Разрешения для жалоб
|
||
INSERT INTO permissions (name, resource, action, description) VALUES
|
||
('complaint.create', 'complaint', 'create', 'Подача жалобы на пользователя'),
|
||
('complaint.read_own', 'complaint', 'read', 'Просмотр своих жалоб'),
|
||
('complaint.moderate', 'complaint', 'moderate', 'Обработка жалоб модератором'),
|
||
('complaint.read_all', 'complaint', 'read', 'Просмотр всех жалоб')
|
||
ON CONFLICT (name) DO NOTHING;
|
||
|
||
-- Разрешения для пользователей
|
||
INSERT INTO permissions (name, resource, action, description) VALUES
|
||
('user.read_own', 'user', 'read', 'Просмотр своего профиля'),
|
||
('user.update_own', 'user', 'update', 'Редактирование своего профиля'),
|
||
('user.read_all', 'user', 'read', 'Просмотр всех пользователей'),
|
||
('user.block', 'user', 'block', 'Блокировка пользователей'),
|
||
('user.unblock', 'user', 'unblock', 'Разблокировка пользователей')
|
||
ON CONFLICT (name) DO NOTHING;
|
||
|
||
-- Разрешения для модераторских функций
|
||
INSERT INTO permissions (name, resource, action, description) VALUES
|
||
('moderator.view_logs', 'moderator_action', 'read', 'Просмотр логов модераторов'),
|
||
('moderator.view_statistics', 'statistics', 'read', 'Просмотр статистики системы')
|
||
ON CONFLICT (name) DO NOTHING;
|
||
|
||
-- =========================================
|
||
-- СВЯЗИ: Роли и Разрешения
|
||
-- =========================================
|
||
|
||
-- Разрешения для роли "requester" (маломобильный гражданин)
|
||
INSERT INTO role_permissions (role_id, permission_id)
|
||
SELECT
|
||
(SELECT id FROM roles WHERE name = 'requester'),
|
||
p.id
|
||
FROM permissions p
|
||
WHERE p.name IN (
|
||
'request.create',
|
||
'request.read',
|
||
'request.update_own',
|
||
'request.delete_own',
|
||
'rating.create',
|
||
'rating.read',
|
||
'complaint.create',
|
||
'complaint.read_own',
|
||
'user.read_own',
|
||
'user.update_own'
|
||
)
|
||
ON CONFLICT DO NOTHING;
|
||
|
||
-- Разрешения для роли "volunteer" (волонтёр)
|
||
INSERT INTO role_permissions (role_id, permission_id)
|
||
SELECT
|
||
(SELECT id FROM roles WHERE name = 'volunteer'),
|
||
p.id
|
||
FROM permissions p
|
||
WHERE p.name IN (
|
||
'request.read',
|
||
'volunteer_response.create',
|
||
'volunteer_response.read',
|
||
'volunteer_response.cancel',
|
||
'rating.read',
|
||
'complaint.create',
|
||
'complaint.read_own',
|
||
'user.read_own',
|
||
'user.update_own'
|
||
)
|
||
ON CONFLICT DO NOTHING;
|
||
|
||
-- Разрешения для роли "moderator" (модератор)
|
||
INSERT INTO role_permissions (role_id, permission_id)
|
||
SELECT
|
||
(SELECT id FROM roles WHERE name = 'moderator'),
|
||
p.id
|
||
FROM permissions p
|
||
WHERE p.name IN (
|
||
'request.read_all',
|
||
'request.moderate',
|
||
'request.delete_any',
|
||
'volunteer_response.read',
|
||
'rating.read_all',
|
||
'complaint.moderate',
|
||
'complaint.read_all',
|
||
'user.read_all',
|
||
'user.block',
|
||
'user.unblock',
|
||
'moderator.view_logs',
|
||
'moderator.view_statistics'
|
||
)
|
||
ON CONFLICT DO NOTHING;
|
||
|
||
-- Разрешения для роли "admin" (администратор) - все разрешения
|
||
INSERT INTO role_permissions (role_id, permission_id)
|
||
SELECT
|
||
(SELECT id FROM roles WHERE name = 'admin'),
|
||
p.id
|
||
FROM permissions p
|
||
ON CONFLICT DO NOTHING;
|
||
|
||
-- =========================================
|
||
-- НАЧАЛЬНЫЕ ДАННЫЕ: Типы заявок
|
||
-- =========================================
|
||
INSERT INTO request_types (name, description, icon, is_active) VALUES
|
||
('groceries', 'Покупка продуктов питания', 'shopping-cart', TRUE),
|
||
('medicine', 'Покупка медикаментов и средств гигиены', 'medical', TRUE),
|
||
('tech_help', 'Помощь с техникой и электроникой', 'laptop', TRUE),
|
||
('household', 'Помощь по хозяйству', 'home', TRUE),
|
||
('documents', 'Помощь с документами', 'file-text', TRUE),
|
||
('other', 'Другая помощь', 'help-circle', TRUE)
|
||
ON CONFLICT (name) DO NOTHING;
|
||
|
||
-- =========================================
|
||
-- ВЫВОД ИНФОРМАЦИИ О СОЗДАННЫХ ДАННЫХ
|
||
-- =========================================
|
||
DO $$
|
||
DECLARE
|
||
roles_count INTEGER;
|
||
permissions_count INTEGER;
|
||
role_permissions_count INTEGER;
|
||
request_types_count INTEGER;
|
||
BEGIN
|
||
SELECT COUNT(*) INTO roles_count FROM roles;
|
||
SELECT COUNT(*) INTO permissions_count FROM permissions;
|
||
SELECT COUNT(*) INTO role_permissions_count FROM role_permissions;
|
||
SELECT COUNT(*) INTO request_types_count FROM request_types;
|
||
|
||
RAISE NOTICE '===========================================';
|
||
RAISE NOTICE 'Начальные данные успешно загружены:';
|
||
RAISE NOTICE '===========================================';
|
||
RAISE NOTICE 'Ролей: %', roles_count;
|
||
RAISE NOTICE 'Разрешений: %', permissions_count;
|
||
RAISE NOTICE 'Связей роли-разрешения: %', role_permissions_count;
|
||
RAISE NOTICE 'Типов заявок: %', request_types_count;
|
||
RAISE NOTICE '===========================================';
|
||
END $$;
|
||
|
||
-- +goose StatementEnd
|
||
|
||
-- +goose Down
|
||
-- +goose StatementBegin
|
||
|
||
-- Удаляем начальные данные (в обратном порядке из-за внешних ключей)
|
||
DELETE FROM role_permissions;
|
||
DELETE FROM request_types;
|
||
DELETE FROM permissions;
|
||
DELETE FROM roles;
|
||
|
||
-- +goose StatementEnd
|