diff --git a/docs/content-services/permission-list.component.md b/docs/content-services/permission-list.component.md
index 0ec5c73a78..7a31ff3b9c 100644
--- a/docs/content-services/permission-list.component.md
+++ b/docs/content-services/permission-list.component.md
@@ -17,6 +17,18 @@ Shows node permissions as a table.
```
+If permissions list is empty, `No permissions` text is displayed,
+or custom template can be added:
+
+```html
+
+
+ Custom no permission template!
+
+
+```
+
+
### Properties
| Name | Type | Default value | Description |
diff --git a/lib/content-services/i18n/en.json b/lib/content-services/i18n/en.json
index 5aaa8b04ed..abbb8eedc7 100644
--- a/lib/content-services/i18n/en.json
+++ b/lib/content-services/i18n/en.json
@@ -235,7 +235,8 @@
"INHERITED" : "Inherited",
"AUTHORITY_ID" : "Authority ID",
"ROLE": "Role",
- "LOCALLY_SET" : "Locally set"
+ "LOCALLY_SET" : "Locally set",
+ "NO_PERMISSIONS" : "No permissions"
}
}
}
diff --git a/lib/content-services/mock/permission-list.component.mock.ts b/lib/content-services/mock/permission-list.component.mock.ts
index 4da39ffd29..903a8d7173 100644
--- a/lib/content-services/mock/permission-list.component.mock.ts
+++ b/lib/content-services/mock/permission-list.component.mock.ts
@@ -251,6 +251,67 @@ export const fakeNodeWithOnlyLocally: any = {
}
};
+export const fakeNodeWithoutPermissions: any = {
+ 'aspectNames': [
+ 'cm:auditable',
+ 'cm:taggable',
+ 'cm:author',
+ 'cm:titled',
+ 'app:uifacets'
+ ],
+ 'createdAt': '2017-11-16T16:29:38.638+0000',
+ 'path': {
+ 'name': '/Company Home/Sites/testsite/documentLibrary',
+ 'isComplete': true,
+ 'elements': [
+ {
+ 'id': '2be275a1-b00d-4e45-83d8-66af43ac2252',
+ 'name': 'Company Home'
+ },
+ {
+ 'id': '1be10a97-6eb9-4b60-b6c6-1673900e9631',
+ 'name': 'Sites'
+ },
+ {
+ 'id': 'e002c740-b8f9-482a-a554-8fff4e4c9dc0',
+ 'name': 'testsite'
+ },
+ {
+ 'id': '71626fae-0c04-4d0c-a129-20fa4c178716',
+ 'name': 'documentLibrary'
+ }
+ ]
+ },
+ 'isFolder': true,
+ 'isFile': false,
+ 'createdByUser': {
+ 'id': 'System',
+ 'displayName': 'System'
+ },
+ 'modifiedAt': '2018-03-21T03:17:58.783+0000',
+ 'permissions': {
+ 'locallySet': [],
+ 'settable': [],
+ '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 fakeSiteNodeResponse: any = {
'list': {
'pagination': {
diff --git a/lib/content-services/permission-manager/components/permission-list/no-permission.component.ts b/lib/content-services/permission-manager/components/permission-list/no-permission.component.ts
new file mode 100644
index 0000000000..38a8406957
--- /dev/null
+++ b/lib/content-services/permission-manager/components/permission-list/no-permission.component.ts
@@ -0,0 +1,26 @@
+/*!
+ * @license
+ * Copyright 2016 Alfresco Software, Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* tslint:disable:no-input-rename */
+
+import { Component} from '@angular/core';
+
+@Component({
+ selector: 'adf-no-permission-template',
+ template: ''
+})
+export class NoPermissionTemplateComponent {}
diff --git a/lib/content-services/permission-manager/components/permission-list/permission-list.component.html b/lib/content-services/permission-manager/components/permission-list/permission-list.component.html
index 8f11da7c2e..2a1cce741f 100644
--- a/lib/content-services/permission-manager/components/permission-list/permission-list.component.html
+++ b/lib/content-services/permission-manager/components/permission-list/permission-list.component.html
@@ -1,5 +1,16 @@
-
+
+
+
+
+
+
+
+ {{ 'PERMISSION_MANAGER.PERMISSION_DISPLAY.NO_PERMISSIONS' | translate }}
+
+
+
+
diff --git a/lib/content-services/permission-manager/components/permission-list/permission-list.component.spec.ts b/lib/content-services/permission-manager/components/permission-list/permission-list.component.spec.ts
index b369269f47..92b57bb192 100644
--- a/lib/content-services/permission-manager/components/permission-list/permission-list.component.spec.ts
+++ b/lib/content-services/permission-manager/components/permission-list/permission-list.component.spec.ts
@@ -26,6 +26,7 @@ import { fakeNodeWithPermissions,
fakeNodeWithOnlyLocally,
fakeSiteNodeResponse,
fakeSiteRoles,
+ fakeNodeWithoutPermissions,
fakeEmptyResponse } from '../../../mock/permission-list.component.mock';
describe('PermissionDisplayComponent', () => {
@@ -63,6 +64,16 @@ describe('PermissionDisplayComponent', () => {
expect(element.querySelector('#adf-permission-display-container')).not.toBeNull();
});
+ it('should render default empty template when no permissions', () => {
+ component.nodeId = 'fake-node-id';
+ spyOn(nodeService, 'getNode').and.returnValue(Observable.of(fakeNodeWithoutPermissions));
+ spyOn(searchApiService, 'searchByQueryBody').and.returnValue(Observable.of(fakeEmptyResponse));
+ fixture.detectChanges();
+
+ expect(element.querySelector('#adf-no-permissions-template')).not.toBeNull();
+ expect(element.querySelector('#adf-permission-display-container .adf-datatable-permission')).toBeNull();
+ });
+
it('should show the node permissions', () => {
component.nodeId = 'fake-node-id';
spyOn(nodeService, 'getNode').and.returnValue(Observable.of(fakeNodeWithPermissions));
diff --git a/lib/content-services/permission-manager/permission-manager.module.ts b/lib/content-services/permission-manager/permission-manager.module.ts
index 487d29fcc3..3d0b401fbe 100644
--- a/lib/content-services/permission-manager/permission-manager.module.ts
+++ b/lib/content-services/permission-manager/permission-manager.module.ts
@@ -24,6 +24,7 @@ import { PermissionListComponent } from './components/permission-list/permission
import { DataTableModule, DataColumnModule } from '@alfresco/adf-core';
import { InheritPermissionDirective } from './components/inherited-button.directive';
import { NodePermissionService } from './services/node-permission.service';
+import { NoPermissionTemplateComponent } from "./components/permission-list/no-permission.component";
@NgModule({
imports: [
@@ -37,6 +38,7 @@ import { NodePermissionService } from './services/node-permission.service';
],
declarations: [
PermissionListComponent,
+ NoPermissionTemplateComponent,
InheritPermissionDirective
],
providers: [
@@ -44,6 +46,7 @@ import { NodePermissionService } from './services/node-permission.service';
],
exports: [
PermissionListComponent,
+ NoPermissionTemplateComponent,
InheritPermissionDirective
]
})
diff --git a/lib/content-services/permission-manager/public-api.ts b/lib/content-services/permission-manager/public-api.ts
index a1d5c9ceb7..3e76f09728 100644
--- a/lib/content-services/permission-manager/public-api.ts
+++ b/lib/content-services/permission-manager/public-api.ts
@@ -16,6 +16,7 @@
*/
export * from './components/permission-list/permission-list.component';
+export * from './components/permission-list/no-permission.component';
export * from './components/inherited-button.directive';
export * from './services/node-permission.service';
export * from './models/permission.model';