[ACS-6002] Add permissions displaying Site Permissions outside of Sites (#8952)

* [ACS-6002] added additional check for site

* [ACS-6002] changed type

* [ACS-6002] rebase
This commit is contained in:
Mykyta Maliarchuk
2023-10-05 10:40:47 +02:00
committed by GitHub
parent 441d8003af
commit 93fe29503a
3 changed files with 112 additions and 19 deletions

View File

@@ -258,6 +258,83 @@ export const fakeReadOnlyNodeInherited = {
} }
}; };
export const fakeNodeWithoutSite: any = {
aspectNames: [
'cm:auditable',
'cm:taggable',
'cm:author',
'cm:titled',
'app:uifacets'
],
createdAt: '2017-11-16T16:29:38.638+0000',
path: {
name: '/Company Home/User Homes/user/documentLibrary',
isComplete: true,
elements: [
{
id: '2be275a1-b00d-4e45-83d8-66af43ac2252',
name: 'Company Home',
nodeType: 'cm:folder'
},
{
id: '1be10a97-6eb9-4b60-b6c6-1673900e9631',
name: 'User Homes',
nodeType: 'cm:folder'
},
{
id: 'e002c740-b8f9-482a-a554-8fff4e4c9dc0',
name: 'user',
nodeType: 'cm:folder'
},
{
id: '71626fae-0c04-4d0c-a129-20fa4c178716',
name: 'documentLibrary',
nodeType: 'cm:folder'
}
]
},
isFolder: true,
isFile: false,
createdByUser: {
id: 'System',
displayName: 'System'
},
modifiedAt: '2018-03-21T03:17:58.783+0000',
permissions: {
locallySet: [
{
authorityId: 'GROUP_EVERYONE',
name: 'Contributor',
accessStatus: 'ALLOWED'
}
],
settable: [
'Contributor',
'Collaborator',
'Coordinator',
'Editor',
'Consumer'
],
isInheritanceEnabled: false
},
modifiedByUser: {
id: 'admin',
displayName: 'PedroH Hernandez'
},
name: 'test',
id: 'f472543f-7218-403d-917b-7a5861257244',
nodeType: 'cm:folder',
properties: {
'cm:title': 'test',
'cm:author': 'yagud',
'cm:taggable': [
'e8c8fbba-03ba-4fa6-86b1-f7ad7c296409'
],
'cm:description': 'sleepery',
'app:icon': 'space-icon-default'
}
};
export const fakeNodeWithOnlyLocally: any = { export const fakeNodeWithOnlyLocally: any = {
aspectNames: [ aspectNames: [
'cm:auditable', 'cm:auditable',
@@ -273,19 +350,23 @@ export const fakeNodeWithOnlyLocally: any = {
elements: [ elements: [
{ {
id: '2be275a1-b00d-4e45-83d8-66af43ac2252', id: '2be275a1-b00d-4e45-83d8-66af43ac2252',
name: 'Company Home' name: 'Company Home',
nodeType: 'cm:folder'
}, },
{ {
id: '1be10a97-6eb9-4b60-b6c6-1673900e9631', id: '1be10a97-6eb9-4b60-b6c6-1673900e9631',
name: 'Sites' name: 'Sites',
nodeType: 'st:sites'
}, },
{ {
id: 'e002c740-b8f9-482a-a554-8fff4e4c9dc0', id: 'e002c740-b8f9-482a-a554-8fff4e4c9dc0',
name: 'testsite' name: 'testsite',
nodeType: 'st:site'
}, },
{ {
id: '71626fae-0c04-4d0c-a129-20fa4c178716', id: '71626fae-0c04-4d0c-a129-20fa4c178716',
name: 'documentLibrary' name: 'documentLibrary',
nodeType: 'cm:folder'
} }
] ]
}, },

View File

@@ -20,8 +20,10 @@ import { NodePermissionService } from './node-permission.service';
import { SearchService } from '../../search/services/search.service'; import { SearchService } from '../../search/services/search.service';
import { Node, PermissionElement } from '@alfresco/js-api'; import { Node, PermissionElement } from '@alfresco/js-api';
import { of, throwError } from 'rxjs'; import { of, throwError } from 'rxjs';
import { fakeEmptyResponse, fakeNodeWithOnlyLocally, fakeSiteRoles, fakeSiteNodeResponse, import {
fakeNodeToRemovePermission, fakeNodeWithoutPermissions } from '../../mock/permission-list.component.mock'; fakeNodeWithOnlyLocally, fakeSiteRoles, fakeSiteNodeResponse,
fakeNodeToRemovePermission, fakeNodeWithoutPermissions, fakeNodeWithoutSite
} from '../../mock/permission-list.component.mock';
import { fakeAuthorityResults } from '../../mock/add-permission.component.mock'; import { fakeAuthorityResults } from '../../mock/add-permission.component.mock';
import { ContentTestingModule } from '../../testing/content.testing.module'; import { ContentTestingModule } from '../../testing/content.testing.module';
import { TranslateModule } from '@ngx-translate/core'; import { TranslateModule } from '@ngx-translate/core';
@@ -79,10 +81,11 @@ describe('NodePermissionService', () => {
}); });
}); });
it('should return a list of settable if node has no site', (done) => { it('should not call search api and return a list of settable if node has no site', (done) => {
spyOn(searchApiService, 'searchByQueryBody').and.returnValue(of(fakeEmptyResponse)); spyOn(searchApiService, 'searchByQueryBody');
service.getNodeRoles(fakeNodeWithOnlyLocally).subscribe((roleArray: string[]) => { service.getNodeRoles(fakeNodeWithoutSite).subscribe((roleArray: string[]) => {
expect(searchApiService.searchByQueryBody).not.toHaveBeenCalled();
expect(roleArray).not.toBeNull(); expect(roleArray).not.toBeNull();
expect(roleArray.length).toBe(5); expect(roleArray.length).toBe(5);
expect(roleArray[0]).toBe('Contributor'); expect(roleArray[0]).toBe('Contributor');

View File

@@ -18,7 +18,17 @@
import { AlfrescoApiService, TranslationService } from '@alfresco/adf-core'; import { AlfrescoApiService, TranslationService } from '@alfresco/adf-core';
import { NodesApiService } from '../../common/services/nodes-api.service'; import { NodesApiService } from '../../common/services/nodes-api.service';
import { EcmUserModel } from '../../common/models/ecm-user.model'; import { EcmUserModel } from '../../common/models/ecm-user.model';
import { Group, GroupMemberEntry, GroupMemberPaging, GroupsApi, Node, PathElement, PermissionElement, SearchRequest } from '@alfresco/js-api'; import {
Group,
GroupMemberEntry,
GroupMemberPaging,
GroupsApi,
Node,
PathElement,
PermissionElement,
ResultSetPaging,
SearchRequest
} from '@alfresco/js-api';
import { SearchService } from '../../search/services/search.service'; import { SearchService } from '../../search/services/search.service';
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { forkJoin, from, Observable, of, throwError } from 'rxjs'; import { forkJoin, from, Observable, of, throwError } from 'rxjs';
@@ -50,17 +60,16 @@ export class NodePermissionService {
* @returns Array of strings representing the roles * @returns Array of strings representing the roles
*/ */
getNodeRoles(node: Node): Observable<string[]> { getNodeRoles(node: Node): Observable<string[]> {
if (node.path.elements.some(el => (el.nodeType === 'st:site' || el.nodeType === 'st:sites'))) {
const searchRequest = this.buildRetrieveSiteQueryBody(node.path.elements); const searchRequest = this.buildRetrieveSiteQueryBody(node.path.elements);
return this.searchApiService.searchByQueryBody(searchRequest).pipe( return this.searchApiService.searchByQueryBody(searchRequest).pipe(
switchMap((siteNodeList: any) => { switchMap((siteNodeList: ResultSetPaging) => {
if (siteNodeList.list.entries.length > 0) {
const siteName = siteNodeList.list.entries[0].entry.name; const siteName = siteNodeList.list.entries[0].entry.name;
return this.getGroupMembersBySiteName(siteName); return this.getGroupMembersBySiteName(siteName);
}));
} else { } else {
return of(node.permissions?.settable); return of(node.permissions?.settable);
} }
})
);
} }
/** /**