WIP: use team form for application team page

This commit is contained in:
dandds
2019-05-01 15:30:42 -04:00
committed by Montana
parent 926f89d975
commit 0da0f6a0ae
8 changed files with 134 additions and 61 deletions

View File

@@ -1,7 +1,7 @@
from flask import current_app as app
from atst.database import db
from atst.models import EnvironmentRole
from atst.models import EnvironmentRole, Application, Environment
class EnvironmentRoles(object):
@@ -35,3 +35,15 @@ class EnvironmentRoles(object):
return True
else:
return False
@classmethod
def get_for_application_and_user(cls, user_id, application_id):
return (
db.session.query(EnvironmentRole)
.join(Environment)
.join(Application, Environment.application_id == Application.id)
.filter(EnvironmentRole.user_id == user_id)
.filter(Application.id == application_id)
.filter(EnvironmentRole.environment_id == Environment.id)
.all()
)

View File

@@ -1,5 +1,5 @@
from flask_wtf import FlaskForm
from wtforms.fields import FormField, FieldList, HiddenField
from wtforms.fields import FormField, FieldList, HiddenField, StringField
from .application_member import EnvironmentForm
from .forms import BaseForm
@@ -43,6 +43,7 @@ class PermissionsForm(FlaskForm):
class MemberForm(FlaskForm):
user_id = HiddenField()
user_name = StringField()
environment_roles = FieldList(FormField(EnvironmentForm))
permission_sets = FormField(PermissionsForm)

View File

@@ -28,6 +28,7 @@ class Application(
back_populates="application",
primaryjoin="and_(Environment.application_id==Application.id, Environment.deleted==False)",
)
# TODO: filter condition on this relationship?
roles = relationship("ApplicationRole")
@property

View File

@@ -2,12 +2,14 @@ from flask import render_template, request as http_request, g, url_for, redirect
from . import applications_bp
from atst.domain.environments import Environments
from atst.domain.applications import Applications
from atst.domain.environments import Environments
from atst.domain.environment_roles import EnvironmentRoles
from atst.domain.authz.decorator import user_can_access_decorator as user_can
from atst.domain.permission_sets import PermissionSets
from atst.domain.exceptions import AlreadyExistsError
from atst.forms.application_member import NewForm as NewMemberForm
from atst.forms.team import TeamForm
from atst.models import Permissions
from atst.services.invitation import Invitation as InvitationService
from atst.utils.flash import formatted_flash as flash
@@ -27,8 +29,10 @@ def team(application_id):
application = Applications.get(resource_id=application_id)
environment_users = {}
team_data = []
for member in application.members:
user_id = member.user.id
user_name = member.user.full_name
environment_users[user_id] = {
"permissions": {
"delete_access": permission_str(
@@ -45,18 +49,51 @@ def team(application_id):
user=member.user, application=application
),
}
permission_sets = {
"perms_env_mgmt": PermissionSets.EDIT_APPLICATION_ENVIRONMENTS
if member.has_permission_set(PermissionSets.EDIT_APPLICATION_ENVIRONMENTS)
else "",
"perms_team_mgmt": PermissionSets.EDIT_APPLICATION_TEAM
if member.has_permission_set(PermissionSets.EDIT_APPLICATION_TEAM)
else "",
"perms_del_env": PermissionSets.DELETE_APPLICATION_ENVIRONMENTS
if member.has_permission_set(PermissionSets.DELETE_APPLICATION_ENVIRONMENTS)
else "",
}
roles = EnvironmentRoles.get_for_application_and_user(
member.user.id, application.id
)
environment_roles = [
{
"environment_id": str(role.environment.id),
"environment_name": role.environment.name,
"role": role.role,
}
for role in roles
]
team_data.append(
{
"user_id": str(user_id),
"user_name": user_name,
"permission_sets": permission_sets,
"environment_roles": environment_roles,
}
)
team_form = TeamForm(data={"members": team_data})
env_roles = [
{"environment_id": e.id, "environment_name": e.name}
for e in application.environments
]
member_form = NewMemberForm(data={"environment_roles": env_roles})
new_member_form = NewMemberForm(data={"environment_roles": env_roles})
return render_template(
"portfolios/applications/team.html",
application=application,
environment_users=environment_users,
member_form=member_form,
team_form=team_form,
new_member_form=new_member_form,
)