52 lines
2.2 KiB
Python
52 lines
2.2 KiB
Python
from django import forms
|
|
from django.contrib import messages, admin
|
|
from django.core.exceptions import PermissionDenied
|
|
from django.utils.translation import ungettext, ugettext_lazy as _
|
|
|
|
from orchestra.admin.decorators import action_with_confirmation
|
|
from orchestra.contrib.orchestration import Operation
|
|
|
|
|
|
class GrantPermissionForm(forms.Form):
|
|
base_path = forms.ChoiceField(label=_("Grant access to"), choices=(('hola', 'hola'),),
|
|
help_text=_("User will be granted access to this directory."))
|
|
path_extension = forms.CharField(label='', required=False)
|
|
read_only = forms.BooleanField(label=_("Read only"), initial=False, required=False,
|
|
help_text=_("Designates whether the permissions granted will be read-only or read/write."))
|
|
|
|
|
|
@action_with_confirmation(extra_context=dict(form=GrantPermissionForm()))
|
|
def grant_permission(modeladmin, request, queryset):
|
|
user = queryset.get()
|
|
log = Operation.execute_action(user, 'grant_permission')
|
|
# TODO
|
|
grant_permission.url_name = 'grant-permission'
|
|
grant_permission.verbose_name = _("Grant permission")
|
|
|
|
|
|
def delete_selected(modeladmin, request, queryset):
|
|
""" wrapper arround admin.actions.delete_selected to prevent main system users deletion """
|
|
opts = modeladmin.model._meta
|
|
app_label = opts.app_label
|
|
# Check that the user has delete permission for the actual model
|
|
if not modeladmin.has_delete_permission(request):
|
|
raise PermissionDenied
|
|
else:
|
|
accounts = []
|
|
for user in queryset:
|
|
if user.is_main:
|
|
accounts.append(user.username)
|
|
if accounts:
|
|
n = len(accounts)
|
|
messages.error(request, ungettext(
|
|
"You have selected one main system user (%(accounts)s), which can not be deleted.",
|
|
"You have selected some main system users which can not be deleted (%(accounts)s).",
|
|
n) % {
|
|
'accounts': ', '.join(accounts[:10]+['...'] if n > 10 else accounts)
|
|
}
|
|
)
|
|
return
|
|
return admin.actions.delete_selected(modeladmin, request, queryset)
|
|
delete_selected.short_description = _("Delete selected %(verbose_name_plural)s")
|
|
|