Move perms so they are at the top level of the form so that the data is properly populated

Add form fields for all environments in update member form
This commit is contained in:
leigh-mil 2019-09-13 15:12:33 -04:00
parent 93530e903f
commit 80dcb9c580
5 changed files with 47 additions and 29 deletions

View File

@ -1,3 +1,4 @@
from flask_wtf import FlaskForm
from wtforms.fields import FormField, FieldList, HiddenField, BooleanField
from wtforms import Form
@ -26,7 +27,7 @@ class EnvironmentForm(Form):
return _data
class PermissionsForm(Form):
class PermissionsForm(FlaskForm):
perms_env_mgmt = BooleanField(
translate("portfolios.applications.members.form.env_mgmt.label"),
default=False,
@ -56,6 +57,12 @@ class NewForm(BaseForm):
environment_roles = FieldList(FormField(EnvironmentForm))
class UpdateMemberForm(BaseForm):
permission_sets = FormField(PermissionsForm)
class UpdateMemberForm(PermissionsForm):
# permission_sets = FormField(PermissionsForm)
environment_roles = FieldList(FormField(EnvironmentForm))
@property
def data(self):
_data = super().data
_data.pop("csrf_token", None)
return _data

View File

@ -9,11 +9,8 @@ from atst.domain.audit_log import AuditLog
from atst.domain.common import Paginator
from atst.domain.environment_roles import EnvironmentRoles
from atst.forms.application import ApplicationForm, EditEnvironmentForm
from atst.forms.application_member import (
NewForm as NewMemberForm,
UpdateMemberForm,
PermissionsForm,
)
from atst.forms.application_member import NewForm as NewMemberForm, UpdateMemberForm
from atst.forms.data import ENV_ROLE_NO_ACCESS as NO_ACCESS
from atst.domain.authz.decorator import user_can_access_decorator as user_can
from atst.models.permissions import Permissions
from atst.domain.permission_sets import PermissionSets
@ -62,18 +59,29 @@ def get_members_data(application):
}
for role in roles
]
form_data = {
"environment_roles": environment_roles,
"permission_sets": permission_sets,
}
perms_form = PermissionsForm(data=permission_sets)
form = UpdateMemberForm(environment_roles=environment_roles)
form.permission_sets = perms_form
env_roles_form_data = []
for env in application.environments:
env_data = {
"environment_id": str(env.id),
"environment_name": env.name,
"role": NO_ACCESS,
}
env_role = EnvironmentRoles.get_by_user_and_environment(
member.user_id, env.id
)
if env_role:
env_data["role"] = env_role.role
env_roles_form_data.append(env_data)
form = UpdateMemberForm(
environment_roles=env_roles_form_data, **permission_sets
)
members_data.append(
{
"role_id": member.id,
"user_name": member.user_name,
# remove these keys and use form
"permission_sets": permission_sets,
"environment_roles": environment_roles,
"role_status": member.status.value,
@ -348,7 +356,10 @@ def update_member(application_id, application_role_id):
form = UpdateMemberForm(http_request.form)
if form.validate():
new_perm_sets_names = perm_sets_obj_to_list(form.permission_sets.data)
perm_sets = {
key: value for key, value in form.data.items() if key != "environment_roles"
}
new_perm_sets_names = perm_sets_obj_to_list(perm_sets)
ApplicationRoles.update_permission_sets(app_role, new_perm_sets_names)
for env_role in form.environment_roles:

View File

@ -129,9 +129,9 @@
{% set team_mgmt = "perms_team_mgmt-{}".format(member.role_id) %}
{% set env_mgmt = "perms_env_mgmt-{}".format(member.role_id) %}
{% set del_env = "perms_del_env-{}".format(member.role_id) %}
{{ CheckboxInput(member.form.permission_sets.perms_team_mgmt, classes="input__inline-fields", key=team_mgmt, id=team_mgmt) }}
{{ CheckboxInput(member.form.permission_sets.perms_env_mgmt, classes="input__inline-fields", key=env_mgmt, id=env_mgmt) }}
{{ CheckboxInput(member.form.permission_sets.perms_del_env, classes="input__inline-fields", key=del_env, id=del_env) }}
{{ CheckboxInput(member.form.perms_team_mgmt, classes="input__inline-fields", key=team_mgmt, id=team_mgmt) }}
{{ CheckboxInput(member.form.perms_env_mgmt, classes="input__inline-fields", key=env_mgmt, id=env_mgmt) }}
{{ CheckboxInput(member.form.perms_del_env, classes="input__inline-fields", key=del_env, id=del_env) }}
</div>
<div class="environment-roles-new">
<h4>{{ "portfolios.applications.members.form.env_access" | translate }}</h4>

View File

@ -39,12 +39,9 @@ def test_environment_form_invalid():
def test_update_member_form():
form_data = {
"member_role_id": 123,
"permission_sets": {
"perms_team_mgmt": True,
"perms_env_mgmt": False,
"perms_del_env": False,
},
"perms_team_mgmt": True,
"perms_env_mgmt": False,
"perms_del_env": False,
"environment_roles": {
"environment_id": 123,
"environment_name": "testing",
@ -53,3 +50,6 @@ def test_update_member_form():
}
form = UpdateMemberForm(data=form_data)
assert form.validate()
assert form.perms_team_mgmt.data
assert not form.perms_env_mgmt.data
assert not form.perms_del_env.data

View File

@ -488,9 +488,9 @@ def test_update_member(client, user_session):
"environment_roles-2-environment_id": env_2.id,
"environment_roles-2-role": CSPRole.NETWORK_ADMIN.value,
"environment_roles-2-environment_name": env_2.name,
"permission_sets-perms_env_mgmt": True,
"permission_sets-perms_team_mgmt": True,
"permission_sets-perms_del_env": True,
"perms_env_mgmt": True,
"perms_team_mgmt": True,
"perms_del_env": True,
},
)