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

fix lookup bug

parent 033a51bb
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
# Generated by Django 3.2.2 on 2021-09-22 12:25

from django.db import migrations, models


class Migration(migrations.Migration):

    dependencies = [
        ('resources', '0019_alter_collection_project'),
    ]

    operations = [
        migrations.AddField(
            model_name='project',
            name='admin_mail',
            field=models.EmailField(max_length=254, null=True),
        ),
    ]
+4 −0
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ class Project(models.Model):

    label = models.TextField(unique=True)
    description = models.TextField()
    admin_mail = models.EmailField(null=True)

    def __str__(self):
        return self.label
@@ -557,6 +558,9 @@ class Permission(models.Model):
    """
    Format labels like so: [object type].[action]

    Permissions are NOT project-specific, they are
    tied to the API.

    Examples:
        - collection.delete
        - resource.add
+48 −3
Original line number Diff line number Diff line
@@ -11,6 +11,8 @@ from resources.models import (
    Tag,
    Project,
    ProjectAccess,
    Role,
    Permission,
    APIKey,
)
from django.contrib.auth.models import User
@@ -74,7 +76,50 @@ def ping(user: User) -> str:
ping.rpc_groups = ["Utilities"]


def projects_permissions(user: User) -> List[Dict]:
def list_permissions(user: User) -> List[Dict]:
    """
    Lists all available permissions in the application:

    ```
    [
        {'id': 1, 'label': 'collection.add'},
        {'id': 2, 'label': 'collection.read'},
        {'id': 3, 'label': 'collection.write'},
        {'id': 4, 'label': 'collection.delete'},
        {'id': 5, 'label': 'resource.add'},
        {'id': 6, 'label': 'resource.read'},
        {'id': 7, 'label': 'resource.write'},
        {'id': 8, 'label': 'resource.delete'},
        {'id': 9, 'label': 'metadata.add'},
        {'id': 10, 'label': 'metadata.read'},
        {'id': 11, 'label': 'metadata.write'},
        {'id': 12, 'label': 'metadata.delete'},
        {'id': 13, 'label': 'metadataset.add'},
        {'id': 14, 'label': 'metadataset.read'},
        {'id': 15, 'label': 'metadataset.write'},
        {'id': 16, 'label': 'metadataset.delete'},
        {'id': 17, 'label': 'file.add'},
        {'id': 18, 'label': 'file.read'},
        {'id': 19, 'label': 'file.write'},
        {'id': 20, 'label': 'file.delete'},
        {'id': 21, 'label': 'tag.add'},
        {'id': 22, 'label': 'tag.read'},
        {'id': 23, 'label': 'tag.write'},
        {'id': 24, 'label': 'tag.delete'},
        {'id': 25, 'label': 'file.download_source'}
    ]
    ```
    """
    data = []
    for perm in Permission.objects.all():
        data.append(serializers.permission(perm))
    return data


list_permissions.rpc_groups = ["Access"]


def projects_user_permissions(user: User) -> List[Dict]:
    """
    Get all rights for the current user.

@@ -96,7 +141,7 @@ def projects_permissions(user: User) -> List[Dict]:
    return access_list


projects_permissions.rpc_groups = ["Utilities"]
projects_user_permissions.rpc_groups = ["Access"]


def has_permission(user: User, project_id: int, permission: str) -> bool:
@@ -269,7 +314,7 @@ def collections(
                pk=parent_id,
                deleted_at__isnull=True,
                project__projectaccess__user=user,
                project__project_access__role__permissions__label="collection.read",
                project__projectaccess__role__permissions__label="collection.read",
            )
    except Collection.DoesNotExist:
        raise ServiceException("no such collection")
+1 −1
Original line number Diff line number Diff line
@@ -9,7 +9,7 @@
        <repositoryName>{{ project.label | capfirst }} OAI Repository</repositoryName>
        <baseURL>{{ base_url }}oai/{{ project.pk }}</baseURL>
        <protocolVersion>2.0</protocolVersion>
        <adminEmail>{{ project.email }}</adminEmail>
        <adminEmail>{{ project.admin_email }}</adminEmail>
        <earliestDatestamp>{{ earliest_record.created_at|date:"Y-m-d" }}</earliestDatestamp>
        <deletedRecord>no</deletedRecord>
        <granularity>YYYY-MM-DD</granularity>