Перейти к основному содержимому

Матрица прав LMS

Зачем нужно

LMS хранит приватные учебные данные: прогресс, работы, тетради, комментарии преподавателей и учебные чаты. Доступ к ним должен зависеть от роли, ownership, семейной связи и teacher assignment.

Принципы доступа

  • Глобальная роль не даёт доступ ко всем учебным данным без контекста.
  • Ученик видит только свои enrollments, lessons, attempts, submissions, workbooks, projects и chats.
  • Родитель видит только данные связанных детей по identity family context.
  • Преподаватель видит только назначенные scopes.
  • Преподавательский режим всегда работает внутри выбранного organization context.
  • Learning Group является рабочим списком, но не permission grant на progress, attempts, submissions или competition results.
  • Support и admin доступы должны быть аудируемыми.
  • Service API использует отдельные service permissions и signature checks.

Контексты доступа

КонтекстКак определяется
selfstudent_profile_id совпадает с actor
familyidentity подтверждает связь parent-child
assigned teacherесть active lms_teacher_assignment
learning workspaceactor имеет workspace permission в выбранной организации и scope на Learning Group
course authoractor создал course или назначен методистом
organizationactor имеет роль в organization context
adminглобальная admin роль с audit
serviceдоверенный сервис с scoped credential

Permissions

PermissionНазначение
lms.courses.readчитать доступные курсы и версии
lms.courses.manageсоздавать и редактировать draft course/version
lms.courses.publishпубликовать и retire versions
lms.courses.archiveархивировать course
lms.content.readчитать content tree
lms.content.manageредактировать draft content
lms.enrollments.readискать и читать enrollments в операционном контексте
lms.enrollments.manageсоздавать, активировать, паузить и отзывать enrollments
lms.progress.readчитать progress по разрешённому контексту
lms.progress.manageпересчитывать или корректировать progress
lms.attempts.submitотправлять свои attempts
lms.attempts.manageотменять или администрировать attempts
lms.feedback.writeпроверять работы в назначенном контексте
lms.feedback.manageкорректировать feedback с audit
lms.teacher.readвидеть преподавательский кабинет
lms.teacher.assignуправлять assignments
lms.learning-groups.readчитать свои Learning Groups и participants
lms.learning-groups.manageсоздавать, изменять и архивировать Learning Groups
lms.learning-group-participants.manageдобавлять, паузить и удалять participants
lms.learning-group-invites.manageотправлять и отзывать invites
lms.learning-group-assignments.assignсоздавать и отменять group assignments
lms.workbooks.readчитать тетради по контексту
lms.workbooks.writeредактировать свою тетрадь
lms.projects.readчитать проекты по контексту
lms.projects.writeредактировать свой проект
lms.booking.readчитать доступные учебные слоты
lms.booking.manageсоздавать и администрировать слоты
lms.chat.readчитать учебные чаты по участию
lms.chat.writeписать в учебный чат
lms.chat.moderateзакрывать, скрывать сообщения, управлять участниками
lms.audit.readчитать audit
lms.adminсистемные операции LMS

Role mapping

РольБазовые permissions
studentlms.courses.read, lms.content.read, lms.progress.read, lms.attempts.submit, lms.workbooks.write, lms.projects.write, lms.booking.read, lms.chat.read, lms.chat.write
parentlms.courses.read, lms.progress.read, lms.workbooks.read, lms.projects.read, lms.booking.read, lms.chat.read в family context
teacherlms.teacher.read, lms.learning-groups.read, lms.learning-groups.manage, lms.learning-group-participants.manage, lms.learning-group-invites.manage, lms.learning-group-assignments.assign, lms.progress.read, lms.feedback.write, lms.workbooks.read, lms.projects.read, lms.chat.read, lms.chat.write в selected organization и assigned scopes
methodistlms.courses.read, lms.courses.manage, lms.content.read, lms.content.manage
reviewerlms.courses.read, lms.content.read, lms.courses.publish при назначении
operationslms.enrollments.read, lms.enrollments.manage, lms.booking.manage
supportограниченное чтение с reason и audit
adminвсе permissions через audited admin context
service-crmservice enrollment transitions
service-task-bankservice attempt check results
service-syncexternal import

Матрица объектов

ОбъектStudentParentTeacherMethodistOperationsAdmin
Course metadataread if visibleread if child has accessread assignedread/write draftreadfull
Published contentread active enrollmentread child accessible content if policy allowsread assignedreadread support contextfull
Draft contentnononowritenofull
Enrollmentown readchild readassigned readnowritefull
Progressown readchild readassigned readnooperational readfull
Learning Groupnonoread/write own organization scopenosupport read with reasonfull
Attempt answerown readpolicy-based child readassigned readnono by defaultaudited full
Submissionown read/write before submitchild readassigned reviewnono by defaultaudited full
Feedbackown read visiblechild read visiblewrite assignednono by defaultfull
Workbookown writechild readassigned commentnono by defaultfull
Projectown writechild readassigned reviewnono by defaultfull
Bookingown/family bookchild bookassigned readnomanagefull
Chatparticipant read/writepolicy-based readparticipant read/writenono by defaultmoderate

