Skip to content

Commit 9bd9981

Browse files
authored
fix(permissions): fixed permissions bug (#495)
1 parent 225e25a commit 9bd9981

File tree

7 files changed

+39
-12
lines changed

7 files changed

+39
-12
lines changed

src/app/core/components/nav-menu/nav-menu.component.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ export class NavMenuComponent {
6565
isCollections: this.isCollectionsRoute() || false,
6666
currentUrl: this.router.url,
6767
isViewOnly: !!getViewOnlyParam(this.router),
68+
permissions: this.currentResource()?.permissions,
6869
};
6970

7071
const items = updateMenuItems(filtered, routeContext);

src/app/core/helpers/nav-menu.helper.ts

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -94,14 +94,21 @@ function updateProjectMenuItem(item: MenuItem, ctx: RouteContext): MenuItem {
9494
}
9595

9696
menuItems = menuItems.map((menuItem) => {
97-
if (menuItem.id !== 'project-wiki') {
98-
return menuItem;
97+
if (menuItem.id === 'project-wiki') {
98+
return {
99+
...menuItem,
100+
visible: ctx.wikiPageVisible,
101+
};
99102
}
100103

101-
return {
102-
...menuItem,
103-
visible: ctx.wikiPageVisible,
104-
};
104+
if (menuItem.id === 'project-contributors' || menuItem.id === 'project-settings') {
105+
return {
106+
...menuItem,
107+
visible: !!ctx.permissions?.length,
108+
};
109+
}
110+
111+
return menuItem;
105112
});
106113

107114
return {
@@ -139,11 +146,20 @@ function updateRegistryMenuItem(item: MenuItem, ctx: RouteContext): MenuItem {
139146
...subItem,
140147
visible: true,
141148
expanded: true,
142-
items: menuItems.map((menuItem) => ({
143-
...menuItem,
144-
routerLink: [ctx.resourceId as string, menuItem.routerLink],
145-
queryParams: ctx.isViewOnly ? { view_only: getViewOnlyParamFromUrl(ctx.currentUrl) } : undefined,
146-
})),
149+
items: menuItems.map((menuItem) => {
150+
if (menuItem.id === 'registration-contributors') {
151+
return {
152+
...menuItem,
153+
visible: !!ctx.permissions?.length,
154+
};
155+
}
156+
157+
return {
158+
...menuItem,
159+
routerLink: [ctx.resourceId as string, menuItem.routerLink],
160+
queryParams: ctx.isViewOnly ? { view_only: getViewOnlyParamFromUrl(ctx.currentUrl) } : undefined,
161+
};
162+
}),
147163
};
148164
}
149165
return { ...subItem, visible: false, expanded: false };

src/app/core/models/route-context.model.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { UserPermissions } from '@osf/shared/enums';
2+
13
export interface RouteContext {
24
resourceId: string | undefined;
35
providerId?: string;
@@ -11,4 +13,5 @@ export interface RouteContext {
1113
isCollections: boolean;
1214
currentUrl?: string;
1315
isViewOnly?: boolean;
16+
permissions?: UserPermissions[];
1417
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1+
import { UserPermissions } from '../enums';
2+
13
export interface CurrentResource {
24
id: string;
35
type: string;
46
parentId?: string;
57
parentType?: string;
68
wikiEnabled?: boolean;
9+
permissions: UserPermissions[];
710
}

src/app/shared/models/guid-response-json-api.model.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { UserPermissions } from '../enums';
2+
13
import { JsonApiResponse } from './common';
24

35
export type GuidedResponseJsonApi = JsonApiResponse<GuidDataJsonApi, null>;
@@ -8,6 +10,7 @@ interface GuidDataJsonApi {
810
attributes: {
911
guid: string;
1012
wiki_enabled: boolean;
13+
permissions: UserPermissions[];
1114
};
1215
relationships: {
1316
target?: {

src/app/shared/services/resource.service.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ export class ResourceGuidService {
5656
? res.data.relationships.provider?.data.type
5757
: res.data.relationships.target?.data.type,
5858
wikiEnabled: res.data.attributes.wiki_enabled,
59+
permissions: res.data.attributes.permissions,
5960
}) as CurrentResource
6061
),
6162
finalize(() => this.loaderService.hide())

src/app/shared/stores/current-resource/current-resource.state.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export class CurrentResourceState {
1919
private resourceService = inject(ResourceGuidService);
2020

2121
@Action(GetResource)
22-
getResourceType(ctx: StateContext<CurrentResourceStateModel>, action: GetResource) {
22+
getResource(ctx: StateContext<CurrentResourceStateModel>, action: GetResource) {
2323
const state = ctx.getState();
2424

2525
if (state.currentResource.data?.id === action.resourceId && !action.refresh) {

0 commit comments

Comments
 (0)