fix: add course authorship check for paid courses

This commit is contained in:
swve 2024-11-26 00:46:21 +01:00
parent 0d2f9aa55b
commit 34cc8df9e7
2 changed files with 10 additions and 1 deletions

View file

@ -116,6 +116,7 @@ async def get_activity(
# Paid access check # Paid access check
has_paid_access = await check_activity_paid_access( has_paid_access = await check_activity_paid_access(
request=request,
activity_id=activity.id if activity.id else 0, activity_id=activity.id if activity.id else 0,
user=current_user, user=current_user,
db_session=db_session db_session=db_session

View file

@ -1,12 +1,14 @@
from sqlmodel import Session, select from sqlmodel import Session, select
from src.security.rbac.rbac import authorization_verify_if_user_is_author
from src.db.payments.payments_users import PaymentStatusEnum, PaymentsUser from src.db.payments.payments_users import PaymentStatusEnum, PaymentsUser
from src.db.users import PublicUser, AnonymousUser from src.db.users import PublicUser, AnonymousUser
from src.db.payments.payments_courses import PaymentsCourse from src.db.payments.payments_courses import PaymentsCourse
from src.db.courses.activities import Activity from src.db.courses.activities import Activity
from src.db.courses.courses import Course from src.db.courses.courses import Course
from fastapi import HTTPException from fastapi import HTTPException, Request
async def check_activity_paid_access( async def check_activity_paid_access(
request: Request,
activity_id: int, activity_id: int,
user: PublicUser | AnonymousUser, user: PublicUser | AnonymousUser,
db_session: Session, db_session: Session,
@ -33,6 +35,12 @@ async def check_activity_paid_access(
if not course: if not course:
raise HTTPException(status_code=404, detail="Course not found") raise HTTPException(status_code=404, detail="Course not found")
# Check if user is author of the course
is_course_author = await authorization_verify_if_user_is_author(request, user.id, "update", course.course_uuid, db_session)
if is_course_author:
return True
# Check if course is linked to a product # Check if course is linked to a product
statement = select(PaymentsCourse).where(PaymentsCourse.course_id == course.id) statement = select(PaymentsCourse).where(PaymentsCourse.course_id == course.id)