Allow CCPO to view workspaces
This commit is contained in:
parent
59761800df
commit
e997c5cedd
@ -9,6 +9,10 @@ class Authorization(object):
|
|||||||
workspace_user = WorkspaceUsers.get(workspace.id, user.id)
|
workspace_user = WorkspaceUsers.get(workspace.id, user.id)
|
||||||
return permission in workspace_user.permissions()
|
return permission in workspace_user.permissions()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def has_atat_permission(cls, user, permission):
|
||||||
|
return permission in user.atat_role.permissions
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def is_in_workspace(cls, user, workspace):
|
def is_in_workspace(cls, user, workspace):
|
||||||
return user in workspace.users
|
return user in workspace.users
|
||||||
|
@ -73,6 +73,19 @@ class Workspaces(object):
|
|||||||
)
|
)
|
||||||
return workspaces
|
return workspaces
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def for_user(cls, user):
|
||||||
|
if Authorization.has_atat_permission(user, Permissions.VIEW_WORKSPACE):
|
||||||
|
workspaces = db.session.query(Workspace).all()
|
||||||
|
else:
|
||||||
|
workspaces = (
|
||||||
|
db.session.query(Workspace)
|
||||||
|
.join(WorkspaceRole)
|
||||||
|
.filter(WorkspaceRole.user == user)
|
||||||
|
.all()
|
||||||
|
)
|
||||||
|
return workspaces
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create_member(cls, user, workspace, data):
|
def create_member(cls, user, workspace, data):
|
||||||
Authorization.check_workspace_permission(
|
Authorization.check_workspace_permission(
|
||||||
|
@ -4,6 +4,7 @@ from sqlalchemy.dialects.postgresql import UUID
|
|||||||
|
|
||||||
from atst.models import Base
|
from atst.models import Base
|
||||||
from .types import Id
|
from .types import Id
|
||||||
|
from atst.models.permissions import Permissions
|
||||||
|
|
||||||
|
|
||||||
class User(Base):
|
class User(Base):
|
||||||
@ -28,3 +29,9 @@ class User(Base):
|
|||||||
@property
|
@property
|
||||||
def full_name(self):
|
def full_name(self):
|
||||||
return "{} {}".format(self.first_name, self.last_name)
|
return "{} {}".format(self.first_name, self.last_name)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def has_workspaces(self):
|
||||||
|
return (
|
||||||
|
Permissions.VIEW_WORKSPACE in self.atat_role.permissions
|
||||||
|
) or self.workspace_roles
|
||||||
|
@ -46,7 +46,7 @@ def workspace():
|
|||||||
|
|
||||||
@bp.route("/workspaces")
|
@bp.route("/workspaces")
|
||||||
def workspaces():
|
def workspaces():
|
||||||
workspaces = Workspaces.get_many(g.current_user)
|
workspaces = Workspaces.for_user(g.current_user)
|
||||||
return render_template("workspaces/index.html", page=5, workspaces=workspaces)
|
return render_template("workspaces/index.html", page=5, workspaces=workspaces)
|
||||||
|
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
]
|
]
|
||||||
) }}
|
) }}
|
||||||
|
|
||||||
{% if g.current_user.workspace_roles %}
|
{% if g.current_user.has_workspaces %}
|
||||||
{{ SidenavItem("Workspaces", href="/workspaces", icon="cloud", active=g.matchesPath('/workspaces')) }}
|
{{ SidenavItem("Workspaces", href="/workspaces", icon="cloud", active=g.matchesPath('/workspaces')) }}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -237,3 +237,23 @@ def test_scoped_workspace_returns_all_projects_for_workspace_owner():
|
|||||||
|
|
||||||
assert len(scoped_workspace.projects) == 5
|
assert len(scoped_workspace.projects) == 5
|
||||||
assert len(scoped_workspace.projects[0].environments) == 3
|
assert len(scoped_workspace.projects[0].environments) == 3
|
||||||
|
|
||||||
|
|
||||||
|
def test_for_user_workspace_member():
|
||||||
|
bob = UserFactory.from_atat_role("default")
|
||||||
|
workspace = Workspaces.create(RequestFactory.create())
|
||||||
|
Workspaces.add_member(workspace, bob, "developer")
|
||||||
|
|
||||||
|
Workspaces.create(RequestFactory.create())
|
||||||
|
|
||||||
|
bobs_workspaces = Workspaces.for_user(bob)
|
||||||
|
assert len(bobs_workspaces) == 1
|
||||||
|
|
||||||
|
|
||||||
|
def test_for_user_ccpo():
|
||||||
|
sam = UserFactory.from_atat_role("ccpo")
|
||||||
|
workspace = Workspaces.create(RequestFactory.create())
|
||||||
|
Workspaces.create(RequestFactory.create())
|
||||||
|
|
||||||
|
sams_workspaces = Workspaces.for_user(sam)
|
||||||
|
assert len(sams_workspaces) == 2
|
||||||
|
Loading…
x
Reference in New Issue
Block a user