Skip to content

Commit 5361c3a

Browse files
committed
remove OS user-side UI for product / product-type members
Drop the user-side /user/<uid>/add_product_member and /user/<uid>/add_product_type_member routes (URL names add_product_member_user, add_product_type_member_user), the two view functions in dojo/user/views.py, and the Add_Product_Member_UserForm + Add_Product_Type_Member_UserForm classes. Both the Tailwind and Bootstrap (templates_classic) copies of new_product_member_user.html and new_product_type_member_user.html are removed. Pro takes ownership of these classic screens via pro/product_members/* and pro/product_type_members/* (committed separately in dojo-pro). The Authorize_User_For_Products / Authorize_User_For_ProductTypes flow stays — it manipulates the legacy product.authorized_users M2M, not Product_Member rows.
1 parent 646df9c commit 5361c3a

7 files changed

Lines changed: 1 addition & 163 deletions

File tree

dojo/forms.py

Lines changed: 0 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -323,22 +323,6 @@ def __init__(self, *args, product_type=None, **kwargs):
323323
)
324324

325325

326-
class Add_Product_Type_Member_UserForm(forms.ModelForm):
327-
product_types = forms.ModelMultipleChoiceField(queryset=Product_Type.objects.none(), required=True,
328-
label=labels.ORG_PLURAL_LABEL)
329-
330-
def __init__(self, *args, **kwargs):
331-
super().__init__(*args, **kwargs)
332-
current_members = Product_Type_Member.objects.filter(user=self.initial["user"]).values_list("product_type", flat=True)
333-
self.fields["product_types"].queryset = get_authorized_product_types("staff_only") \
334-
.exclude(id__in=current_members)
335-
self.fields["user"].disabled = True
336-
337-
class Meta:
338-
model = Product_Type_Member
339-
fields = ["product_types", "user", "role"]
340-
341-
342326
class Delete_Product_Type_MemberForm(Edit_Product_Type_MemberForm):
343327
def __init__(self, *args, **kwargs):
344328
super().__init__(*args, **kwargs)
@@ -537,22 +521,6 @@ def __init__(self, *args, user=None, **kwargs):
537521
)
538522

539523

540-
class Add_Product_Member_UserForm(forms.ModelForm):
541-
products = forms.ModelMultipleChoiceField(queryset=Product.objects.none(), required=True,
542-
label=labels.ASSET_PLURAL_LABEL)
543-
544-
def __init__(self, *args, **kwargs):
545-
super().__init__(*args, **kwargs)
546-
current_members = Product_Member.objects.filter(user=self.initial["user"]).values_list("product", flat=True)
547-
self.fields["products"].queryset = get_authorized_products("staff_only") \
548-
.exclude(id__in=current_members)
549-
self.fields["user"].disabled = True
550-
551-
class Meta:
552-
model = Product_Member
553-
fields = ["products", "user", "role"]
554-
555-
556524
class Delete_Product_MemberForm(Edit_Product_MemberForm):
557525
def __init__(self, *args, **kwargs):
558526
super().__init__(*args, **kwargs)

dojo/templates/dojo/new_product_member_user.html

Lines changed: 0 additions & 14 deletions
This file was deleted.

dojo/templates/dojo/new_product_type_member_user.html

Lines changed: 0 additions & 14 deletions
This file was deleted.

dojo/templates_classic/dojo/new_product_member_user.html

Lines changed: 0 additions & 19 deletions
This file was deleted.

dojo/templates_classic/dojo/new_product_type_member_user.html

Lines changed: 0 additions & 19 deletions
This file was deleted.

dojo/user/urls.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121
re_path(r"^user/(?P<uid>\d+)$", views.view_user, name="view_user"),
2222
re_path(r"^user/(?P<uid>\d+)/edit$", views.edit_user, name="edit_user"),
2323
re_path(r"^user/(?P<uid>\d+)/delete", views.delete_user, name="delete_user"),
24-
re_path(r"^user/(?P<uid>\d+)/add_product_type_member$", views.add_product_type_member, name="add_product_type_member_user"),
25-
re_path(r"^user/(?P<uid>\d+)/add_product_member$", views.add_product_member, name="add_product_member_user"),
2624
re_path(r"^user/(?P<uid>\d+)/authorize_products$",
2725
views.authorize_user_for_products, name="authorize_user_for_products"),
2826
re_path(r"^user/(?P<uid>\d+)/authorize_product_types$",

dojo/user/views.py

Lines changed: 1 addition & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,10 @@
2828
from rest_framework.exceptions import ValidationError as RFValidationError
2929

3030
from dojo.authorization.authorization import user_is_superuser_or_global_owner
31-
from dojo.authorization.models import Global_Role, Product_Member, Product_Type_Member
31+
from dojo.authorization.models import Global_Role
3232
from dojo.decorators import dojo_ratelimit
3333
from dojo.filters import UserFilter
3434
from dojo.forms import (
35-
Add_Product_Member_UserForm,
36-
Add_Product_Type_Member_UserForm,
3735
AddDojoUserForm,
3836
APIKeyForm,
3937
Authorize_User_For_ProductsForm,
@@ -484,66 +482,6 @@ def delete_user(request, uid):
484482
})
485483

486484

487-
@user_passes_test(lambda u: u.is_superuser)
488-
def add_product_type_member(request, uid):
489-
page_name = str(labels.ORG_USERS_ADD_LABEL)
490-
user = get_object_or_404(Dojo_User, id=uid)
491-
memberform = Add_Product_Type_Member_UserForm(initial={"user": user.id})
492-
if request.method == "POST":
493-
memberform = Add_Product_Type_Member_UserForm(request.POST, initial={"user": user.id})
494-
if memberform.is_valid():
495-
if "product_types" in memberform.cleaned_data and len(memberform.cleaned_data["product_types"]) > 0:
496-
for product_type in memberform.cleaned_data["product_types"]:
497-
existing_members = Product_Type_Member.objects.filter(product_type=product_type, user=user)
498-
if existing_members.count() == 0:
499-
product_type_member = Product_Type_Member()
500-
product_type_member.product_type = product_type
501-
product_type_member.user = user
502-
product_type_member.role = memberform.cleaned_data["role"]
503-
product_type_member.save()
504-
messages.add_message(request,
505-
messages.SUCCESS,
506-
labels.ORG_USERS_ADD_SUCCESS_MESSAGE,
507-
extra_tags="alert-success")
508-
return HttpResponseRedirect(reverse("view_user", args=(uid, )))
509-
add_breadcrumb(title=page_name, top_level=False, request=request)
510-
return render(request, "dojo/new_product_type_member_user.html", {
511-
"name": page_name,
512-
"user": user,
513-
"form": memberform,
514-
})
515-
516-
517-
@user_passes_test(lambda u: u.is_superuser)
518-
def add_product_member(request, uid):
519-
page_name = str(labels.ASSET_USERS_MEMBER_ADD_LABEL)
520-
user = get_object_or_404(Dojo_User, id=uid)
521-
memberform = Add_Product_Member_UserForm(initial={"user": user.id})
522-
if request.method == "POST":
523-
memberform = Add_Product_Member_UserForm(request.POST, initial={"user": user.id})
524-
if memberform.is_valid():
525-
if "products" in memberform.cleaned_data and len(memberform.cleaned_data["products"]) > 0:
526-
for product in memberform.cleaned_data["products"]:
527-
existing_members = Product_Member.objects.filter(product=product, user=user)
528-
if existing_members.count() == 0:
529-
product_member = Product_Member()
530-
product_member.product = product
531-
product_member.user = user
532-
product_member.role = memberform.cleaned_data["role"]
533-
product_member.save()
534-
messages.add_message(request,
535-
messages.SUCCESS,
536-
labels.ASSET_USERS_MEMBER_ADD_SUCCESS_MESSAGE,
537-
extra_tags="alert-success")
538-
return HttpResponseRedirect(reverse("view_user", args=(uid, )))
539-
add_breadcrumb(title=page_name, top_level=False, request=request)
540-
return render(request, "dojo/new_product_member_user.html", {
541-
"name": page_name,
542-
"user": user,
543-
"form": memberform,
544-
})
545-
546-
547485
@user_passes_test(lambda u: u.is_staff)
548486
def authorize_user_for_products(request, uid):
549487
"""OS legacy: add this user to one or more products' authorized_users."""

0 commit comments

Comments
 (0)