diff --git a/atst/domain/environment_roles.py b/atst/domain/environment_roles.py index 8b10a2db..5c0be864 100644 --- a/atst/domain/environment_roles.py +++ b/atst/domain/environment_roles.py @@ -14,3 +14,10 @@ class EnvironmentRoles(object): .one_or_none() ) return existing_env_role + + @classmethod + def delete(cls, user_id, environment_id): + existing_env_role = EnvironmentRoles.get(user_id, environment_id) + if existing_env_role: + db.session.delete(existing_env_role) + db.session.commit() diff --git a/atst/domain/environments.py b/atst/domain/environments.py index 9555d12a..aef84ad7 100644 --- a/atst/domain/environments.py +++ b/atst/domain/environments.py @@ -69,13 +69,17 @@ class Environments(object): for id_and_role in ids_and_roles: new_role = id_and_role["role"] environment = Environments.get(id_and_role["id"]) - env_role = EnvironmentRoles.get(workspace_user.user_id, id_and_role["id"]) - if env_role: - env_role.role = new_role + + if new_role is None: + EnvironmentRoles.delete(workspace_user.user.id, environment.id) else: - env_role = EnvironmentRole( - user=workspace_user.user, environment=environment, role=new_role - ) - db.session.add(env_role) + env_role = EnvironmentRoles.get(workspace_user.user_id, id_and_role["id"]) + if env_role: + env_role.role = new_role + else: + env_role = EnvironmentRole( + user=workspace_user.user, environment=environment, role=new_role + ) + db.session.add(env_role) db.session.commit() diff --git a/atst/forms/data.py b/atst/forms/data.py index 3c48f316..d1577a86 100644 --- a/atst/forms/data.py +++ b/atst/forms/data.py @@ -153,6 +153,10 @@ ENVIRONMENT_ROLES = [ "description": "Views cloud resource usage and budget reports.", }, ), + ( + "", + {"name": "No Access", "description": "User has no access to this environment."}, + ), ] ENV_ROLE_MODAL_DESCRIPTION = { diff --git a/atst/routes/workspaces.py b/atst/routes/workspaces.py index af59939b..302cacb3 100644 --- a/atst/routes/workspaces.py +++ b/atst/routes/workspaces.py @@ -285,12 +285,10 @@ def update_member(workspace_id, member_id): for entry in form_dict: if re.match("env_", entry): env_id = entry[4:] - env_role = form_dict[entry] - if env_role: - ids_and_roles.append({"id": env_id, "role": env_role}) + env_role = form_dict[entry] or None + ids_and_roles.append({"id": env_id, "role": env_role}) form = EditMemberForm(http_request.form) - if form.validate(): new_role_name = None if form.data["workspace_role"] != member.role: diff --git a/js/components/forms/edit_environment_role.js b/js/components/forms/edit_environment_role.js index 41708cc1..7c2a4e31 100644 --- a/js/components/forms/edit_environment_role.js +++ b/js/components/forms/edit_environment_role.js @@ -38,26 +38,24 @@ export default { this.new_role = this.initialData }, actualRole: function () { - return this.revoke ? null : this.new_role } }, computed: { displayName: function () { - const roleName = this.actualRole() + const newRole = this.newRole for (var arr in this.choices) { - if (this.choices[arr][0] == roleName) { + if (this.choices[arr][0] == newRole) { return this.choices[arr][1].name } } - return roleName ? roleName : "no access" }, label_class: function () { - return this.displayName === "no access" ? + return this.displayName === "No Access" ? "label" : "label label--success" }, newRole: function () { - return this.actualRole() + return this.revoke ? "" : this.new_role } }, } diff --git a/templates/workspaces/members/edit.html b/templates/workspaces/members/edit.html index 4db44b7e..ed85f6ce 100644 --- a/templates/workspaces/members/edit.html +++ b/templates/workspaces/members/edit.html @@ -81,7 +81,7 @@ {% set role = EnvironmentRoles.get(member.user_id, env.id).role %}
  • - +
    {{ env.name }} @@ -104,7 +104,6 @@ {% for choice in choices %}
  • - {% if choice[0] != "" %} - {% endif %}
  • {% endfor %}