0001-manager-provide-a-simpler-role-creation-form-66794.patch
src/authentic2/manager/forms.py | ||
---|---|---|
609 | 609 |
} |
610 | 610 | |
611 | 611 | |
612 |
class RoleAddForm(HideOUFieldMixin, LimitQuerysetFormMixin, SlugMixin, forms.ModelForm): |
|
613 |
ou = forms.ModelChoiceField( |
|
614 |
queryset=OrganizationalUnit.objects, required=True, label=_('Organizational unit') |
|
615 |
) |
|
616 | ||
617 |
class Meta: |
|
618 |
model = Role |
|
619 |
fields = ( |
|
620 |
'name', |
|
621 |
'ou', |
|
622 |
) |
|
623 |
widgets = { |
|
624 |
'name': forms.TextInput(), |
|
625 |
} |
|
626 | ||
627 | ||
612 | 628 |
class OUEditForm(SlugMixin, CssClass, forms.ModelForm): |
613 | 629 |
def __init__(self, *args, **kwargs): |
614 | 630 |
super().__init__(*args, **kwargs) |
src/authentic2/manager/role_views.py | ||
---|---|---|
37 | 37 |
from authentic2.a2_rbac.models import OrganizationalUnit, Permission, Role, RoleParenting |
38 | 38 |
from authentic2.a2_rbac.utils import get_default_ou |
39 | 39 |
from authentic2.apps.journal.views import JournalViewWithContext |
40 |
from authentic2.forms.profile import modelform_factory |
|
41 | 40 |
from authentic2.utils import crypto |
42 | 41 |
from authentic2.utils.misc import redirect |
43 | 42 | |
... | ... | |
100 | 99 |
model = Role |
101 | 100 |
title = _('Add role') |
102 | 101 |
success_view_name = 'a2-manager-role-members' |
103 |
exclude_fields = ('slug',)
|
|
102 |
form_class = forms.RoleAddForm
|
|
104 | 103 | |
105 | 104 |
def get_initial(self): |
106 | 105 |
initial = super().get_initial() |
... | ... | |
108 | 107 |
initial['ou'] = search_ou or get_default_ou() |
109 | 108 |
return initial |
110 | 109 | |
111 |
def get_form_class(self): |
|
112 |
form = forms.get_role_form_class() |
|
113 |
fields = [x for x in form.base_fields.keys() if x not in self.exclude_fields] |
|
114 |
return modelform_factory(self.model, form=form, fields=fields) |
|
115 | ||
116 | 110 |
def form_valid(self, form): |
117 | 111 |
response = super().form_valid(form) |
118 | 112 |
hooks.call_hooks( |
tests/test_manager.py | ||
---|---|---|
86 | 86 |
ou_add = login(app, superuser_or_admin, reverse('a2-manager-role-add')) |
87 | 87 |
form = ou_add.form |
88 | 88 |
assert 'name' in form.fields |
89 |
assert 'description' in form.fields |
|
90 | 89 |
assert 'ou' not in form.fields |
91 |
assert 'slug' not in form.fields |
|
90 |
excluded_fields = ( |
|
91 |
'slug', |
|
92 |
'description', |
|
93 |
'details', |
|
94 |
'service', |
|
95 |
'external_id', |
|
96 |
'admin_scope', |
|
97 |
'members', |
|
98 |
'permissions', |
|
99 |
) |
|
100 |
for field in excluded_fields: |
|
101 |
assert field not in form.fields |
|
92 | 102 |
form.set('name', 'New role') |
93 | 103 |
response = form.submit().follow() |
94 | 104 |
assert non_admin_roles.count() == 1 |
... | ... | |
121 | 131 |
ou_add = app.get(reverse('a2-manager-role-add')) |
122 | 132 |
form = ou_add.form |
123 | 133 |
assert 'name' in form.fields |
124 |
assert 'description' in form.fields |
|
125 | 134 |
assert 'ou' in form.fields |
126 | 135 |
options = [o[2] for o in form.fields['ou'][0].options] |
127 | 136 |
assert len(options) == 3 |
128 |
- |