mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-11-18 23:21:30 +08:00
201 lines
5.7 KiB
Vue
201 lines
5.7 KiB
Vue
<template>
|
|
<div>
|
|
<div v-if="roles.length > 0 && visible && default_role" class="p-2 flex items-center gap-2 border-solid border-0 border-b border-b-sn-sleepy-grey">
|
|
<div>
|
|
<img src="/images/icon/team.png" class="rounded-full w-8 h-8">
|
|
</div>
|
|
<div>
|
|
{{ i18n.t('access_permissions.everyone_else', { team_name: params.object.team }) }}
|
|
</div>
|
|
<i class="sn-icon sn-icon-info"
|
|
:title='this.autoAssignedUsers.map((ua) => ua.attributes.user.name).join("\u000d")'></i>
|
|
<MenuDropdown
|
|
v-if="params.object.top_level_assignable && params.object.urls.update_access"
|
|
class="ml-auto"
|
|
:listItems="rolesFromatted"
|
|
:btnText="this.roles.find((role) => role[0] == default_role)[1]"
|
|
:position="'right'"
|
|
:caret="true"
|
|
@setRole="(...args) => this.changeDefaultRole(...args)"
|
|
@removeRole="() => this.changeDefaultRole()"
|
|
></MenuDropdown>
|
|
<div class="ml-auto btn btn-light pointer-events-none" v-else>
|
|
{{ this.roles.find((role) => role[0] == default_role)[1] }}
|
|
<div class="h-6 w-6"></div>
|
|
</div>
|
|
</div>
|
|
<perfect-scrollbar class="h-[50vh] relative">
|
|
<div v-for="userAssignment in manuallyAssignedUsers"
|
|
:key="userAssignment.id"
|
|
class="p-2 flex items-center gap-2">
|
|
<div>
|
|
<img :src="userAssignment.attributes.user.avatar_url" class="rounded-full w-8 h-8">
|
|
</div>
|
|
<div class="truncate"
|
|
:title="userAssignment.attributes.user.name"
|
|
>{{ userAssignment.attributes.user.name }}</div>
|
|
<div v-if="userAssignment.attributes.current_user" class="text-nowrap">
|
|
{{ `(${i18n.t('access_permissions.you')})` }}
|
|
</div>
|
|
<div class="text-xs text-sn-grey text-nowrap">{{ userAssignment.attributes.inherit_message }}</div>
|
|
<MenuDropdown
|
|
v-if="!userAssignment.attributes.last_owner && params.object.urls.update_access"
|
|
class="ml-auto"
|
|
:listItems="rolesFromatted"
|
|
:btnText="userAssignment.attributes.user_role.name"
|
|
:position="'right'"
|
|
:caret="true"
|
|
@setRole="(...args) => this.changeRole(userAssignment.attributes.user.id, ...args)"
|
|
@removeRole="() => this.removeRole(userAssignment.attributes.user.id)"
|
|
></MenuDropdown>
|
|
<div class="ml-auto btn btn-light pointer-events-none" v-else>
|
|
{{ userAssignment.attributes.user_role.name }}
|
|
<div class="h-6 w-6"></div>
|
|
</div>
|
|
</div>
|
|
</perfect-scrollbar>
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
/* global HelperModule */
|
|
import MenuDropdown from '../menu_dropdown.vue';
|
|
import axios from '../../../packs/custom_axios.js';
|
|
|
|
export default {
|
|
emits: ['modified', 'usersReloaded', 'changeVisibility', 'assigningNewUsers'],
|
|
props: {
|
|
params: {
|
|
type: Object,
|
|
required: true
|
|
},
|
|
visible: {
|
|
type: Boolean
|
|
},
|
|
default_role: {
|
|
type: Number
|
|
},
|
|
reloadUsers: {
|
|
type: Boolean
|
|
}
|
|
},
|
|
mounted() {
|
|
this.getAssignedUsers();
|
|
this.getRoles();
|
|
},
|
|
watch: {
|
|
reloadUsers() {
|
|
if (this.reloadUsers) {
|
|
this.getAssignedUsers();
|
|
}
|
|
}
|
|
},
|
|
components: {
|
|
MenuDropdown
|
|
},
|
|
computed: {
|
|
rolesFromatted() {
|
|
let roles = [];
|
|
|
|
if (!this.params.object.top_level_assignable) {
|
|
roles.push({
|
|
emit: 'setRole',
|
|
text: this.i18n.t('access_permissions.reset'),
|
|
params: 'reset'
|
|
});
|
|
}
|
|
|
|
roles = roles.concat(this.roles.map((role) => (
|
|
{
|
|
emit: 'setRole',
|
|
text: role[1],
|
|
params: role[0]
|
|
}
|
|
)));
|
|
|
|
if (this.params.object.top_level_assignable) {
|
|
roles.push({
|
|
dividerBefore: true,
|
|
emit: 'removeRole',
|
|
text: this.i18n.t('access_permissions.remove_access')
|
|
});
|
|
}
|
|
|
|
return roles;
|
|
},
|
|
manuallyAssignedUsers() {
|
|
return this.assignedUsers.filter((user) => (
|
|
user.attributes.assigned === 'manually'
|
|
));
|
|
},
|
|
autoAssignedUsers() {
|
|
return this.assignedUsers.filter((user) => (
|
|
user.attributes.assigned === 'automatically'
|
|
));
|
|
}
|
|
},
|
|
data() {
|
|
return {
|
|
assignedUsers: [],
|
|
roles: []
|
|
|
|
};
|
|
},
|
|
methods: {
|
|
getAssignedUsers() {
|
|
axios.get(this.params.object.urls.show_access)
|
|
.then((response) => {
|
|
this.assignedUsers = response.data.data;
|
|
this.$emit('usersReloaded');
|
|
});
|
|
},
|
|
getRoles() {
|
|
axios.get(this.params.roles_path)
|
|
.then((response) => {
|
|
this.roles = response.data.data;
|
|
});
|
|
},
|
|
changeRole(id, roleId) {
|
|
axios.put(this.params.object.urls.update_access, {
|
|
user_assignment: {
|
|
user_id: id,
|
|
user_role_id: roleId
|
|
}
|
|
}).then(() => {
|
|
this.$emit('modified');
|
|
this.getAssignedUsers();
|
|
});
|
|
},
|
|
removeRole(id) {
|
|
axios.delete(this.params.object.urls.update_access, {
|
|
data: {
|
|
user_id: id
|
|
}
|
|
}).then((response) => {
|
|
this.$emit('modified');
|
|
HelperModule.flashAlertMsg(response.data.message, 'success');
|
|
this.getAssignedUsers();
|
|
});
|
|
},
|
|
changeDefaultRole(roleId) {
|
|
axios.put(this.params.object.urls.default_public_user_role_path, {
|
|
object: {
|
|
default_public_user_role_id: roleId || ''
|
|
}
|
|
}).then((response) => {
|
|
this.$emit('modified');
|
|
if (!roleId) {
|
|
this.$emit('changeVisibility', false, null);
|
|
} else {
|
|
this.$emit('changeVisibility', true, roleId);
|
|
}
|
|
if (response.data.message) {
|
|
HelperModule.flashAlertMsg(response.data.message, 'success');
|
|
}
|
|
});
|
|
},
|
|
removeDefaultRole() {
|
|
}
|
|
}
|
|
};
|
|
</script>
|