diff --git a/assets/js/userarea.js b/assets/js/userarea.js index 0881720..2a8ba53 100644 --- a/assets/js/userarea.js +++ b/assets/js/userarea.js @@ -5,4 +5,5 @@ import { Tab } from 'bootstrap'; import DataTable from 'datatables.net-dt'; let mediaTable = new DataTable('#mediaTable'); -let scenesTable = new DataTable('#scenesTable'); \ No newline at end of file +let scenesTable = new DataTable('#scenesTable'); +let permissionsTable = new DataTable('#permissionsTable'); \ No newline at end of file diff --git a/quackscape/tours/migrations/0016_alter_categorypermission_category_and_more.py b/quackscape/tours/migrations/0016_alter_categorypermission_category_and_more.py new file mode 100644 index 0000000..fde0d17 --- /dev/null +++ b/quackscape/tours/migrations/0016_alter_categorypermission_category_and_more.py @@ -0,0 +1,26 @@ +# Generated by Django 5.0.3 on 2024-03-16 09:54 + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('tours', '0015_alter_originalmedia_category_alter_scene_category'), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.AlterField( + model_name='categorypermission', + name='category', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='permissions', to='tours.category'), + ), + migrations.AlterField( + model_name='categorypermission', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='category_permissions', to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/quackscape/tours/models.py b/quackscape/tours/models.py index 21c6dc2..28d5fd4 100644 --- a/quackscape/tours/models.py +++ b/quackscape/tours/models.py @@ -49,8 +49,14 @@ class Category(models.Model): class CategoryPermission(models.Model): - category = models.ForeignKey(Category, on_delete=models.CASCADE) - user = models.ForeignKey(get_user_model(), on_delete=models.CASCADE) + category = models.ForeignKey(Category, related_name="permissions", on_delete=models.CASCADE) + user = models.ForeignKey(get_user_model(), related_name="category_permissions", on_delete=models.CASCADE) + + # TODO: Permission levels + + @property + def role(self) -> str: + return "Content Editor" class Element(PolymorphicModel): diff --git a/quackscape/users/templates/users/category.html b/quackscape/users/templates/users/category.html index 249ba41..1aed6e5 100644 --- a/quackscape/users/templates/users/category.html +++ b/quackscape/users/templates/users/category.html @@ -1,5 +1,13 @@ {% extends "users/base.html" %} {% block content %} -

{{ category.title }}

+
+

{{ category.title }}

+ {% if category in request.user.category_memberships %} + + {% endif %} + {% if request.user.is_superuser or request.user == category.owner %} + + {% endif %} +
@@ -100,13 +124,54 @@ {{ media.title }} - + {% endfor %} + {% if request.user.is_superuser or request.user == category.owner %} +
+
+
User permissions
+
+ + +
+
+ + + + + + + + + + + + + + + {% for permission in category.permissions.all %} + + + + + + {% endfor %} + +
UserRoleActions
{{ category.owner }}Owner
{{ permission.user }}{{ permission.role }} + +
+
+ {% endif %} {% endblock %}