feat: refine content media access rules

This commit is contained in:
2026-01-13 11:06:32 +08:00
parent 674b66300d
commit 84c8d1b394
3 changed files with 74 additions and 3 deletions

View File

@@ -204,16 +204,39 @@ func (s *content) Get(ctx context.Context, tenantID, userID, id int64) (*content
if item.UserID == uid {
hasAccess = true // Owner
} else {
isAdmin, err := s.isTenantAdmin(ctx, item.TenantID, uid)
if err != nil {
return nil, err
}
if isAdmin {
hasAccess = true
}
}
if !hasAccess {
// Check Purchase
exists, _ := models.ContentAccessQuery.WithContext(ctx).
exists, err := models.ContentAccessQuery.WithContext(ctx).
Where(models.ContentAccessQuery.UserID.Eq(uid),
models.ContentAccessQuery.ContentID.Eq(id),
models.ContentAccessQuery.Status.Eq(consts.ContentAccessStatusActive)).
Exists()
if err != nil {
return nil, errorx.ErrDatabaseError.WithCause(err)
}
if exists {
hasAccess = true
}
}
if !hasAccess && item.Visibility == consts.ContentVisibilityTenantOnly {
isMember, err := s.isTenantMember(ctx, item.TenantID, uid)
if err != nil {
return nil, err
}
if isMember {
hasAccess = true
}
}
}
// Filter Assets based on Access
@@ -250,7 +273,7 @@ func (s *content) Get(ctx context.Context, tenantID, userID, id int64) (*content
IsFavorited: isFavorited,
}
// Pass IsPurchased/HasAccess info to frontend?
detail.ContentItem.IsPurchased = hasAccess // Update DTO field logic if needed. IsPurchased usually means "Bought". Owner implies access but not necessarily purchased. But for UI "Play" button, IsPurchased=true is fine.
detail.ContentItem.IsPurchased = hasAccess // 购买或具备可访问权限时统一展示为已解锁。
return detail, nil
}