feat(src/dashboard/page_views): add board permissions management UI

Introduce views for creating, editing and deleting board role permissions and expose permission data in the project detail context.
This commit is contained in:
sankalp committed 2026-06-28 19:34:38 +05:45
1 parent a6bdf22912
commit eef68868d1
3 files changed
+66 -1

No files matched your search

+1
View File
@@ -1,3 +1,4 @@
from .board_permission_views import *
from .epic_views import *
from .external_views import *
from .notification_views import *
@@ -0,0 +1,57 @@
from django.contrib import messages
from django.db import IntegrityError
from django.shortcuts import get_object_or_404, redirect
from django.views.decorators.http import require_http_methods
from src.projects.models import BoardRolePermission, Project
@require_http_methods(["GET", "POST"])
def board_permissions(request, project_id):
project = get_object_or_404(Project, pk=project_id)
if not request.user.is_admin:
messages.error(
request, "You do not have permission to manage board permissions."
)
return redirect("project-board-project", project_id=project_id)
if request.method == "POST":
role = request.POST.get("role", "").strip()
status_ids = request.POST.getlist("move_to_statuses")
if role:
try:
perm, created = BoardRolePermission.objects.update_or_create(
project=project,
role=role,
)
perm.move_to_statuses.set(status_ids)
messages.success(request, f"Permission saved for role '{role}'.")
except IntegrityError:
messages.error(request, "This permission already exists.")
else:
messages.error(request, "Role is required.")
return redirect("project-board-project", project_id=project_id)
return redirect("project-board-project", project_id=project_id)
@require_http_methods(["POST"])
def board_permission_delete(request, project_id, permission_id):
project = get_object_or_404(Project, pk=project_id)
if not request.user.is_admin:
messages.error(
request, "You do not have permission to manage board permissions."
)
return redirect("project-board-project", project_id=project_id)
permission = get_object_or_404(
BoardRolePermission, pk=permission_id, project=project
)
permission.delete()
messages.success(request, "Permission deleted.")
return redirect("project-board-project", project_id=project_id)
+8 -1
View File
@@ -10,9 +10,11 @@ from django.urls import reverse
from django.utils import timezone
from django.views.decorators.http import require_http_methods
from src.accounts.models import ADMIN_ROLES
from src.accounts.models import User as AccountsUser
from src.epics.models import Epic
from src.notes.models import ProjectNote
from src.projects.models import Project, ProjectMember
from src.projects.models import BoardRolePermission, Project, ProjectMember
from src.tickets.models import (
Ticket,
TicketPriority,
@@ -291,6 +293,11 @@ def project_detail(request, project_id):
"today": today,
"external_access": external_access,
"is_admin": request.user.is_admin,
"permissions": BoardRolePermission.objects.filter(project=project).order_by(
"role"
),
"role_choices": AccountsUser.ROLE_CHOICES,
"admin_roles": ADMIN_ROLES,
},
)