Update group roles view to the new AddRemoveView

Signed-off-by: Roberto Rosario <roberto.rosario.gonzalez@gmail.com>
This commit is contained in:
Roberto Rosario
2019-04-24 22:23:15 -04:00
parent a556f2a1ba
commit 52f734ee9f
6 changed files with 47 additions and 29 deletions

View File

@@ -148,6 +148,7 @@
default submit and cancel.
* Update ChoiceForm to be full height.
* Add AddRemoveView to replace AssignRemoveView
* Update the group roles view to use the new AddRemoveView.
3.1.11 (2019-04-XX)
===================

View File

@@ -180,6 +180,7 @@ Other changes
default submit and cancel.
* Update ChoiceForm to be full height.
* Add AddRemoveView to replace AssignRemoveView
* Update the group roles view to use the new AddRemoveView.
Removals
--------

View File

@@ -18,6 +18,7 @@ from .links import (
link_group_roles, link_role_create, link_role_delete, link_role_edit,
link_role_groups, link_role_list, link_role_permissions
)
from .methods import method_group_roles_add, method_group_roles_remove
from .permissions import (
permission_role_delete, permission_role_edit, permission_role_view
)
@@ -38,6 +39,9 @@ class PermissionsApp(MayanAppConfig):
Role = self.get_model('Role')
Group = apps.get_model(app_label='auth', model_name='Group')
Group.add_to_class(name='roles_add', value=method_group_roles_add)
Group.add_to_class(name='roles_remove', value=method_group_roles_remove)
ModelPermission.register(
model=Role, permissions=(
permission_acl_edit, permission_acl_view,

View File

@@ -0,0 +1,23 @@
from __future__ import unicode_literals
from django.db import transaction
from mayan.apps.user_management.events import event_group_edited
def method_group_roles_add(self, queryset, _user):
with transaction.atomic():
event_group_edited.commit(
actor=_user, target=self
)
for role in queryset:
self.roles.add(role)
def method_group_roles_remove(self, queryset, _user):
with transaction.atomic():
event_group_edited.commit(
actor=_user, target=self
)
for role in queryset:
self.roles.remove(role)

View File

@@ -4,14 +4,14 @@ from django.conf.urls import url
from .api_views import APIPermissionList, APIRoleListView, APIRoleView
from .views import (
GroupRoleMembersView, RoleCreateView, RoleDeleteView, RoleEditView,
GroupRolesView, RoleCreateView, RoleDeleteView, RoleEditView,
RoleListView, SetupRoleMembersView, SetupRolePermissionsView
)
urlpatterns = [
url(
regex=r'^group/(?P<pk>\d+)/roles/$',
view=GroupRoleMembersView.as_view(), name='group_roles'
view=GroupRolesView.as_view(), name='group_roles'
),
url(regex=r'^role/list/$', view=RoleListView.as_view(), name='role_list'),
url(

View File

@@ -10,6 +10,7 @@ from django.utils.encoding import force_text
from django.utils.translation import ugettext_lazy as _
from mayan.apps.acls.models import AccessControlList
from mayan.apps.common.generics import AddRemoveView
from mayan.apps.common.views import (
AssignRemoveView, SingleObjectCreateView, SingleObjectDeleteView,
SingleObjectEditView, SingleObjectListView
@@ -26,39 +27,27 @@ from .permissions import (
)
class GroupRoleMembersView(AssignRemoveView):
grouped = False
left_list_title = _('Available roles')
right_list_title = _('Group roles')
object_permission = permission_group_edit
class GroupRolesView(AddRemoveView):
action_add_method = 'roles_add'
action_remove_method = 'roles_remove'
main_object_model = Group
main_object_permission = permission_group_edit
main_object_pk_url_kwarg = 'pk'
secondary_object_model = Role
secondary_object_permission = permission_role_edit
list_available_title = _('Available roles')
list_added_title = _('Group roles')
related_field = 'roles'
def add(self, item):
role = get_object_or_404(klass=Role, pk=item)
self.get_object().roles.add(role)
def get_actions_extra_kwargs(self):
return {'_user': self.request.user}
def get_extra_context(self):
return {
'object': self.get_object(),
'title': _('Roles of group: %s') % self.get_object()
'object': self.main_object,
'title': _('Roles of group: %s') % self.main_object,
}
def get_object(self):
return get_object_or_404(klass=Group, pk=self.kwargs['pk'])
def left_list(self):
return [
(force_text(role.pk), role.label) for role in set(Role.objects.all()) - set(self.get_object().roles.all())
]
def right_list(self):
return [
(force_text(role.pk), role.label) for role in self.get_object().roles.all()
]
def remove(self, item):
role = get_object_or_404(klass=Role, pk=item)
self.get_object().roles.remove(role)
class RoleCreateView(SingleObjectCreateView):
fields = ('label',)