Add a course permission check to ContainerChildrenView

Abierto Apto para principiantes
#604 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
76/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
python

Línea de trabajo

Empieza en rest_api/v1/views/course_index.py, en ContainerChildrenView.get(), y compara su comprobación de acceso con ContainerHandlerView. Añade o actualiza pruebas para un usuario sin acceso al curso y confirma que la solicitud devuelve 403 antes de que get_xblock pueda crear bloques de información del curso. Verifica que un usuario autorizado todavía puede cargar la página de la unidad.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

willow
Description

ContainerChildrenView does not check course access, so any authenticated user can request a container's children. It is backend only and needs a direct API call.

Current Behavior

rest_api/v1/views/course_index.py:125 only applies view_auth_classes(is_authenticated=True). Unlike its sibling ContainerHandlerView, it never calls _get_item_in_course, so no course access check runs. This also happens with the legacy access checks, and was already the case upstream.

Expected Behavior

Only users with view access to the course can list a container's children.

Steps to reproduce

Setup

  • A course with at least one unit (vertical).
  • A user with no access to that course: authenticated, not course staff, and with no AuthZ role on it.

Steps

  1. In Studio, open any unit of the course as a user with access and copy its usage key from the URL, for example block-v1:Org+Course+Run+type@vertical+block@abc123.

  2. Log in to Studio as the user with no access to the course.

  3. Call the endpoint with that usage key (URL-encoded):

    GET /api/contentstore/v1/container/{usage_key_string}/children
    
  4. Observe the response.

Result

  • Actual: 200, with the container's children in the body.
  • Expected: 403.

For comparison, GET /api/contentstore/v1/container_handler/{usage_key_string} as the same user returns 403, because it goes through _get_item_in_course.

Acceptance Criteria
  • get() returns 403 for users without COURSES_VIEW_COURSE on the container's course.
  • The check runs before anything else in get().
  • The unit page keeps working, since container_handler already requires the same permission.
  • Tests are added or updated.
Proposed Solution

At the top of get():

if not user_has_course_permission(
    request.user, COURSES_VIEW_COURSE.identifier,
    usage_key.course_key, LegacyAuthoringPermission.READ,
):
    self.permission_denied(request)
Technical Notes

get_xblock creates course_info blocks on a GET when they do not exist (view_handlers.py:1140), so the permission check has to come before that.

Lenguaje dominante
Python
Estrellas
0
Forks
10
Merge medio
5 d 9 h
PR fusionados (30 d)
24

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de openedx/openedx-authz

Todos los issues de openedx/openedx-authz

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.