diff --git a/atst/domain/portfolio_roles.py b/atst/domain/portfolio_roles.py index e9e88574..8d885455 100644 --- a/atst/domain/portfolio_roles.py +++ b/atst/domain/portfolio_roles.py @@ -80,7 +80,7 @@ class PortfolioRoles(object): raise NotFoundError("portfolio role") @classmethod - def add(cls, user, portfolio_id, role_name): + def add(cls, user, portfolio_id, role_name, permission_sets=None): role = Roles.get(role_name) new_portfolio_role = None @@ -103,12 +103,31 @@ class PortfolioRoles(object): status=PortfolioRoleStatus.PENDING, ) + if permission_sets: + new_portfolio_role.permission_sets = PortfolioRoles._permission_sets_for_names( + permission_sets + ) + user.portfolio_roles.append(new_portfolio_role) db.session.add(user) db.session.commit() return new_portfolio_role + _DEFAULT_PORTFOLIO_PERMS_SETS = { + "view_portfolio_application_management", + "view_portfolio_funding", + "view_portfolio_reports", + "view_portfolio_admin", + } + + @classmethod + def _permission_sets_for_names(cls, set_names): + perms_set_names = PortfolioRoles._DEFAULT_PORTFOLIO_PERMS_SETS.union( + set(set_names) + ) + return [Roles.get(perms_set_name) for perms_set_name in perms_set_names] + @classmethod def update_role(cls, portfolio_role, role_name): new_role = Roles.get(role_name) diff --git a/atst/domain/portfolios/portfolios.py b/atst/domain/portfolios/portfolios.py index 2e5282e2..342e3b74 100644 --- a/atst/domain/portfolios/portfolios.py +++ b/atst/domain/portfolios/portfolios.py @@ -105,11 +105,16 @@ class Portfolios(object): atat_role_name="default", provisional=True, ) - return Portfolios.add_member(portfolio, new_user, data["portfolio_role"]) + permission_sets = data.get("permission_sets", []) + return Portfolios.add_member( + portfolio, new_user, data["portfolio_role"], permission_sets=permission_sets + ) @classmethod - def add_member(cls, portfolio, member, role_name): - portfolio_role = PortfolioRoles.add(member, portfolio.id, role_name) + def add_member(cls, portfolio, member, role_name, permission_sets=None): + portfolio_role = PortfolioRoles.add( + member, portfolio.id, role_name, permission_sets + ) return portfolio_role @classmethod diff --git a/atst/forms/new_member.py b/atst/forms/new_member.py index cdea0c56..88d6ec21 100644 --- a/atst/forms/new_member.py +++ b/atst/forms/new_member.py @@ -32,3 +32,42 @@ class NewMemberForm(BaseForm): default="", description=translate("forms.new_member.portfolio_role_description"), ) + + perms_app_mgmt = SelectField( + None, + choices=[ + ("view_portfolio_application_management", "View Only"), + ("edit_portfolio_application_management", "Edit Access"), + ], + ) + perms_funding = SelectField( + None, + choices=[ + ("view_portfolio_funding", "View Only"), + ("edit_portfolio_funding", "Edit Access"), + ], + ) + perms_reporting = SelectField( + None, + choices=[ + ("view_portfolio_reports", "View Only"), + ("edit_portfolio_reports", "Edit Access"), + ], + ) + perms_portfolio_mgmt = SelectField( + None, + choices=[ + ("view_portfolio_admin", "View Only"), + ("edit_portfolio_admin", "Edit Access"), + ], + ) + + @property + def data(self): + _data = super().data + _data["permission_sets"] = [] + for field in _data: + if "perms" in field: + _data["permission_sets"].append(_data[field]) + + return _data diff --git a/templates/portfolios/members/new.html b/templates/portfolios/members/new.html index 3603bd62..58f8cf67 100644 --- a/templates/portfolios/members/new.html +++ b/templates/portfolios/members/new.html @@ -23,10 +23,33 @@ {{ TextInput(form.email,placeholder='jane@mail.mil', validation='email') }} {{ TextInput(form.dod_id,placeholder='10-digit number on the back of the CAC', validation='dodId') }} {{ Selector(form.portfolio_role) }} +
{{ "portfolios.members.permissions.app_mgmt" | translate }} | +{{ "portfolios.members.permissions.funding" | translate }} | +{{ "portfolios.members.permissions.reporting" | translate }} | +{{ "portfolios.members.permissions.portfolio_mgmt" | translate }} | ++ {{ form.perms_app_mgmt() }} + | ++ {{ form.perms_funding() }} + | ++ {{ form.perms_reporting() }} + | ++ {{ form.perms_portfolio_mgmt() }} + | + +
---|