This commit is contained in:
leigh-mil
2019-10-31 10:12:41 -04:00
parent b653546768
commit e8f21acf5b
13 changed files with 81 additions and 80 deletions

View File

@@ -73,7 +73,6 @@ class EnvironmentRoles(object):
if existing_env_role:
# TODO: Implement suspension
existing_env_role.deleted = True
cls._update_status(existing_env_role, EnvironmentRole.Status.DISABLED)
db.session.add(existing_env_role)
db.session.commit()
return True
@@ -126,11 +125,3 @@ class EnvironmentRoles(object):
.one_or_none()
)
return existing_env_role
@classmethod
def get_all_for_application_member(cls, application_role_id):
return (
db.session.query(EnvironmentRole)
.filter(EnvironmentRole.application_role_id == application_role_id)
.all()
)

View File

@@ -4,7 +4,14 @@ from typing import List
from uuid import UUID
from atst.database import db
from atst.models import Environment, Application, Portfolio, TaskOrder, CLIN
from atst.models import (
Environment,
Application,
Portfolio,
TaskOrder,
CLIN,
EnvironmentRole,
)
from atst.domain.environment_roles import EnvironmentRoles
from .exceptions import NotFoundError
@@ -53,7 +60,11 @@ class Environments(object):
updated = False
env_role = EnvironmentRoles.get_for_update(application_role.id, environment.id)
if env_role and env_role.role != new_role and not env_role.deleted:
if (
env_role
and env_role.role != new_role
and env_role.status != EnvironmentRole.Status.DISABLED
):
env_role.role = new_role
updated = True
elif not env_role and new_role:
@@ -65,8 +76,8 @@ class Environments(object):
updated = True
if env_role and not new_role:
env_role.role = None
updated = EnvironmentRoles.delete(application_role.id, environment.id)
EnvironmentRoles.disable(env_role.id)
updated = True
if updated:
db.session.add(env_role)

View File

@@ -18,7 +18,7 @@ class EnvironmentForm(Form):
default=NO_ACCESS,
filters=[lambda x: NO_ACCESS if x == "None" else x],
)
deleted = BooleanField("Revoke Access", default=False)
disabled = BooleanField("Revoke Access", default=False)
@property
def data(self):

View File

@@ -1,5 +1,5 @@
from enum import Enum
from sqlalchemy import and_, Index, ForeignKey, Column, Enum as SQLAEnum, Table
from sqlalchemy import Index, ForeignKey, Column, Enum as SQLAEnum, Table
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship
from sqlalchemy.event import listen
@@ -8,7 +8,6 @@ from atst.utils import first_or_none
from atst.models.base import Base
import atst.models.mixins as mixins
import atst.models.types as types
from atst.models.environment_role import EnvironmentRole
from atst.models.mixins.auditable import record_permission_sets_updates
@@ -55,9 +54,7 @@ class ApplicationRole(
environment_roles = relationship(
"EnvironmentRole",
primaryjoin=and_(
EnvironmentRole.application_role_id == id, EnvironmentRole.deleted == False
),
primaryjoin="and_(EnvironmentRole.application_role_id == ApplicationRole.id, EnvironmentRole.deleted == False)",
)
@property

View File

@@ -14,6 +14,7 @@ from atst.forms.application import NameAndDescriptionForm, EditEnvironmentForm
from atst.forms.data import ENV_ROLE_NO_ACCESS as NO_ACCESS
from atst.forms.member import NewForm as MemberForm
from atst.domain.authz.decorator import user_can_access_decorator as user_can
from atst.models.environment_role import EnvironmentRole
from atst.models.permissions import Permissions
from atst.domain.permission_sets import PermissionSets
from atst.utils.flash import formatted_flash as flash
@@ -31,7 +32,14 @@ def get_environments_obj_for_app(application):
"edit_form": EditEnvironmentForm(obj=env),
"member_count": len(env.roles),
"members": sorted(
[env_role.application_role.user_name for env_role in env.roles]
[
{
"user_name": env_role.application_role.user_name,
"status": env_role.status.value,
}
for env_role in env.roles
],
key=lambda env_role: env_role["user_name"],
),
}
for env in application.environments
@@ -77,16 +85,14 @@ def filter_env_roles_form_data(member, environments):
"environment_id": str(env.id),
"environment_name": env.name,
"role": NO_ACCESS,
"deleted": False,
"disabled": False,
}
env_roles_set = set(env.roles).intersection(
set(EnvironmentRoles.get_all_for_application_member(member.id))
)
env_roles_set = set(env.roles).intersection(set(member.environment_roles))
if len(env_roles_set) == 1:
(env_role,) = env_roles_set
env_data["role"] = env_role.role
env_data["deleted"] = env_role.deleted
env_data["disabled"] = env_role.status == EnvironmentRole.Status.DISABLED
env_roles_form_data.append(env_data)
@@ -391,7 +397,7 @@ def update_member(application_id, application_role_id):
for env_role in form.environment_roles:
environment = Environments.get(env_role.environment_id.data)
new_role = None if env_role.deleted.data else env_role.data["role"]
new_role = None if env_role.disabled.data else env_role.data["role"]
Environments.update_env_role(environment, app_role, new_role)
flash("application_member_updated", user_name=app_role.user_name)