Update workspace role in the DB, add tests

This commit is contained in:
Montana
2018-08-31 16:45:19 -04:00
parent b379972446
commit 8faed87e00
4 changed files with 72 additions and 0 deletions

View File

@@ -30,6 +30,21 @@ class WorkspaceUsers(object):
return WorkspaceUser(user, workspace_role)
@classmethod
def _get_workspace_role(cls, user, workspace_id):
try:
existing_workspace_role = (
db.session.query(WorkspaceRole)
.filter(
WorkspaceRole.user == user,
WorkspaceRole.workspace_id == workspace_id,
)
.one()
)
return existing_workspace_role
except NoResultFound:
raise NotFoundError("workspace role")
@classmethod
def add(cls, user, workspace_id, role_name):
role = Roles.get(role_name)
@@ -57,6 +72,16 @@ class WorkspaceUsers(object):
return WorkspaceUser(user, new_workspace_role)
@classmethod
def update_role(cls, member, workspace_id, role_name):
new_role = Roles.get(role_name)
workspace_role = WorkspaceUsers._get_workspace_role(member.user, workspace_id)
workspace_role.role = new_role
db.session.add(workspace_role)
db.session.commit()
return WorkspaceUser(member.user, workspace_role)
@classmethod
def add_many(cls, workspace_id, workspace_user_dicts):
workspace_users = []

View File

@@ -81,6 +81,15 @@ class Workspaces(object):
)
return workspace_user
@classmethod
def update_member(cls, user, workspace, member, role_name):
if not Authorization.has_workspace_permission(
user, workspace, Permissions.ASSIGN_AND_UNASSIGN_ATAT_ROLE
):
raise UnauthorizedError(user, "update workspace member")
return WorkspaceUsers.update_role(member, workspace.id, role_name)
@classmethod
def _create_workspace_role(cls, user, workspace, role_name):
role = Roles.get(role_name)

View File

@@ -149,6 +149,9 @@ def update_member(workspace_id, member_id):
form = UpdateMemberForm(http_request.form)
if form.validate():
Workspaces.update_member(
g.current_user, workspace, member, form.data["workspace_role"]
)
return redirect(
url_for("workspaces.workspace_members", workspace_id=workspace.id)
)