mirror of
https://gitlab.com/bramw/baserow.git
synced 2024-11-25 00:46:46 +00:00
112 lines
2.8 KiB
Vue
112 lines
2.8 KiB
Vue
<template>
|
|
<div class="members-role-field">
|
|
<span
|
|
v-if="
|
|
userId === row.user_id ||
|
|
!$hasPermission(
|
|
'workspace_user.update',
|
|
row,
|
|
column.additionalProps.workspaceId
|
|
)
|
|
"
|
|
>
|
|
{{ roleName(roles, row) }}
|
|
</span>
|
|
<a
|
|
v-else
|
|
ref="editRoleContextLink"
|
|
@click="$refs.editRoleContext.toggle($refs.editRoleContextLink)"
|
|
>
|
|
{{ roleName(roles, row) }}
|
|
<i class="iconoir-nav-arrow-down"></i>
|
|
</a>
|
|
<EditRoleContext
|
|
ref="editRoleContext"
|
|
:subject="row"
|
|
:roles="roles"
|
|
:workspace="workspace"
|
|
role-value-column="role_uid"
|
|
@update-role="roleUpdate($event)"
|
|
></EditRoleContext>
|
|
<HelpIcon
|
|
v-if="roleUidSelected === 'NO_ACCESS'"
|
|
:tooltip="$t('membersRoleField.noAccessHelpText')"
|
|
/>
|
|
<HelpIcon
|
|
v-if="roleUidSelected === 'ADMIN'"
|
|
:tooltip="$t('membersRoleField.adminHelpText')"
|
|
icon="warning-triangle"
|
|
/>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import { mapGetters } from 'vuex'
|
|
import { clone } from '@baserow/modules/core/utils/object'
|
|
import RoleAssignmentsService from '@baserow_enterprise/services/roleAssignments'
|
|
import EditRoleContext from '@baserow/modules/core/components/settings/members/EditRoleContext'
|
|
import { filterRoles } from '@baserow_enterprise/utils/roles'
|
|
import { notifyIf } from '@baserow/modules/core/utils/error'
|
|
|
|
export default {
|
|
name: 'MembersRoleField',
|
|
components: { EditRoleContext },
|
|
props: {
|
|
row: {
|
|
type: Object,
|
|
required: true,
|
|
},
|
|
column: {
|
|
type: Object,
|
|
required: true,
|
|
},
|
|
},
|
|
computed: {
|
|
workspace() {
|
|
return this.$store.getters['workspace/get'](
|
|
this.column.additionalProps.workspaceId
|
|
)
|
|
},
|
|
roles() {
|
|
return this.workspace
|
|
? filterRoles(this.workspace._.roles, {
|
|
scopeType: 'workspace',
|
|
subjectType: 'auth.User',
|
|
})
|
|
: []
|
|
},
|
|
roleUidSelected() {
|
|
return this.row[this.column.key]
|
|
},
|
|
...mapGetters({ userId: 'auth/getUserId' }),
|
|
},
|
|
methods: {
|
|
roleName(roles, row) {
|
|
const role = roles.find((r) => r.uid === row.role_uid)
|
|
return role?.name || ''
|
|
},
|
|
async roleUpdate({ uid: permissionsNew, subject: member }) {
|
|
const oldMember = clone(member)
|
|
const newMember = clone(member)
|
|
newMember.role_uid = permissionsNew
|
|
this.$emit('row-update', newMember)
|
|
|
|
try {
|
|
await RoleAssignmentsService(this.$client).assignRole(
|
|
newMember.user_id,
|
|
'auth.User',
|
|
this.column.additionalProps.workspaceId,
|
|
this.column.additionalProps.workspaceId,
|
|
'workspace',
|
|
permissionsNew
|
|
)
|
|
this.$emit('refresh')
|
|
} catch (error) {
|
|
this.$emit('row-update', oldMember)
|
|
notifyIf(error)
|
|
}
|
|
},
|
|
},
|
|
}
|
|
</script>
|