Update workspace role in the DB, add tests
This commit is contained in:
@@ -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 = []
|
||||
|
@@ -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)
|
||||
|
@@ -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)
|
||||
)
|
||||
|
Reference in New Issue
Block a user