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

change models

parent d68e3073
Loading
Loading
Loading
Loading
+40 −10
Original line number Diff line number Diff line
@@ -49,9 +49,17 @@ class APIKey(models.Model):


class Project(models.Model):
    label = models.TextField(unique=True)
    """
    Project is used for sharing collections
    and resources between users.
    """

    label = models.TextField()
    description = models.TextField()

    def __str__(self):
        return self.label


def fetch_public_project() -> Project:
    project, created = Project.objects.get_or_create(label="public project")
@@ -253,8 +261,11 @@ class File(Resource):
        for prop in self.metadataresourcevalue_set.all().order_by("metadata__title"):
            data["metas"].append({str(prop.metadata): prop.value})
        metas_file_path = "{}.{}.json".format(self.local_path(), self.id)
        try:
            with open(metas_file_path, "w") as f:
                json.dump(data, f, indent=2)
        except FileNotFoundError:
            pass

    def ocr_output(self) -> Union[None, str]:
        """
@@ -563,26 +574,45 @@ class CollectionMembership(models.Model):


class Permission(models.Model):
    label = models.TextField()
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    """
    Format labels like so: [object type].[action]

    Examples:
        - collection.delete
        - resource.add
        - meta.modify
        - resource.move
    and so on...
    """

    class Meta:
        unique_together = (("label", "project"),)
    label = models.TextField(unique=True)

    def __str__(self):
        return self.label


class Role(models.Model):
    label = models.TextField()
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    permissions = models.ManyToManyField(Permission)
    users = models.ManyToManyField(User)

    def __str__(self):
        return self.label

    class Meta:
        unique_together = (("label", "project"),)


class CollectionAccess(models.Model):
class ProjectAccess(models.Model):
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    collection = models.ForeignKey(Collection, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    role = models.ForeignKey(Role, on_delete=models.CASCADE)

    def __str__(self):
        return "{}: {} ({})".format(self.project, self.user, self.role)

    class Meta:
        unique_together = (("project", "user", "role"),)


@receiver(post_save, sender=File)