From 9f1c8b8de249b474aa49d95c4c0a1cd546bbed99 Mon Sep 17 00:00:00 2001 From: Hironsan Date: Wed, 12 Jan 2022 15:36:36 +0900 Subject: [PATCH] Remove currentUserRole from Project item --- frontend/components/layout/TheSideBar.vue | 20 +++++++++---------- frontend/components/project/FormDelete.vue | 19 ------------------ frontend/domain/models/member/member.ts | 4 ++++ frontend/domain/models/project/project.ts | 11 ---------- frontend/layouts/project.vue | 12 ++++++++--- frontend/layouts/workspace.vue | 12 ++++++++--- frontend/middleware/check-admin.js | 5 +++-- frontend/pages/projects/_id/dataset/index.vue | 6 ++++-- .../member/apiMemberRepository.ts | 12 +++++------ .../member/memberApplicationService.ts | 11 +++++++--- .../application/project/projectData.ts | 4 +--- 11 files changed, 54 insertions(+), 62 deletions(-) diff --git a/frontend/components/layout/TheSideBar.vue b/frontend/components/layout/TheSideBar.vue index a504003b..c4a35784 100644 --- a/frontend/components/layout/TheSideBar.vue +++ b/frontend/components/layout/TheSideBar.vue @@ -44,9 +44,9 @@ export default { default: '', required: true }, - role: { - type: Object, - default: () => {}, + isProjectAdmin: { + type: Boolean, + default: false, required: true }, project: { @@ -82,43 +82,43 @@ export default { icon: mdiLabel, text: this.$t('labels.labels'), link: 'labels', - isVisible: this.role.is_project_admin && this.project.canDefineLabel + isVisible: this.isProjectAdmin && this.project.canDefineLabel }, { icon: mdiLabel, text: 'Relations', link: 'links', - isVisible: this.role.is_project_admin && this.project.canDefineRelation + isVisible: this.isProjectAdmin && this.project.canDefineRelation }, { icon: mdiAccount, text: this.$t('members.members'), link: 'members', - isVisible: this.role.is_project_admin + isVisible: this.isProjectAdmin }, { icon: mdiCommentAccountOutline, text: 'Comments', link: 'comments', - isVisible: this.role.is_project_admin + isVisible: this.isProjectAdmin }, { icon: mdiBookOpenOutline, text: this.$t('guideline.guideline'), link: 'guideline', - isVisible: this.role.is_project_admin + isVisible: this.isProjectAdmin }, { icon: mdiChartBar, text: this.$t('statistics.statistics'), link: 'statistics', - isVisible: this.role.is_project_admin + isVisible: this.isProjectAdmin }, { icon: mdiCog, text: this.$t('settings.title'), link: 'settings', - isVisible: this.role.is_project_admin + isVisible: this.isProjectAdmin } ] return items.filter(item => item.isVisible) diff --git a/frontend/components/project/FormDelete.vue b/frontend/components/project/FormDelete.vue index 16048899..4d3c6bfb 100644 --- a/frontend/components/project/FormDelete.vue +++ b/frontend/components/project/FormDelete.vue @@ -15,16 +15,6 @@ - - You don't have permission to delete the following projects. We try to delete the projects except for the following. - - - - - {{ item.name }} - - - @@ -44,15 +34,6 @@ export default Vue.extend({ type: Array as PropType, default: () => [] } - }, - - computed: { - nonDeletableProjects(): ProjectDTO[] { - return this.selected.filter(item => !item.current_users_role.is_project_admin) - }, - hasNonDeletableProjects(): boolean { - return this.nonDeletableProjects.length > 0 - } } }) diff --git a/frontend/domain/models/member/member.ts b/frontend/domain/models/member/member.ts index 7c4b532e..7798a3aa 100644 --- a/frontend/domain/models/member/member.ts +++ b/frontend/domain/models/member/member.ts @@ -14,6 +14,10 @@ export class MemberItem { return new MemberItem(id, user, role, username, rolename) } + get isProjectAdmin(): boolean { + return this.rolename === 'project_admin' + } + toObject(): Object { return { id: this.id, diff --git a/frontend/domain/models/project/project.ts b/frontend/domain/models/project/project.ts index fe73b36f..e0bb3ca0 100644 --- a/frontend/domain/models/project/project.ts +++ b/frontend/domain/models/project/project.ts @@ -1,9 +1,3 @@ -export interface CurrentUsersRole { - is_project_admin: boolean; - is_annotator: boolean; - is_annotation_approver: boolean; -} - export type ProjectType = 'DocumentClassification' | 'SequenceLabeling' | 'Seq2seq' | 'IntentDetectionAndSlotFilling' | 'ImageClassification' | 'Speech2text' @@ -14,7 +8,6 @@ export class ProjectReadItem { public description: string, public guideline: string, public users: number[], - public current_users_role: CurrentUsersRole, public project_type: ProjectType, public updated_at: string, public random_order: boolean, @@ -33,7 +26,6 @@ export class ProjectReadItem { description, guideline, users, - current_users_role, project_type, updated_at, random_order, @@ -50,7 +42,6 @@ export class ProjectReadItem { description: string, guideline: string, users: number[], - current_users_role: CurrentUsersRole, project_type: ProjectType, updated_at: string, random_order: boolean, @@ -68,7 +59,6 @@ export class ProjectReadItem { description, guideline, users, - current_users_role, project_type, updated_at, random_order, @@ -145,7 +135,6 @@ export class ProjectReadItem { description: this.description, guideline: this.guideline, users: this.users, - current_users_role: this.current_users_role, project_type: this.project_type, updated_at: this.updated_at, random_order: this.random_order, diff --git a/frontend/layouts/project.vue b/frontend/layouts/project.vue index 58719cac..f560c1cd 100644 --- a/frontend/layouts/project.vue +++ b/frontend/layouts/project.vue @@ -14,7 +14,7 @@ > @@ -51,12 +51,18 @@ export default { data() { return { - drawerLeft: null + drawerLeft: null, + isProjectAdmin: false, } }, computed: { - ...mapGetters('projects', ['getLink', 'getCurrentUserRole', 'currentProject']) + ...mapGetters('projects', ['getLink', 'currentProject']), + ...mapGetters('auth', ['getUserId']) + }, + + async created() { + this.isProjectAdmin = await this.$services.member.isProjectAdmin(this.$route.params.id, this.getUserId) } } diff --git a/frontend/layouts/workspace.vue b/frontend/layouts/workspace.vue index a2a47784..6b4b7865 100644 --- a/frontend/layouts/workspace.vue +++ b/frontend/layouts/workspace.vue @@ -13,7 +13,7 @@ > @@ -39,18 +39,24 @@ export default { data() { return { - drawerLeft: null + drawerLeft: null, + isProjectAdmin: false } }, computed: { - ...mapGetters('projects', ['getLink', 'getCurrentUserRole', 'currentProject']) + ...mapGetters('projects', ['getLink', 'currentProject']), + ...mapGetters('auth', ['getUserId']) }, watch: { '$route.query'() { this.$services.option.save(this.$route.params.id, this.$route.query) } + }, + + async created() { + this.isProjectAdmin = await this.$services.member.isProjectAdmin(this.$route.params.id, this.getUserId) } } diff --git a/frontend/middleware/check-admin.js b/frontend/middleware/check-admin.js index 66f7e642..52f04fea 100644 --- a/frontend/middleware/check-admin.js +++ b/frontend/middleware/check-admin.js @@ -6,11 +6,12 @@ export default _.debounce(async function({ app, store, route, redirect }) { } catch(e) { redirect('/projects') } - const role = store.getters['projects/getCurrentUserRole'] + const userId = store.getters['auth/getUserId'] + const isProjectAdmin = await app.$services.member.isProjectAdmin(route.params.id, userId) const projectRoot = app.localePath('/projects/' + route.params.id) const path = route.fullPath.replace(/\/$/g, '') - if (role.is_project_admin || path === projectRoot || path.startsWith(projectRoot + '/dataset')) { + if (isProjectAdmin || path === projectRoot || path.startsWith(projectRoot + '/dataset')) { return } diff --git a/frontend/pages/projects/_id/dataset/index.vue b/frontend/pages/projects/_id/dataset/index.vue index 9a894e97..11650dad 100644 --- a/frontend/pages/projects/_id/dataset/index.vue +++ b/frontend/pages/projects/_id/dataset/index.vue @@ -74,6 +74,7 @@