Commit 87638d3b authored by Mickaël Desfrênes's avatar Mickaël Desfrênes
Browse files

set basic permissions in migration

parent c897ebe7
Loading
Loading
Loading
Loading
+14 −5
Original line number Diff line number Diff line
@@ -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
        )
+9 −5
Original line number Diff line number Diff line
@@ -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.
@@ -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
@@ -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
+5 −1
Original line number Diff line number Diff line
@@ -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: