Loading resources/migrations/0014_auto_20210915_2024.py +14 −5 Original line number Diff line number Diff line Loading @@ -5,19 +5,28 @@ from django.db import migrations, models import django.db.models.deletion from django.contrib.auth.models import User from django.db import connection from resources.models import ( Project, Role, ProjectAccess, ) from resources.models import Project, Role, ProjectAccess, Permission def migrate_property(): permission_instances = [] obj_types = ["collection", "resource", "metadata", "metadataset", "file", "tag"] permissions = ["read", "write", "delete"] for obj_type in obj_types: for permission in permissions: perm, created = Permission.objects.get_or_create( label="{}.{}".format(obj_type, permission) ) permission_instances.append(perm) perm, created = Permission.objects.get_or_create(label="file.download_source") permission_instances.append(perm) for user in User.objects.all(): project, created = Project.objects.get_or_create( label="{} main project".format(user.username) ) admin_role, created = Role.objects.get_or_create(label="admin", project=project) for perm in permission_instances: admin_role.permissions.add(perm) project_access, created = ProjectAccess.objects.get_or_create( project=project, role=admin_role, user=user ) Loading rpc/methods.py +9 −5 Original line number Diff line number Diff line Loading @@ -28,13 +28,18 @@ class ServiceException(Exception): pass def _check_project_permission(user: User, project: Project, right: str) -> bool: def _check_project_permission(user: User, project: Project, permission: str) -> bool: """ Will raise a ServiceException if user has no access to given project/permission. """ access = ProjectAccess.objects.filter( user=user, project=project, role__permissions__label=right user=user, project=project, role__permissions__label=permission ).first() if access: return True raise ServiceException("No access ({})".format(right)) raise ServiceException( "No access ({}) for project {}".format(permission, project.label) ) # Define RPC functions here. Loading Loading @@ -194,6 +199,7 @@ def collections( limit_to: int = 2000, flat_list: bool = False, only_published: bool = False, project_id: int = None, ) -> List[Dict]: """ Return the user's collections under the parent collection Loading Loading @@ -1708,14 +1714,12 @@ def replace_file(user: User, from_resource_id: int, to_resource_id: int) -> bool from_resource_instance = Resource.objects.get( ptr_owner=user, pk=from_resource_id, deleted_at__isnull=True ) print(from_resource_instance) if not from_resource_instance.file: return False to_resource_instance = Resource.objects.get( ptr_owner=user, pk=to_resource_id, deleted_at__isnull=True ) print(to_resource_instance) if not to_resource_instance.file: return False Loading rpc/serializers.py +5 −1 Original line number Diff line number Diff line Loading @@ -178,7 +178,11 @@ def tag(tag_instance: models.Tag) -> dict: def project(project_instance: models.Project) -> dict: return {"id": project_instance.pk, "label": project_instance.label} return { "id": project_instance.pk, "label": project_instance.label, "description": project_instance.description, } def permission(permission_instance: models.Permission) -> dict: Loading Loading
resources/migrations/0014_auto_20210915_2024.py +14 −5 Original line number Diff line number Diff line Loading @@ -5,19 +5,28 @@ from django.db import migrations, models import django.db.models.deletion from django.contrib.auth.models import User from django.db import connection from resources.models import ( Project, Role, ProjectAccess, ) from resources.models import Project, Role, ProjectAccess, Permission def migrate_property(): permission_instances = [] obj_types = ["collection", "resource", "metadata", "metadataset", "file", "tag"] permissions = ["read", "write", "delete"] for obj_type in obj_types: for permission in permissions: perm, created = Permission.objects.get_or_create( label="{}.{}".format(obj_type, permission) ) permission_instances.append(perm) perm, created = Permission.objects.get_or_create(label="file.download_source") permission_instances.append(perm) for user in User.objects.all(): project, created = Project.objects.get_or_create( label="{} main project".format(user.username) ) admin_role, created = Role.objects.get_or_create(label="admin", project=project) for perm in permission_instances: admin_role.permissions.add(perm) project_access, created = ProjectAccess.objects.get_or_create( project=project, role=admin_role, user=user ) Loading
rpc/methods.py +9 −5 Original line number Diff line number Diff line Loading @@ -28,13 +28,18 @@ class ServiceException(Exception): pass def _check_project_permission(user: User, project: Project, right: str) -> bool: def _check_project_permission(user: User, project: Project, permission: str) -> bool: """ Will raise a ServiceException if user has no access to given project/permission. """ access = ProjectAccess.objects.filter( user=user, project=project, role__permissions__label=right user=user, project=project, role__permissions__label=permission ).first() if access: return True raise ServiceException("No access ({})".format(right)) raise ServiceException( "No access ({}) for project {}".format(permission, project.label) ) # Define RPC functions here. Loading Loading @@ -194,6 +199,7 @@ def collections( limit_to: int = 2000, flat_list: bool = False, only_published: bool = False, project_id: int = None, ) -> List[Dict]: """ Return the user's collections under the parent collection Loading Loading @@ -1708,14 +1714,12 @@ def replace_file(user: User, from_resource_id: int, to_resource_id: int) -> bool from_resource_instance = Resource.objects.get( ptr_owner=user, pk=from_resource_id, deleted_at__isnull=True ) print(from_resource_instance) if not from_resource_instance.file: return False to_resource_instance = Resource.objects.get( ptr_owner=user, pk=to_resource_id, deleted_at__isnull=True ) print(to_resource_instance) if not to_resource_instance.file: return False Loading
rpc/serializers.py +5 −1 Original line number Diff line number Diff line Loading @@ -178,7 +178,11 @@ def tag(tag_instance: models.Tag) -> dict: def project(project_instance: models.Project) -> dict: return {"id": project_instance.pk, "label": project_instance.label} return { "id": project_instance.pk, "label": project_instance.label, "description": project_instance.description, } def permission(permission_instance: models.Permission) -> dict: Loading