/
vorobei
/
erp
Обзор
Документация
Войти
/
vorobei
/
erp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
modules/admin/services.py
162 строки
5 KB
vorobei
feat(core): интеграция модели БД, email-сервиса и админ-интерфейса
02 июл 2026, 13:38
Верифицирован
02 июл 2026, 13:38
cdf3188
Код
Авторство
О чём код?
from core.db import db from core.models import User, Role, Permission, RolePermission from werkzeug.security import generate_password_hash class AdminService: # ========== ПОЛЬЗОВАТЕЛИ ========== @staticmethod def get_all_users(): """Возвращает всех пользователей""" return User.query.all() @staticmethod def get_user(user_id): """Возвращает пользователя по ID""" return User.query.get(user_id) @staticmethod def create_user(full_name, password, role_id, is_protected=False): """Создаёт нового пользователя""" user = User( full_name=full_name, password_hash=generate_password_hash(password), role_id=role_id, is_protected=is_protected ) db.session.add(user) db.session.commit() return user @staticmethod def update_user(user_id, full_name=None, role_id=None, password=None): """Обновляет данные пользователя""" user = User.query.get(user_id) if not user: return None if full_name: user.full_name = full_name if role_id: user.role_id = role_id if password: user.password_hash = generate_password_hash(password) db.session.commit() return user @staticmethod def delete_user(user_id): """Удаляет пользователя (если не защищён)""" user = User.query.get(user_id) if user and not user.is_protected: db.session.delete(user) db.session.commit() return True return False # ========== РОЛИ ========== @staticmethod def get_all_roles(): """Возвращает все роли""" return Role.query.all() @staticmethod def get_role(role_id): """Возвращает роль по ID""" return Role.query.get(role_id) @staticmethod def create_role(name, description): """Создаёт новую роль""" role = Role(name=name, description=description) db.session.add(role) db.session.commit() return role @staticmethod def update_role(role_id, name, description): """Обновляет роль""" role = Role.query.get(role_id) if role: role.name = name role.description = description db.session.commit() return role return None @staticmethod def delete_role(role_id): """Удаляет роль (только если нет пользователей)""" role = Role.query.get(role_id) if role and len(role.users) == 0: db.session.delete(role) db.session.commit() return True return False # ========== РАЗРЕШЕНИЯ ========== @staticmethod def get_all_permissions(): """Возвращает все разрешения""" return Permission.query.all() @staticmethod def create_permission(name, description): """Создаёт новое разрешение""" perm = Permission(name=name, description=description) db.session.add(perm) db.session.commit() return perm @staticmethod def delete_permission(perm_id): """Удаляет разрешение""" perm = Permission.query.get(perm_id) if perm: db.session.delete(perm) db.session.commit() return True return False # ========== НАЗНАЧЕНИЕ РАЗРЕШЕНИЙ РОЛЯМ ========== @staticmethod def get_role_permissions(role_id): """Возвращает все разрешения для роли""" perms = db.session.query(Permission).join(RolePermission).filter( RolePermission.role_id == role_id ).all() return perms @staticmethod def add_permission_to_role(role_id, permission_id): """Добавляет разрешение роли""" existing = RolePermission.query.filter_by( role_id=role_id, permission_id=permission_id ).first() if not existing: rp = RolePermission( role_id=role_id, permission_id=permission_id ) db.session.add(rp) db.session.commit() return True return False @staticmethod def remove_permission_from_role(role_id, permission_id): """Удаляет разрешение у роли""" rp = RolePermission.query.filter_by( role_id=role_id, permission_id=permission_id ).first() if rp: db.session.delete(rp) db.session.commit() return True return False