LibreStudium — свободная электронная информационно-образовательная среда на ASP.NET Core.
- Цель проекта
- Философия безопасности
- Модель ролей
- Стек технологий
- Локальная установка и запуск
- Учётная запись администратора по умолчанию
- Структура проекта
- Панель управления пользователями
- API endpoints
- Переменные окружения
LibreStudium предназначена для вузов, преподавателей и студентов, которым требуется открытая, расширяемая и контролируемая среда электронного обучения.
Каждая конечная точка LibreStudium по умолчанию заблокирована, если явно не разрешена. Конвейер middleware применяет глобальный FallbackPolicy, требующий аутентифицированного пользователя, а политика AdminOnly ограничивает все маршруты административной панели и API пользователями с ролью Admin.
| Роль | Доступ |
|---|---|
Admin |
Полный доступ к панели (/Admin/**) + API (/api/v1/**) |
Teacher |
Только API (будущая функциональность) |
Student |
Только API (будущая функциональность) |
Пользователи без явной роли получают 403 Forbidden на защищённых ресурсах.
- .NET 10 SDK
- PostgreSQL 16
- Git
Откройте PowerShell или Командную строку и выполните:
git clone https://github.com/LibreStudium/core.git
cd LibreStudium
copy .env.example .env
# Отредактируйте .env, указав актуальные учётные данные PostgreSQL
dotnet restore
dotnet run --project LibreStudium.ApiПосле запуска приложение будет доступно по адресу http://localhost:5000. Панель администратора — http://localhost:5000/admin.
Установите .NET 10 SDK, если он ещё не установлен:
sudo apt-get update && sudo apt-get install -y dotnet-sdk-10.0Если пакет недоступен в стандартных репозиториях, добавьте репозиторий Microsoft:
wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh
chmod +x dotnet-install.sh
./dotnet-install.sh --channel 10.0
export PATH="$HOME/.dotnet:$PATH"Клонируйте и запустите проект:
git clone https://github.com/LibreStudium/core.git
cd LibreStudium
cp .env.example .env
# Отредактируйте .env, указав актуальные учётные данные PostgreSQL
dotnet restore
dotnet run --project LibreStudium.ApiПриложение запустится на http://localhost:5000. Панель администратора — http://localhost:5000/Admin.
Примечание. База данных и таблицы создаются автоматически при первом запуске (Entity Framework Core EnsureCreated). Для чистой базы данных миграции не требуются.
Если у вас есть база данных от старой схемы, сначала примените SQL-миграцию:
psql -d YOUR_DATABASE -f LibreStudium.Api/Core/Data/Migrations/0001_StudentsToUsers.sql
dotnet run --project LibreStudium.ApiДля постоянных изменений схемы переключитесь с EnsureCreated() на Database.Migrate():
dotnet tool install --global dotnet-ef
dotnet ef migrations add MigrationName --project LibreStudium.Api
dotnet ef database update --project LibreStudium.Api| Поле | Значение |
|---|---|
admin@librestudium.com |
|
| Password | LibreStudium% |
⚠ Замечание по безопасности — Этот пароль задан в
Program.csдля начальной загрузки. Смените его сразу после первого входа. В production отключите блок сидирования или вынесите создание учётной записи в защищённое внешнее хранилище.
LibreStudium/
├── .env.example # Шаблон переменных окружения
├── README.md
├── wwwroot/ # Корень SPA-фронтенда
└── LibreStudium.Api/ # Основной проект ASP.NET Core
├── Program.cs # Точка входа, DI, middleware pipeline
├── Properties/
│ └── launchSettings.json
│
├── Core/ # Ядро — общая инфраструктура
│ ├── Data/
│ │ ├── AppDbContext.cs # EF Core контекст (Users + StudentProfiles)
│ │ └── Migrations/ # SQL-скрипты миграций
│ └── Security/
│ └── PasswordHasher.cs # BCrypt-обёртка (work factor 12)
│
├── Features/ # Доменные модули (Django Apps style)
│ ├── Auth/ # ── Модуль аутентификации ──
│ │ └── Models/
│ │ ├── User.cs # Центральная сущность пользователя
│ │ └── Role.cs # Enum: Admin / Teacher / Student
│ └── Students/ # ── Модуль студентов ──
│ └── Models/
│ └── StudentProfile.cs # Профиль студента (FK → User)
│
├── Pages/ # Razor Pages (по конвенции)
│ ├── _ViewImports.cshtml
│ ├── _ViewStart.cshtml
│ ├── Shared/
│ │ └── _Layout.cshtml # Мастер-страница с боковой панелью
│ │
│ ├── Auth/ # ── Страницы модуля Auth ──
│ │ ├── Login.cshtml / .cs # Вход в систему
│ │ └── Logout.cshtml / .cs # Выход из системы
│ │
│ └── Admin/ # ── Страницы модуля Admin ──
│ ├── Models/
│ │ └── UserEditModel.cs # ViewModel для формы пользователя
│ ├── Index.cshtml / .cs # Дашборд (статистика по ролям)
│ └── Users/ # CRUD пользователей
│ ├── Index.cshtml / .cs # Список + поиск
│ ├── Edit.cshtml / .cs # Создание / редактирование
│ └── Delete.cshtml / .cs # Подтверждение удаления
│
├── Migrations/ # EF Core миграции (авто-генерируемые)
│ ├── 20260616140759_InitialCleanSchema.cs
│ └── AppDbContextModelSnapshot.cs
│
└── wwwroot/
└── css/
└── admin.css # Стили панели администратора
Администраторы управляют пользователями через панель /Admin/Users. Доступные операции:
- Список пользователей — таблица всех учётных записей с указанием роли (Admin / Teacher / Student) и поиском по email
- Создание пользователя — форма с указанием email, роли и пароля; для роли
Studentдополнительно заполняются имя, фамилия и дата зачисления - Редактирование — смена роли, email или пароля; при переключении роли с
Studentна другую профиль студента удаляется, при переключении наStudent— создаётся - Удаление — подтверждение с отображением всех полей перед удалением
Смена пароля осуществляется через BCrypt (work factor 12). При редактировании поле пароля можно оставить пустым — текущий пароль сохраняется.
| Method | Route | Auth | Описание |
|---|---|---|---|
| GET | /api/v1/students |
AdminOnly | Список всех студентов |
Группа API защищена политикой AdminOnly. Запросы без роли Admin получают 401 Unauthorized или 403 Forbidden.
| Variable | Required | Описание |
|---|---|---|
CONNECTIONSTRINGS__POSTGRES |
Да | Строка подключения к PostgreSQL |
ASPNETCORE_ENVIRONMENT |
Нет | Development / Production |
ASPNETCORE_URLS |
Нет | Адрес привязки (по умолч. :5000) |