Merge pull request #722 from dod-ccpo/render-edit-buttons-pf-users-table

Render Edit Buttons on Portfolio Members Table
This commit is contained in:
dandds
2019-03-26 15:43:39 -04:00
committed by GitHub
11 changed files with 205 additions and 54 deletions

View File

@@ -1,4 +1,4 @@
from wtforms.fields import StringField
from wtforms.fields import StringField, FormField, FieldList
from wtforms.fields.html5 import EmailField
from wtforms.validators import Required, Email, Length
@@ -10,6 +10,7 @@ from atst.utils.localization import translate
class PermissionsForm(BaseForm):
member = StringField()
perms_app_mgmt = SelectField(
None,
choices=[
@@ -50,6 +51,10 @@ class PermissionsForm(BaseForm):
return _data
class MembersPermissionsForm(BaseForm):
members_permissions = FieldList(FormField(PermissionsForm))
class EditForm(PermissionsForm):
# This form also accepts a field for each environment in each application
# that the user is a member of

View File

@@ -8,9 +8,10 @@ from atst.domain.portfolios import Portfolios
from atst.domain.audit_log import AuditLog
from atst.domain.common import Paginator
from atst.forms.portfolio import PortfolioForm
from atst.forms.portfolio_member import MembersPermissionsForm
from atst.models.permissions import Permissions
from atst.domain.permission_sets import PermissionSets
from atst.domain.authz.decorator import user_can_access_decorator as user_can
from atst.models.permissions import Permissions
@portfolios_bp.route("/portfolios")
@@ -23,27 +24,53 @@ def portfolios():
return render_template("portfolios/blank_slate.html")
def serialize_member(member):
def permission_str(member, edit_perm_set, view_perm_set):
if member.has_permission_set(edit_perm_set):
return edit_perm_set
else:
return view_perm_set
def serialize_member_form_data(member):
return {
"member": member,
"app_mgmt": member.has_permission_set(
PermissionSets.EDIT_PORTFOLIO_APPLICATION_MANAGEMENT
"member": member.user.full_name,
"perms_app_mgmt": permission_str(
member,
PermissionSets.EDIT_PORTFOLIO_APPLICATION_MANAGEMENT,
PermissionSets.VIEW_PORTFOLIO_APPLICATION_MANAGEMENT,
),
"funding": member.has_permission_set(PermissionSets.EDIT_PORTFOLIO_FUNDING),
"reporting": member.has_permission_set(PermissionSets.EDIT_PORTFOLIO_REPORTS),
"portfolio_mgmt": member.has_permission_set(
PermissionSets.EDIT_PORTFOLIO_ADMIN
"perms_funding": permission_str(
member,
PermissionSets.EDIT_PORTFOLIO_FUNDING,
PermissionSets.VIEW_PORTFOLIO_FUNDING,
),
"perms_reporting": permission_str(
member,
PermissionSets.EDIT_PORTFOLIO_REPORTS,
PermissionSets.VIEW_PORTFOLIO_REPORTS,
),
"perms_portfolio_mgmt": permission_str(
member,
PermissionSets.EDIT_PORTFOLIO_ADMIN,
PermissionSets.VIEW_PORTFOLIO_ADMIN,
),
}
def render_admin_page(portfolio, form):
def render_admin_page(portfolio, form=None):
pagination_opts = Paginator.get_pagination_opts(http_request)
audit_events = AuditLog.get_portfolio_events(portfolio, pagination_opts)
members_data = [serialize_member(member) for member in portfolio.members]
members_data = [serialize_member_form_data(member) for member in portfolio.members]
portfolio_form = PortfolioForm(data={"name": portfolio.name})
member_perms_form = MembersPermissionsForm(
data={"members_permissions": members_data}
)
return render_template(
"portfolios/admin.html",
form=form,
portfolio_form=portfolio_form,
member_perms_form=member_perms_form,
portfolio=portfolio,
audit_events=audit_events,
user=g.current_user,
@@ -55,8 +82,7 @@ def render_admin_page(portfolio, form):
@user_can(Permissions.VIEW_PORTFOLIO_ADMIN, message="view portfolio admin page")
def portfolio_admin(portfolio_id):
portfolio = Portfolios.get_for_update(portfolio_id)
form = PortfolioForm(data={"name": portfolio.name})
return render_admin_page(portfolio, form)
return render_admin_page(portfolio)
@portfolios_bp.route("/portfolios/<portfolio_id>/edit", methods=["POST"])