diff --git a/src/app/features/project/overview/components/linked-resources/linked-resources.component.html b/src/app/features/project/overview/components/linked-resources/linked-resources.component.html index 911a45961..2de912f24 100644 --- a/src/app/features/project/overview/components/linked-resources/linked-resources.component.html +++ b/src/app/features/project/overview/components/linked-resources/linked-resources.component.html @@ -1,7 +1,7 @@

{{ 'project.overview.linkedProjects.title' | translate }}

- @if (!isCollectionsRoute()) { + @if (!isCollectionsRoute() && canWrite()) { (false); + canWrite = input.required(); protected linkedResources = select(NodeLinksSelectors.getLinkedResources); protected isLinkedResourcesLoading = select(NodeLinksSelectors.getLinkedResourcesLoading); protected isMobile = toSignal(inject(IS_XSMALL)); diff --git a/src/app/features/project/overview/components/overview-components/overview-components.component.html b/src/app/features/project/overview/components/overview-components/overview-components.component.html index 7fe4507b5..98df67e05 100644 --- a/src/app/features/project/overview/components/overview-components/overview-components.component.html +++ b/src/app/features/project/overview/components/overview-components/overview-components.component.html @@ -2,7 +2,7 @@

{{ 'project.overview.components.title' | translate }}

- @if (!isCollectionsRoute()) { + @if (!isCollectionsRoute() && canWrite()) { {{ component.title }}
- - + @if (component.currentUserPermissions.includes(UserPermissions.Write)) { + + + } diff --git a/src/app/features/project/overview/components/overview-components/overview-components.component.ts b/src/app/features/project/overview/components/overview-components/overview-components.component.ts index ed37ad138..b708fa3e2 100644 --- a/src/app/features/project/overview/components/overview-components/overview-components.component.ts +++ b/src/app/features/project/overview/components/overview-components/overview-components.component.ts @@ -13,6 +13,7 @@ import { toSignal } from '@angular/core/rxjs-interop'; import { Router } from '@angular/router'; import { TruncatedTextComponent } from '@osf/shared/components'; +import { UserPermissions } from '@osf/shared/enums'; import { IS_XSMALL } from '@osf/shared/utils'; import { ProjectOverviewSelectors } from '../../store'; @@ -32,6 +33,7 @@ export class OverviewComponentsComponent { private translateService = inject(TranslateService); protected isMobile = toSignal(inject(IS_XSMALL)); isCollectionsRoute = input(false); + canWrite = input.required(); protected components = select(ProjectOverviewSelectors.getComponents); protected isComponentsLoading = select(ProjectOverviewSelectors.getComponentsLoading); protected readonly componentActionItems = (componentId: string) => [ @@ -48,6 +50,7 @@ export class OverviewComponentsComponent { command: () => this.handleDeleteComponent(componentId), }, ]; + readonly UserPermissions = UserPermissions; handleAddComponent(): void { const dialogWidth = this.isMobile() ? '95vw' : '850px'; diff --git a/src/app/features/project/overview/components/overview-toolbar/overview-toolbar.component.html b/src/app/features/project/overview/components/overview-toolbar/overview-toolbar.component.html index 2bc904cf5..501f74bfa 100644 --- a/src/app/features/project/overview/components/overview-toolbar/overview-toolbar.component.html +++ b/src/app/features/project/overview/components/overview-toolbar/overview-toolbar.component.html @@ -2,7 +2,7 @@ @if (resource) {
- @if (visibilityToggle() && !isCollectionsRoute()) { + @if (visibilityToggle() && !isCollectionsRoute() && isAdmin()) {
@@ -41,7 +41,7 @@ }
- @if (showViewOnlyLinks()) { + @if (showViewOnlyLinks() && isAdmin()) { (false); protected isPublic = signal(false); protected isBookmarked = signal(false); - + isAdmin = input.required(); currentResource = input.required(); visibilityToggle = input(true); showViewOnlyLinks = input(true); diff --git a/src/app/features/project/overview/models/project-overview.models.ts b/src/app/features/project/overview/models/project-overview.models.ts index ff776be0f..d77576974 100644 --- a/src/app/features/project/overview/models/project-overview.models.ts +++ b/src/app/features/project/overview/models/project-overview.models.ts @@ -1,4 +1,5 @@ import { JsonApiResponse } from '@osf/core/models'; +import { UserPermissions } from '@osf/shared/enums'; import { License } from '@shared/models'; export interface ProjectOverviewContributor { @@ -42,7 +43,7 @@ export interface ProjectOverview { supplements?: ProjectSupplements[]; analyticsKey: string; currentUserCanComment: boolean; - currentUserPermissions: string[]; + currentUserPermissions: UserPermissions[]; currentUserIsContributor: boolean; currentUserIsContributorOrGroupMember: boolean; wikiEnabled: boolean; diff --git a/src/app/features/project/overview/project-overview.component.html b/src/app/features/project/overview/project-overview.component.html index f83db97e8..70c136e04 100644 --- a/src/app/features/project/overview/project-overview.component.html +++ b/src/app/features/project/overview/project-overview.component.html @@ -13,7 +13,11 @@
- +
@@ -54,9 +58,12 @@ }
- - - + @if (isAdmin || canWrite) { + + } + + +
@@ -65,6 +72,7 @@ [currentResource]="resourceOverview()" (customCitationUpdated)="onCustomCitationUpdated($event)" [isCollectionsRoute]="isCollectionsRoute()" + [canWrite]="canWrite" />
diff --git a/src/app/features/project/overview/project-overview.component.ts b/src/app/features/project/overview/project-overview.component.ts index 78aa5c925..ab91fd96a 100644 --- a/src/app/features/project/overview/project-overview.component.ts +++ b/src/app/features/project/overview/project-overview.component.ts @@ -29,7 +29,7 @@ import { ResourceMetadataComponent, SubHeaderComponent, } from '@shared/components'; -import { Mode, ResourceType } from '@shared/enums'; +import { Mode, ResourceType, UserPermissions } from '@shared/enums'; import { MapProjectOverview } from '@shared/mappers/resource-overview.mappers'; import { ToastService } from '@shared/services'; import { @@ -141,6 +141,18 @@ export class ProjectOverviewComponent implements OnInit { }); protected currentProject = select(ProjectOverviewSelectors.getProject); + protected userPermissions = computed(() => { + return this.currentProject()?.currentUserPermissions || []; + }); + + get isAdmin(): boolean { + return this.userPermissions().includes(UserPermissions.Admin); + } + + get canWrite(): boolean { + return this.userPermissions().includes(UserPermissions.Write); + } + protected resourceOverview = computed(() => { const project = this.currentProject(); if (project) { diff --git a/src/app/features/registry/pages/registry-overview/registry-overview.component.html b/src/app/features/registry/pages/registry-overview/registry-overview.component.html index 96f7a70c6..9ef77ac50 100644 --- a/src/app/features/registry/pages/registry-overview/registry-overview.component.html +++ b/src/app/features/registry/pages/registry-overview/registry-overview.component.html @@ -9,6 +9,7 @@ [currentResource]="toolbarResource()" [visibilityToggle]="false" [showViewOnlyLinks]="false" + [isAdmin]="true" />
} @@ -71,6 +72,7 @@

{{ block.value }}

diff --git a/src/app/shared/components/resource-metadata/resource-metadata.component.html b/src/app/shared/components/resource-metadata/resource-metadata.component.html index e85cf021b..de8675640 100644 --- a/src/app/shared/components/resource-metadata/resource-metadata.component.html +++ b/src/app/shared/components/resource-metadata/resource-metadata.component.html @@ -5,7 +5,7 @@