Refactor permission checks for marking cases as normal to use can_edit method
This commit is contained in:
@@ -4,7 +4,7 @@
|
|||||||
{% if case.normal_case %}
|
{% if case.normal_case %}
|
||||||
<span class="badge bg-success">Normal</span>
|
<span class="badge bg-success">Normal</span>
|
||||||
<small class="text-muted">{{ case.normal_case.display_age }}</small>
|
<small class="text-muted">{{ case.normal_case.display_age }}</small>
|
||||||
{% if can_mark_normal %}
|
{% if can_edit %}
|
||||||
<button class="btn btn-sm btn-outline-danger ms-2"
|
<button class="btn btn-sm btn-outline-danger ms-2"
|
||||||
hx-post="{% url 'atlas:case_toggle_normal' case.pk %}"
|
hx-post="{% url 'atlas:case_toggle_normal' case.pk %}"
|
||||||
hx-target="#normal-toggle-block"
|
hx-target="#normal-toggle-block"
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
</button>
|
</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% if can_mark_normal %}
|
{% if can_edit %}
|
||||||
<button class="btn btn-sm btn-outline-primary"
|
<button class="btn btn-sm btn-outline-primary"
|
||||||
hx-get="{% url 'atlas:case_normal_form' case.pk %}"
|
hx-get="{% url 'atlas:case_normal_form' case.pk %}"
|
||||||
hx-target="body"
|
hx-target="body"
|
||||||
|
|||||||
+13
-25
@@ -564,9 +564,6 @@ def case_detail(request, pk):
|
|||||||
case = get_case_for_case_detail(pk)
|
case = get_case_for_case_detail(pk)
|
||||||
can_edit = case.check_user_can_edit(request.user)
|
can_edit = case.check_user_can_edit(request.user)
|
||||||
|
|
||||||
is_atlas_editor = request.user.is_superuser or request.user.groups.filter(name="atlas_editor").exists()
|
|
||||||
is_case_author = case.author.filter(id=request.user.id).exists()
|
|
||||||
can_mark_normal = is_atlas_editor or is_case_author or request.user.is_superuser
|
|
||||||
|
|
||||||
return render(
|
return render(
|
||||||
request,
|
request,
|
||||||
@@ -575,9 +572,6 @@ def case_detail(request, pk):
|
|||||||
"case": case,
|
"case": case,
|
||||||
"cimar_sid": request.user.userprofile.cimar_sid,
|
"cimar_sid": request.user.userprofile.cimar_sid,
|
||||||
"can_edit": can_edit,
|
"can_edit": can_edit,
|
||||||
"is_atlas_editor": is_atlas_editor,
|
|
||||||
"is_case_author": is_case_author,
|
|
||||||
"can_mark_normal": can_mark_normal,
|
|
||||||
# Provide helper lists for resource search filters
|
# Provide helper lists for resource search filters
|
||||||
"site_queryset": Site.objects.all(),
|
"site_queryset": Site.objects.all(),
|
||||||
"subspecialty_queryset": Subspecialty.objects.all(),
|
"subspecialty_queryset": Subspecialty.objects.all(),
|
||||||
@@ -596,11 +590,9 @@ def toggle_case_normal(request, pk):
|
|||||||
"""
|
"""
|
||||||
case = get_case_for_case_detail(pk)
|
case = get_case_for_case_detail(pk)
|
||||||
|
|
||||||
# Permission: atlas editors, case authors, or superusers
|
# Permission: rely on `can_edit` check on the Case model
|
||||||
is_atlas_editor = request.user.is_superuser or request.user.groups.filter(name="atlas_editor").exists()
|
can_edit = case.check_user_can_edit(request.user)
|
||||||
is_case_author = case.author.filter(id=request.user.id).exists()
|
if not can_edit:
|
||||||
can_mark_normal = is_atlas_editor or is_case_author or request.user.is_superuser
|
|
||||||
if not can_mark_normal:
|
|
||||||
return HttpResponse(status=403)
|
return HttpResponse(status=403)
|
||||||
|
|
||||||
# If already marked normal, unmark (delete the NormalCase)
|
# If already marked normal, unmark (delete the NormalCase)
|
||||||
@@ -684,10 +676,10 @@ def toggle_case_normal(request, pk):
|
|||||||
# Recompute flags for the fragment render
|
# Recompute flags for the fragment render
|
||||||
is_atlas_editor = request.user.is_superuser or request.user.groups.filter(name="atlas_editor").exists()
|
is_atlas_editor = request.user.is_superuser or request.user.groups.filter(name="atlas_editor").exists()
|
||||||
is_case_author = case.author.filter(id=request.user.id).exists()
|
is_case_author = case.author.filter(id=request.user.id).exists()
|
||||||
can_mark_normal = is_atlas_editor or is_case_author or request.user.is_superuser
|
can_edit = case.check_user_can_edit(request.user)
|
||||||
html = render_to_string(
|
html = render_to_string(
|
||||||
"atlas/partials/_normal_toggle.html",
|
"atlas/partials/_normal_toggle.html",
|
||||||
{"case": case, "user": request.user, "is_atlas_editor": is_atlas_editor, "is_case_author": is_case_author, "can_mark_normal": can_mark_normal},
|
{"case": case, "user": request.user, "is_atlas_editor": is_atlas_editor, "is_case_author": is_case_author, "can_edit": can_edit},
|
||||||
request=request,
|
request=request,
|
||||||
)
|
)
|
||||||
return HttpResponse(html)
|
return HttpResponse(html)
|
||||||
@@ -698,11 +690,9 @@ def case_normal_form(request, pk):
|
|||||||
"""Return an HTMX modal with a NormalCaseForm prepopulated with auto-extracted values."""
|
"""Return an HTMX modal with a NormalCaseForm prepopulated with auto-extracted values."""
|
||||||
case = get_case_for_case_detail(pk)
|
case = get_case_for_case_detail(pk)
|
||||||
|
|
||||||
# Permission check: allow atlas editors, case authors, or superusers
|
# Permission check: rely on `can_edit` helper on the Case model
|
||||||
is_atlas_editor = request.user.is_superuser or request.user.groups.filter(name="atlas_editor").exists()
|
can_edit = case.check_user_can_edit(request.user)
|
||||||
is_case_author = case.author.filter(id=request.user.id).exists()
|
if not can_edit:
|
||||||
can_mark_normal = is_atlas_editor or is_case_author or request.user.is_superuser
|
|
||||||
if not can_mark_normal:
|
|
||||||
return HttpResponse(status=403)
|
return HttpResponse(status=403)
|
||||||
|
|
||||||
# Extract defaults
|
# Extract defaults
|
||||||
@@ -794,11 +784,9 @@ def case_normal_form(request, pk):
|
|||||||
def create_case_normal(request, pk):
|
def create_case_normal(request, pk):
|
||||||
case = get_case_for_case_detail(pk)
|
case = get_case_for_case_detail(pk)
|
||||||
|
|
||||||
# Permission check: allow atlas editors, case authors, or superusers
|
# Permission check: rely on `can_edit` helper on the Case model
|
||||||
is_atlas_editor = request.user.is_superuser or request.user.groups.filter(name="atlas_editor").exists()
|
can_edit = case.check_user_can_edit(request.user)
|
||||||
is_case_author = case.author.filter(id=request.user.id).exists()
|
if not can_edit:
|
||||||
can_mark_normal = is_atlas_editor or is_case_author or request.user.is_superuser
|
|
||||||
if not can_mark_normal:
|
|
||||||
return HttpResponse(status=403)
|
return HttpResponse(status=403)
|
||||||
|
|
||||||
from .forms import NormalCaseForm
|
from .forms import NormalCaseForm
|
||||||
@@ -824,10 +812,10 @@ def create_case_normal(request, pk):
|
|||||||
# Return the updated toggle fragment and close modal via inline script
|
# Return the updated toggle fragment and close modal via inline script
|
||||||
is_atlas_editor = request.user.is_superuser or request.user.groups.filter(name="atlas_editor").exists()
|
is_atlas_editor = request.user.is_superuser or request.user.groups.filter(name="atlas_editor").exists()
|
||||||
is_case_author = case.author.filter(id=request.user.id).exists()
|
is_case_author = case.author.filter(id=request.user.id).exists()
|
||||||
can_mark_normal = is_atlas_editor or is_case_author or request.user.is_superuser
|
can_edit = case.check_user_can_edit(request.user)
|
||||||
toggle_html = render_to_string(
|
toggle_html = render_to_string(
|
||||||
"atlas/partials/_normal_toggle.html",
|
"atlas/partials/_normal_toggle.html",
|
||||||
{"case": case, "user": request.user, "is_atlas_editor": is_atlas_editor, "is_case_author": is_case_author, "can_mark_normal": can_mark_normal},
|
{"case": case, "user": request.user, "is_atlas_editor": is_atlas_editor, "is_case_author": is_case_author, "can_edit": can_edit},
|
||||||
request=request,
|
request=request,
|
||||||
)
|
)
|
||||||
toggle_html += "<script>var m = bootstrap.Modal.getOrCreateInstance(document.getElementById('normal-modal-{}')); if(m) m.hide();</script>".format(case.pk)
|
toggle_html += "<script>var m = bootstrap.Modal.getOrCreateInstance(document.getElementById('normal-modal-{}')); if(m) m.hide();</script>".format(case.pk)
|
||||||
|
|||||||
Reference in New Issue
Block a user