mirror of
https://github.com/inventree/InvenTree.git
synced 2025-04-27 19:16:44 +00:00
refactor(backend): Remove custom role admin (#9500)
See https://github.com/inventree/InvenTree/pull/9476#issuecomment-2791584989
This commit is contained in:
parent
efce72b242
commit
4f110e399d
@ -1,7 +1,7 @@
|
||||
"""Admin classes for the 'users' app."""
|
||||
|
||||
from django import forms
|
||||
from django.contrib import admin, messages
|
||||
from django.contrib import admin
|
||||
from django.contrib.admin.widgets import FilteredSelectMultiple
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.contrib.auth.admin import UserAdmin
|
||||
@ -115,157 +115,6 @@ class InvenTreeGroupAdminForm(forms.ModelForm):
|
||||
return instance
|
||||
|
||||
|
||||
class RoleGroupAdmin(admin.ModelAdmin): # pragma: no cover
|
||||
"""Custom admin interface for the Group model."""
|
||||
|
||||
form = InvenTreeGroupAdminForm
|
||||
|
||||
inlines = [RuleSetInline]
|
||||
|
||||
list_display = (
|
||||
'name',
|
||||
'admin',
|
||||
'part_category',
|
||||
'part',
|
||||
'stocktake',
|
||||
'stock_location',
|
||||
'stock_item',
|
||||
'build',
|
||||
'purchase_order',
|
||||
'sales_order',
|
||||
'return_order',
|
||||
)
|
||||
|
||||
def get_rule_set(self, obj, rule_set_type):
|
||||
"""Return list of permissions for the given ruleset."""
|
||||
# Get all rulesets associated to object
|
||||
rule_sets = RuleSet.objects.filter(group=obj.pk)
|
||||
|
||||
# Select ruleset based on type
|
||||
for rule_set in rule_sets:
|
||||
if rule_set.name == rule_set_type:
|
||||
break
|
||||
|
||||
def append_permission_level(permission_level, next_level):
|
||||
"""Append permission level."""
|
||||
if not permission_level:
|
||||
return next_level
|
||||
|
||||
if permission_level[:-1].endswith('|'):
|
||||
permission_level += next_level
|
||||
else:
|
||||
permission_level += ' | ' + next_level
|
||||
|
||||
return permission_level
|
||||
|
||||
permission_level = ''
|
||||
|
||||
if rule_set.can_view:
|
||||
permission_level = append_permission_level(permission_level, 'V')
|
||||
|
||||
if rule_set.can_add:
|
||||
permission_level = append_permission_level(permission_level, 'A')
|
||||
|
||||
if rule_set.can_change:
|
||||
permission_level = append_permission_level(permission_level, 'C')
|
||||
|
||||
if rule_set.can_delete:
|
||||
permission_level = append_permission_level(permission_level, 'D')
|
||||
|
||||
return permission_level
|
||||
|
||||
def admin(self, obj):
|
||||
"""Return the ruleset for the admin role."""
|
||||
return self.get_rule_set(obj, 'admin')
|
||||
|
||||
def part_category(self, obj):
|
||||
"""Return the ruleset for the PartCategory role."""
|
||||
return self.get_rule_set(obj, 'part_category')
|
||||
|
||||
def part(self, obj):
|
||||
"""Return the ruleset for the Part role."""
|
||||
return self.get_rule_set(obj, 'part')
|
||||
|
||||
def stocktake(self, obj):
|
||||
"""Return the ruleset for the Stocktake role."""
|
||||
return self.get_rule_set(obj, 'stocktake')
|
||||
|
||||
def stock_location(self, obj):
|
||||
"""Return the ruleset for the StockLocation role."""
|
||||
return self.get_rule_set(obj, 'stock_location')
|
||||
|
||||
def stock_item(self, obj):
|
||||
"""Return the ruleset for the StockItem role."""
|
||||
return self.get_rule_set(obj, 'stock')
|
||||
|
||||
def build(self, obj):
|
||||
"""Return the ruleset for the BuildOrder role."""
|
||||
return self.get_rule_set(obj, 'build')
|
||||
|
||||
def purchase_order(self, obj):
|
||||
"""Return the ruleset for the PurchaseOrder role."""
|
||||
return self.get_rule_set(obj, 'purchase_order')
|
||||
|
||||
def sales_order(self, obj):
|
||||
"""Return the ruleset for the SalesOrder role."""
|
||||
return self.get_rule_set(obj, 'sales_order')
|
||||
|
||||
def return_order(self, obj):
|
||||
"""Return the ruleset ofr the ReturnOrder role."""
|
||||
return self.get_rule_set(obj, 'return_order')
|
||||
|
||||
def get_formsets_with_inlines(self, request, obj=None):
|
||||
"""Retrieve all inline formsets for the given request and object.
|
||||
|
||||
Args:
|
||||
request (HttpRequest): The HTTP request object.
|
||||
obj (Model, optional): The model instance for which the formsets are being retrieved. Defaults to None.
|
||||
|
||||
Yields:
|
||||
tuple: A tuple containing the formset and the corresponding inline instance.
|
||||
"""
|
||||
for inline in self.get_inline_instances(request, obj):
|
||||
# Hide RuleSetInline in the 'Add role' view
|
||||
if not isinstance(inline, RuleSetInline) or obj is not None:
|
||||
yield inline.get_formset(request, obj), inline
|
||||
|
||||
filter_horizontal = ['permissions']
|
||||
|
||||
def save_model(self, request, obj, form, change):
|
||||
"""Save overwrite.
|
||||
|
||||
This method serves two purposes:
|
||||
- show warning message whenever the group users belong to multiple groups
|
||||
- skip saving of the group instance model as inlines needs to be saved before.
|
||||
"""
|
||||
# Get form cleaned data
|
||||
users = form.cleaned_data['users']
|
||||
|
||||
# Check for users who are members of multiple groups
|
||||
multiple_group_users = []
|
||||
|
||||
for user in users:
|
||||
if user.groups.all().count() > 1:
|
||||
multiple_group_users.append(user.username)
|
||||
|
||||
# If any, display warning message when group is saved
|
||||
if len(multiple_group_users) > 0:
|
||||
msg = (
|
||||
_('The following users are members of multiple groups')
|
||||
+ ': '
|
||||
+ ', '.join(multiple_group_users)
|
||||
)
|
||||
|
||||
messages.add_message(request, messages.WARNING, msg)
|
||||
|
||||
def save_formset(self, request, form, formset, change):
|
||||
"""Save the inline formset."""
|
||||
# Save inline Rulesets
|
||||
formset.save()
|
||||
# Save Group instance and update permissions
|
||||
form.instance.save(update_fields=['name'])
|
||||
|
||||
|
||||
class InvenTreeUserAdmin(UserAdmin):
|
||||
"""Custom admin page for the User model.
|
||||
|
||||
@ -301,8 +150,5 @@ class OwnerAdmin(admin.ModelAdmin):
|
||||
search_fields = ['name']
|
||||
|
||||
|
||||
admin.site.unregister(Group)
|
||||
admin.site.register(Group, RoleGroupAdmin)
|
||||
|
||||
admin.site.unregister(User)
|
||||
admin.site.register(User, InvenTreeUserAdmin)
|
||||
|
Loading…
x
Reference in New Issue
Block a user