mirror of
https://github.com/mediacms-io/mediacms.git
synced 2025-11-21 13:57:57 -05:00
feat: bulk actions API
This commit is contained in:
@@ -11,7 +11,7 @@ from imagekit.models import ProcessedImageField
|
||||
from imagekit.processors import ResizeToFill
|
||||
|
||||
import files.helpers as helpers
|
||||
from files.models import Category, Media, Tag
|
||||
from files.models import Category, Media, MediaPermission, Tag
|
||||
from rbac.models import RBACGroup
|
||||
|
||||
|
||||
@@ -123,7 +123,7 @@ class User(AbstractUser):
|
||||
Get all categories related to RBAC groups the user belongs to
|
||||
"""
|
||||
rbac_groups = RBACGroup.objects.filter(memberships__user=self, memberships__role__in=["member", "contributor", "manager"])
|
||||
categories = Category.objects.filter(rbac_groups__in=rbac_groups).distinct()
|
||||
categories = Category.objects.prefetch_related("user").filter(rbac_groups__in=rbac_groups).distinct()
|
||||
return categories
|
||||
|
||||
def has_member_access_to_category(self, category):
|
||||
@@ -131,8 +131,63 @@ class User(AbstractUser):
|
||||
return rbac_groups.exists()
|
||||
|
||||
def has_member_access_to_media(self, media):
|
||||
rbac_groups = RBACGroup.objects.filter(memberships__user=self, memberships__role__in=["member", "contributor", "manager"], categories__in=media.category.all()).distinct()
|
||||
return rbac_groups.exists()
|
||||
# First check if user is the owner
|
||||
if media.user == self:
|
||||
return True
|
||||
|
||||
# Then check RBAC permissions
|
||||
if getattr(settings, 'USE_RBAC', False):
|
||||
rbac_groups = RBACGroup.objects.filter(memberships__user=self, memberships__role__in=["member", "contributor", "manager"], categories__in=media.category.all()).distinct()
|
||||
if rbac_groups.exists():
|
||||
return True
|
||||
|
||||
# Then check MediaShare permissions for any access
|
||||
media_permission_exists = MediaPermission.objects.filter(
|
||||
user=self,
|
||||
media=media,
|
||||
).exists()
|
||||
|
||||
return media_permission_exists
|
||||
|
||||
def has_contributor_access_to_media(self, media):
|
||||
# First check if user is the owner
|
||||
if media.user == self:
|
||||
return True
|
||||
|
||||
# Then check RBAC permissions
|
||||
if getattr(settings, 'USE_RBAC', False):
|
||||
rbac_groups = RBACGroup.objects.filter(memberships__user=self, memberships__role__in=["contributor", "manager"], categories__in=media.category.all()).distinct()
|
||||
if rbac_groups.exists():
|
||||
return True
|
||||
|
||||
# Then check MediaShare permissions for editor or owner access
|
||||
media_permission_exists = MediaPermission.objects.filter(
|
||||
user=self,
|
||||
media=media,
|
||||
permission__in=["editor", "owner"],
|
||||
).exists()
|
||||
|
||||
return media_permission_exists
|
||||
|
||||
def has_owner_access_to_media(self, media):
|
||||
# First check if user is the owner
|
||||
if media.user == self:
|
||||
return True
|
||||
|
||||
# Then check RBAC permissions
|
||||
if getattr(settings, 'USE_RBAC', False):
|
||||
rbac_groups = RBACGroup.objects.filter(memberships__user=self, memberships__role__in=["manager"], categories__in=media.category.all()).distinct()
|
||||
if rbac_groups.exists():
|
||||
return True
|
||||
|
||||
# Then check MediaShare permissions for owner access
|
||||
media_permission_exists = MediaPermission.objects.filter(
|
||||
user=self,
|
||||
media=media,
|
||||
permission="owner",
|
||||
).exists()
|
||||
|
||||
return media_permission_exists
|
||||
|
||||
def get_rbac_categories_as_contributor(self):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user