Update role group list view to AddRemoveView

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2019-04-27 02:02:29 -04:00
parent e6ad202ee9
commit cd24eef107
4 changed files with 45 additions and 27 deletions

View File

@@ -164,6 +164,9 @@
* Use the 'handler' prefix for all the signal handler functions. * Use the 'handler' prefix for all the signal handler functions.
* Remove custom email widget and use Django's. * Remove custom email widget and use Django's.
* Increase default maximum number of favorite documents to 400. * Increase default maximum number of favorite documents to 400.
* Update the role group list view to use the new AddRemoveView.
* Commit the group event in conjunction with the role event
when a group is added or remove from role.
3.1.11 (2019-04-XX) 3.1.11 (2019-04-XX)
=================== ===================

View File

@@ -196,6 +196,9 @@ Other changes
* Use the 'handler' prefix for all the signal handler functions. * Use the 'handler' prefix for all the signal handler functions.
* Remove custom email widget and use Django's. * Remove custom email widget and use Django's.
* Increase default maximum number of favorite documents to 400. * Increase default maximum number of favorite documents to 400.
* Update the role group list view to use the new AddRemoveView.
* Commit the group event in conjunction with the role event
when a group is added or remove from role.
Removals Removals
-------- --------

View File

@@ -8,6 +8,8 @@ from django.urls import reverse
from django.utils.encoding import force_text, python_2_unicode_compatible from django.utils.encoding import force_text, python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from mayan.apps.user_management.events import event_group_edited
from .classes import Permission from .classes import Permission
from .events import event_role_created, event_role_edited from .events import event_role_created, event_role_edited
from .managers import RoleManager, StoredPermissionManager from .managers import RoleManager, StoredPermissionManager
@@ -119,6 +121,28 @@ class Role(models.Model):
def grant(self, permission): def grant(self, permission):
self.permissions.add(permission.stored_permission) self.permissions.add(permission.stored_permission)
def groups_add(self, queryset, _user=None):
with transaction.atomic():
event_role_edited.commit(
actor=_user, target=self
)
for obj in queryset:
self.groups.add(obj)
event_group_edited.commit(
actor=_user, action_object=self, target=obj
)
def groups_remove(self, queryset, _user=None):
with transaction.atomic():
event_role_edited.commit(
actor=_user, target=self
)
for obj in queryset:
self.groups.remove(obj)
event_group_edited.commit(
actor=_user, action_object=self, target=obj
)
def natural_key(self): def natural_key(self):
return (self.label,) return (self.label,)
natural_key.dependencies = ['auth.Group', 'permissions.StoredPermission'] natural_key.dependencies = ['auth.Group', 'permissions.StoredPermission']

View File

@@ -73,43 +73,31 @@ class RoleEditView(SingleObjectEditView):
return {'_user': self.request.user} return {'_user': self.request.user}
class SetupRoleMembersView(AssignRemoveView): class SetupRoleMembersView(AddRemoveView):
grouped = False action_add_method = 'groups_add'
left_list_title = _('Available groups') action_remove_method = 'groups_remove'
right_list_title = _('Role groups') main_object_model = Role
object_permission = permission_role_edit main_object_permission = permission_role_edit
main_object_pk_url_kwarg = 'pk'
secondary_object_model = Group
secondary_object_permission = permission_group_edit
list_available_title = _('Available groups')
list_added_title = _('Role groups')
related_field = 'groups'
def add(self, item): def get_actions_extra_kwargs(self):
group = get_object_or_404(klass=Group, pk=item) return {'_user': self.request.user}
self.get_object().groups.add(group)
def get_extra_context(self): def get_extra_context(self):
return { return {
'object': self.get_object(), 'object': self.main_object,
'title': _('Groups of role: %s') % self.get_object(), 'title': _('Groups of role: %s') % self.main_object,
'subtitle': _( 'subtitle': _(
'Add groups to be part of a role. They will ' 'Add groups to be part of a role. They will '
'inherit the role\'s permissions and access controls.' 'inherit the role\'s permissions and access controls.'
), ),
} }
def get_object(self):
return get_object_or_404(klass=Role, pk=self.kwargs['pk'])
def left_list(self):
return [
(force_text(group.pk), group.name) for group in set(Group.objects.all()) - set(self.get_object().groups.all())
]
def right_list(self):
return [
(force_text(group.pk), group.name) for group in self.get_object().groups.all()
]
def remove(self, item):
group = get_object_or_404(klass=Group, pk=item)
self.get_object().groups.remove(group)
class SetupRolePermissionsView(AssignRemoveView): class SetupRolePermissionsView(AssignRemoveView):
grouped = True grouped = True