Endpoint permissions

Endpoint groupПроверка
/me/*authenticated self
/family/*identity family relation
/teacher/*active teacher assignment
/learning-workspace/*selected organization + workspace permission
/learning-workspace/*/progressworkspace scope + lms.progress.read + active teacher assignment on LMS objects
/courses/* writemethodist/admin and draft version
/course-versions/*/publishpublish permission and review status
/enrollments/* writeoperations/admin/service CRM
/attempts/*/submitowner and active enrollment
/submissions/*/feedbackassigned teacher
/booking/*owner/family and active entitlement
/chats/*/messagesactive participant and open thread
/admin/*admin permission and audit reason

Доступ преподавателя

Teacher assignment должен покрывать один из scopes:

  • конкретный enrollment;
  • live group/cohort, в которую входит enrollment;
  • Learning Group для рабочего списка;
  • course version;
  • project/workbook;
  • booking slot.

Learning Group scope разрешает видеть состав рабочей группы и assignments. Для progress, attempts, submissions, workbooks и feedback дополнительно нужен scope на course version, live group/cohort, enrollment, project/workbook или booking slot.

Если teacher был заменён:

  • старый assignment закрывается;
  • новый assignment создаётся с starts_at;
  • доступ к старым работам определяется политикой курса;
  • все действия после замены должны ссылаться на новый assignment.

Family access

Родительский доступ проверяется через identity.

Правила:

  • родитель не может видеть ребёнка после прекращения связи;
  • family cache должен инвалидироваться событием identity;
  • спорные объекты вроде приватного teacher note не видны родителю;
  • visibility policy должна быть явной для chat и feedback.

Service access

Service callers:

CallerМожет
CRMсоздать, активировать, паузить, отозвать enrollment через crm.entitlement.manage service scope
CRMпринять факт потребления доступа через lms.entitlement.consume / crm.entitlements.consume
task-bankвернуть результат проверки attempt
identityуведомить о family или role изменении
external LMS syncимпортировать progress и content mapping
notificationsчитать минимальные данные для отправки уведомления

Дополнительные permissions для roadmap, live delivery и gamification

PermissionНазначение
lms.roadmap.readчитать roadmap programs/topics
lms.roadmap.manageуправлять roadmap draft
lms.roadmap.publishпубликовать roadmap
lms.roadmap.projection.readчитать roadmap projections по public/student/parent/teacher/management context
lms.roadmap.projection.personalizeзапрашивать персонализированную projection с progress, gaps и recommendations
lms.roadmap.completion.readчитать topic completion в разрешённом контексте
lms.roadmap.completion.manageсоздавать manual completion или correction с audit
lms.roadmap.completion.recalculateзапускать пересчёт completion по evidence
lms.sessions.readчитать live sessions
lms.sessions.manageуправлять sessions/schedule rules
lms.attendance.writeфиксировать attendance
lms.entitlement.consumeинициировать списание CRM entitlement
lms.gamification.readчитать xp/badges/streaks
lms.gamification.manageуправлять правилами и ручными корректировками

Service requests должны иметь:

  • signature;
  • timestamp;
  • replay protection;
  • idempotency key;
  • allowlist service scope.

Audit requirements

Audit обязателен для:

  • публикации версии курса;
  • ручного enrollment transition;
  • отзыва доступа;
  • teacher assignment changes;
  • feedback score changes;
  • progress correction;
  • Learning Group, participant, invite и assignment changes;
  • chat moderation;
  • admin read приватных объектов;
  • external sync conflict resolution.
  • manual topic completion override и correction;
  • чтение roadmap audit через lms.audit.read.

Audit record должен включать:

  • actor;
  • actor type;
  • permission;
  • target;
  • action;
  • reason;
  • request id;
  • old value;
  • new value.

Запрещённые сценарии

  • Student читает чужой enrollment по прямому ID.
  • Parent читает данные ребёнка после прекращения family relation.
  • Teacher читает ученика без active assignment.
  • Teacher читает progress ученика только потому, что ученик добавлен в Learning Group.
  • Learning Group используется как canonical student registry или organization membership.
  • Training attempt по олимпиадному разбору записывается как competition result.
  • Methodist видит ответы учеников только потому, что редактирует курс.
  • Operations читает chat или submission без отдельного audited access.
  • Service webhook меняет progress без signature.
  • Published content редактируется через content.manage.