diff --git a/atst/models/portfolio_role.py b/atst/models/portfolio_role.py index 57e39c5b..3be7c8f2 100644 --- a/atst/models/portfolio_role.py +++ b/atst/models/portfolio_role.py @@ -58,6 +58,12 @@ class PortfolioRole(Base, mixins.TimestampsMixin, mixins.AuditableMixin): permission_sets = relationship("Role", secondary=portfolio_roles_roles) + @property + def permissions(self): + return [ + perm for permset in self.permission_sets for perm in permset.permissions + ] + def __repr__(self): return "".format( self.role.name, self.portfolio.name, self.user_id, self.id diff --git a/tests/models/test_portfolio_role.py b/tests/models/test_portfolio_role.py index 06db96e3..25fec901 100644 --- a/tests/models/test_portfolio_role.py +++ b/tests/models/test_portfolio_role.py @@ -3,6 +3,7 @@ import datetime from atst.domain.environments import Environments from atst.domain.portfolios import Portfolios from atst.domain.applications import Applications +from atst.domain.roles import Roles from atst.models.portfolio_role import Status from atst.models.role import Role from atst.models.invitation import Status as InvitationStatus @@ -298,3 +299,11 @@ def test_can_list_all_environments(): ) assert len(portfolio.all_environments) == 9 + + +def test_can_list_all_permissions(): + role_one = Roles.get("view_portfolio_funding") + role_two = Roles.get("view_portfolio_reports") + port_role = PortfolioRoleFactory.create(permission_sets=[role_one, role_two]) + expected_perms = role_one.permissions + role_two.permissions + assert expected_perms == expected_perms