Change how env_roles are updated

This change makes it so that when an env_role is updated to be None, the
role property on the env_role is changed to be None in addition to being
marked as deleted. This also adds in a check so that previously deleted
env_roles cannot be reassigned a role.
This commit is contained in:
leigh-mil
2019-10-25 10:40:38 -04:00
parent 3a1a996469
commit d40c11a8f6
4 changed files with 53 additions and 14 deletions

View File

@@ -114,3 +114,15 @@ class EnvironmentRoles(object):
db.session.commit()
return environment_role
@classmethod
def get_for_update(cls, application_role_id, environment_id):
existing_env_role = (
db.session.query(EnvironmentRole)
.filter(
EnvironmentRole.application_role_id == application_role_id,
EnvironmentRole.environment_id == environment_id,
)
.one_or_none()
)
return existing_env_role

View File

@@ -52,22 +52,22 @@ class Environments(object):
def update_env_role(cls, environment, application_role, new_role):
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:
env_role.role = new_role
updated = True
db.session.add(env_role)
elif not env_role:
env_role = EnvironmentRoles.create(
application_role=application_role,
environment=environment,
role=new_role,
)
updated = True
db.session.add(env_role)
if new_role is None:
updated = EnvironmentRoles.delete(application_role.id, environment.id)
else:
env_role = EnvironmentRoles.get(application_role.id, environment.id)
if env_role and env_role.role != new_role:
env_role.role = new_role
updated = True
db.session.add(env_role)
elif not env_role:
env_role = EnvironmentRoles.create(
application_role=application_role,
environment=environment,
role=new_role,
)
updated = True
db.session.add(env_role)
if updated:
db.session.commit()