feat: refine content media access rules
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user