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 @@