Skip to content
Snippets Groups Projects
Verified Commit 7988af58 authored by Philipp S. Sommer's avatar Philipp S. Sommer
Browse files

minor fix for permissions

parent cf5018f8
No related branches found
No related tags found
1 merge request!1implement dynamic topic creation
Pipeline #151207 failed
......@@ -29,6 +29,7 @@ Admin interfaces.
from django.contrib import admin # noqa: F401
from guardian.admin import GuardedModelAdmin
from guardian.shortcuts import get_users_with_perms
from dasf_broker import models # noqa: F401
......@@ -39,12 +40,22 @@ class DASFTopicAdmin(GuardedModelAdmin):
search_fields = [
"slug",
"consumer__username",
"consumer__email",
"consumer__first_name",
"consumer__last_name",
]
list_display = ["slug", "consumer", "is_public", "is_response_topic"]
list_display = [
"slug",
"get_consumers",
"get_producers",
"is_public",
"is_response_topic",
]
list_filter = ["is_public", "is_response_topic"]
@admin.display(description="Consumer(s)") # type: ignore
def get_consumers(self, obj: models.DASFTopic):
return ", ".join(map(str, get_users_with_perms(obj, "can_consume")))
@admin.display(description="Producer(s)") # type: ignore
def get_producers(self, obj: models.DASFTopic):
return ", ".join(map(str, get_users_with_perms(obj, "can_produce")))
......@@ -90,7 +90,7 @@ class TopicProducer(JsonWebsocketConsumer):
topic = DASFTopic.objects.create(
slug=self.dasf_topic_slug, consumer=self.user
)
assign_perm("can_publish", self.user, topic)
assign_perm("can_produce", self.user, topic)
elif not app_settings.DASF_CREATE_TOPIC_ON_MESSAGE:
ack["result"] = f"Topic {self.dasf_topic_slug} does not exist."
else:
......@@ -99,7 +99,7 @@ class TopicProducer(JsonWebsocketConsumer):
if (
topic is not None
and topic.is_public
or self.user.has_perm("dasf_broker.can_publish", topic)
or self.user.has_perm("dasf_broker.can_produce", topic)
):
# create a topic for the response
......@@ -113,7 +113,7 @@ class TopicProducer(JsonWebsocketConsumer):
for user in get_users_with_perms(
topic, "dasf_broker.can_consume"
):
assign_perm("can_publish", user, response_topic)
assign_perm("can_produce", user, response_topic)
async_to_sync(self.channel_layer.group_send)(
f"dasf_topic_{self.dasf_topic_slug}",
......@@ -156,7 +156,7 @@ class TopicConsumer(JsonWebsocketConsumer):
if (
topic is not None
and topic.is_public
or self.user.has_perm("dasf_broker.can_publish", topic)
or self.user.has_perm("dasf_broker.can_produce", topic)
):
if topic.is_response_topic:
topic.delete()
......
......@@ -38,8 +38,8 @@ class DASFTopic(models.Model):
class Meta:
permissions = (
("can_publish", "Can publish data to the topic."),
("can_consume", "Can consume messages to this topic."),
("can_produce", "Can publish messages to the topic (Producer)."),
("can_consume", "Can consume messages to the topic (Consumer)."),
)
slug = models.SlugField(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment