diff --git a/domain/space/endpoint.go b/domain/space/endpoint.go index cf0ca02e..888308e1 100644 --- a/domain/space/endpoint.go +++ b/domain/space/endpoint.go @@ -714,7 +714,7 @@ func (h *Handler) SetPermissions(w http.ResponseWriter, r *http.Request) { response.WriteEmpty(w) } -// GetPermissions returns permissions for the requested space, for all users. +// GetPermissions returns permissions for alll users for given space. func (h *Handler) GetPermissions(w http.ResponseWriter, r *http.Request) { method := "space.GetPermissions" ctx := domain.GetRequestContext(r) @@ -730,12 +730,21 @@ func (h *Handler) GetPermissions(w http.ResponseWriter, r *http.Request) { response.WriteServerError(w, method, err) return } - if len(perms) == 0 { perms = []space.Permission{} } - response.WriteJSON(w, perms) + userPerms := make(map[string][]space.Permission) + for _, p := range perms { + userPerms[p.WhoID] = append(userPerms[p.WhoID], p) + } + + records := []space.PermissionRecord{} + for _, up := range userPerms { + records = append(records, space.DecodeUserPermissions(up)) + } + + response.WriteJSON(w, records) } // GetUserPermissions returns permissions for the requested space, for current user. @@ -754,12 +763,12 @@ func (h *Handler) GetUserPermissions(w http.ResponseWriter, r *http.Request) { response.WriteServerError(w, method, err) return } - if len(perms) == 0 { perms = []space.Permission{} } - response.WriteJSON(w, perms) + record := space.DecodeUserPermissions(perms) + response.WriteJSON(w, record) } // AcceptInvitation records the fact that a user has completed space onboard process. diff --git a/domain/space/mysql/store.go b/domain/space/mysql/store.go index e14f9384..ec4a39aa 100644 --- a/domain/space/mysql/store.go +++ b/domain/space/mysql/store.go @@ -208,7 +208,7 @@ func (s Scope) AddPermission(ctx domain.RequestContext, r space.Permission) (err // AddPermissions inserts records into permission database table, one per action. func (s Scope) AddPermissions(ctx domain.RequestContext, r space.Permission, actions ...space.PermissionAction) (err error) { for _, a := range actions { - r.Action = string(a) + r.Action = a s.AddPermission(ctx, r) } @@ -242,12 +242,12 @@ func (s Scope) GetUserPermissions(ctx domain.RequestContext, spaceID string) (r func (s Scope) GetPermissions(ctx domain.RequestContext, spaceID string) (r []space.Permission, err error) { err = s.Runtime.Db.Select(&r, ` SELECT id, orgid, who, whoid, action, scope, location, refid - FROM permission WHERE orgid=? AND location='space' AND refid=? AND who='user' AND (whoid=? OR whoid='') + FROM permission WHERE orgid=? AND location='space' AND refid=? AND who='user' UNION ALL SELECT p.id, p.orgid, p.who, p.whoid, p.action, p.scope, p.location, p.refid FROM permission p LEFT JOIN rolemember r ON p.whoid=r.roleid WHERE p.orgid=? AND p.location='space' AND p.refid=? - AND p.who='role' AND (r.userid=? OR r.userid='')`, - ctx.OrgID, spaceID, ctx.UserID, ctx.OrgID, spaceID, ctx.OrgID) + AND p.who='role'`, + ctx.OrgID, spaceID, ctx.OrgID, spaceID) if err == sql.ErrNoRows { err = nil diff --git a/gui/app/components/document/sidebar-view-attachments.js b/gui/app/components/document/sidebar-view-attachments.js index 0075a97d..aa425eec 100644 --- a/gui/app/components/document/sidebar-view-attachments.js +++ b/gui/app/components/document/sidebar-view-attachments.js @@ -32,7 +32,7 @@ export default Ember.Component.extend(NotifierMixin, TooltipMixin, { didInsertElement() { this._super(...arguments); - if (!this.get('isEditor')) { + if (!this.get('permissions.documentEdit')) { return; } diff --git a/gui/app/components/document/tag-editor.js b/gui/app/components/document/tag-editor.js index 6ae93b7e..77753eeb 100644 --- a/gui/app/components/document/tag-editor.js +++ b/gui/app/components/document/tag-editor.js @@ -33,11 +33,11 @@ export default Ember.Component.extend({ } this.set('tagz', tagz); - this.set('canAdd', this.get('isEditor') && this.get('tagz').get('length') < 3); + this.set('canAdd', this.get('permissions.documentEdit') && this.get('tagz').get('length') < 3); }, didUpdateAttrs() { - this.set('canAdd', this.get('isEditor') && this.get('tagz').get('length') < 3); + this.set('canAdd', this.get('permissions.documentEdit') && this.get('tagz').get('length') < 3); }, didInsertElement() { diff --git a/gui/app/components/folder/documents-list.js b/gui/app/components/folder/documents-list.js index 8fbfb516..88100bed 100644 --- a/gui/app/components/folder/documents-list.js +++ b/gui/app/components/folder/documents-list.js @@ -21,7 +21,7 @@ export default Ember.Component.extend({ didReceiveAttrs() { this._super(...arguments); - this.set('canCreate', this.get('folderService').get('canEditCurrentFolder')); + this.set('canCreate', this.get('permissions.documentAdd')); this.set('deleteTargets', this.get('folders').rejectBy('id', this.get('folder.id'))); }, diff --git a/gui/app/components/folder/folder-heading.js b/gui/app/components/folder/folder-heading.js index 0d55d398..a2e7eaed 100644 --- a/gui/app/components/folder/folder-heading.js +++ b/gui/app/components/folder/folder-heading.js @@ -22,7 +22,6 @@ export default Ember.Component.extend(NotifierMixin, TooltipMixin, { folderName: '', hasNameError: computed.empty('folderName'), editMode: false, - isEditor: false, keyUp(e) { if (e.keyCode === 27) { // escape key diff --git a/gui/app/components/folder/folder-toolbar.js b/gui/app/components/folder/folder-toolbar.js index 79681996..2fd204ec 100644 --- a/gui/app/components/folder/folder-toolbar.js +++ b/gui/app/components/folder/folder-toolbar.js @@ -14,10 +14,6 @@ import NotifierMixin from '../../mixins/notifier'; import TooltipMixin from '../../mixins/tooltip'; import AuthMixin from '../../mixins/auth'; -const { - computed -} = Ember; - export default Ember.Component.extend(NotifierMixin, TooltipMixin, AuthMixin, { folderService: Ember.inject.service('folder'), session: Ember.inject.service(), @@ -25,16 +21,11 @@ export default Ember.Component.extend(NotifierMixin, TooltipMixin, AuthMixin, { showToolbar: false, folder: {}, busy: false, - isFolderOwner: computed.equal('folder.userId', 'session.user.id'), moveFolderId: "", drop: null, didReceiveAttrs() { - this.set('isFolderOwner', this.get('folder.userId') === this.get("session.user.id")); - - let show = this.get('session.authenticated') || this.get('isFolderOwner') || this.get('hasSelectedDocuments') || this.get('folderService').get('canEditCurrentFolder'); - this.set('showToolbar', show); - + console.log(this.get('permissions')); let targets = _.reject(this.get('folders'), { id: this.get('folder').get('id') }); @@ -44,11 +35,17 @@ export default Ember.Component.extend(NotifierMixin, TooltipMixin, AuthMixin, { didRender() { if (this.get('hasSelectedDocuments')) { - this.addTooltip(document.getElementById("move-documents-button")); - this.addTooltip(document.getElementById("delete-documents-button")); + if (this.get('permissions.documentMove')) { + this.addTooltip(document.getElementById("move-documents-button")); + } + if (this.get('permissions.documentDelete')) { + this.addTooltip(document.getElementById("delete-documents-button")); + } } else { - if (this.get('isFolderOwner')) { + if (this.get('permissions.spaceOwner')) { this.addTooltip(document.getElementById("space-delete-button")); + } + if (this.get('permissions.spaceManage')) { this.addTooltip(document.getElementById("space-settings-button")); } } diff --git a/gui/app/components/folder/permission-admin.js b/gui/app/components/folder/permission-admin.js index f9df03cd..7ba4cd88 100644 --- a/gui/app/components/folder/permission-admin.js +++ b/gui/app/components/folder/permission-admin.js @@ -26,75 +26,62 @@ export default Ember.Component.extend(NotifierMixin, { this.get('userService').getAll().then((users) => { this.set('users', users); - var folderPermissions = []; + // set up users + let folderPermissions = []; users.forEach((user) => { let isActive = user.get('active'); let u = { - fullname: user.get('fullname'), orgId: this.get('folder.orgId'), - who: 'user', - whoId: user.get('id'), - location: 'space', - scope: 'object', - refId: this.get('folder.id'), + folderId: this.get('folder.id'), + userId: user.get('id'), + fullname: user.get('fullname'), spaceView: false, spaceManage: false, spaceOwner: false, - docAdd: false, - docEdit: false, - docDelete: false, - docMove: false, - docCopy: false, - docTemplate: false, + documentAdd: false, + documentEdit: false, + documentDelete: false, + documentMove: false, + documentCopy: false, + documentTemplate: false }; if (isActive) { - folderPermissions.pushObject(u); + let data = this.get('store').normalize('space-permission', u) + folderPermissions.pushObject(this.get('store').push(data)); } }); - var u = { - fullname: " Everyone", + // set up Everyone user + let u = { orgId: this.get('folder.orgId'), - who: 'user', - whoId: '', - location: 'space', - scope: 'object', - refId: this.get('folder.id'), + folderId: this.get('folder.id'), + userId: '', + fullname: ' Everyone', spaceView: false, spaceManage: false, spaceOwner: false, - docAdd: false, - docEdit: false, - docDelete: false, - docMove: false, - docCopy: false, - docTemplate: false, + documentAdd: false, + documentEdit: false, + documentDelete: false, + documentMove: false, + documentCopy: false, + documentTemplate: false }; - folderPermissions.pushObject(u); + let data = this.get('store').normalize('space-permission', u) + folderPermissions.pushObject(this.get('store').push(data)); this.get('folderService').getPermissions(this.get('folder.id')).then((permissions) => { permissions.forEach((permission, index) => { // eslint-disable-line no-unused-vars - var folderPermission = folderPermissions.findBy('userId', permission.get('userId')); - if (is.not.undefined(folderPermission)) { - Ember.setProperties(folderPermission, { - orgId: permission.get('orgId'), - folderId: permission.get('folderId'), - canEdit: permission.get('canEdit'), - canView: permission.get('canView'), - canViewPrevious: permission.get('canView') - }); + let user = folderPermissions.findBy('userId', permission.get('userId')); + if (is.not.undefined(user)) { + Ember.setProperties(user, permission); } }); - folderPermissions.map((permission) => { - let data = this.get('store').normalize('folder-permission', permission); - return this.get('store').push(data); - }); - this.set('permissions', folderPermissions.sortBy('fullname')); }); }); @@ -107,48 +94,44 @@ export default Ember.Component.extend(NotifierMixin, { actions: { setPermissions() { let message = this.getDefaultInvitationMessage(); - let folder = this.get('folder'); + // let folder = this.get('folder'); let permissions = this.get('permissions'); - this.get('permissions').forEach((permission, index) => { // eslint-disable-line no-unused-vars - Ember.set(permission, 'canView', $("#canView-" + permission.userId).prop('checked')); - Ember.set(permission, 'canEdit', $("#canEdit-" + permission.userId).prop('checked')); + permissions.forEach((permission, index) => { // eslint-disable-line no-unused-vars + Ember.set(permission, 'spaceView', $("#space-role-view-" + permission.get('userId')).prop('checked')); + Ember.set(permission, 'spaceManage', $("#space-role-manage-" + permission.get('userId')).prop('checked')); + Ember.set(permission, 'spaceOwner', $("#space-role-owner-" + permission.get('userId')).prop('checked')); + Ember.set(permission, 'documentAdd', $("#doc-role-add-" + permission.get('userId')).prop('checked')); + Ember.set(permission, 'documentEdit', $("#doc-role-edit-" + permission.get('userId')).prop('checked')); + Ember.set(permission, 'documentDelete', $("#doc-role-delete-" + permission.get('userId')).prop('checked')); + Ember.set(permission, 'documentMove', $("#doc-role-move-" + permission.get('userId')).prop('checked')); + Ember.set(permission, 'documentCopy', $("#doc-role-copy-" + permission.get('userId')).prop('checked')); + Ember.set(permission, 'documentTemplate', $("#doc-role-template-" + permission.get('userId')).prop('checked')); }); - var data = permissions.map((obj) => { - let permission = { - 'orgId': obj.orgId, - 'folderId': obj.folderId, - 'userId': obj.userId, - 'canEdit': obj.canEdit, - 'canView': obj.canView - }; + let payload = { Message: message, Permissions: permissions }; + console.log(payload); - return permission; - }); + // this.get('folderService').savePermissions(folder.get('id'), payload).then(() => { + // this.showNotification('Saved permissions'); + // }); - var payload = { Message: message, Roles: data }; + // var hasEveryone = _.find(data, function (permission) { + // return permission.userId === "" && (permission.canView || permission.canEdit); + // }); - this.get('folderService').savePermissions(folder.get('id'), payload).then(() => { - this.showNotification('Saved permissions'); - }); + // if (is.not.undefined(hasEveryone)) { + // folder.markAsPublic(); + // } else { + // if (data.length > 1) { + // folder.markAsRestricted(); + // } else { + // folder.markAsPrivate(); + // } + // } - var hasEveryone = _.find(data, function (permission) { - return permission.userId === "" && (permission.canView || permission.canEdit); - }); - - if (is.not.undefined(hasEveryone)) { - folder.markAsPublic(); - } else { - if (data.length > 1) { - folder.markAsRestricted(); - } else { - folder.markAsPrivate(); - } - } - - this.get('folderService').save(folder).then(function () { - }); + // this.get('folderService').save(folder).then(function () { + // }); } } }); diff --git a/gui/app/models/folder-permission.js b/gui/app/models/folder-permission.js index 58f01b04..9ff8fd8a 100644 --- a/gui/app/models/folder-permission.js +++ b/gui/app/models/folder-permission.js @@ -11,13 +11,12 @@ import Model from 'ember-data/model'; import attr from 'ember-data/attr'; -// import { belongsTo, hasMany } from 'ember-data/relationships'; +import { belongsTo } from 'ember-data/relationships'; export default Model.extend({ orgId: attr('string'), folderId: attr('string'), userId: attr('string'), fullname: attr('string'), - canView: attr('boolean', { defaultValue: false }), - canEdit: attr('boolean', { defaultValue: false }) + permissions: belongsTo('space-permission') }); diff --git a/gui/app/models/user-permission.js b/gui/app/models/space-permission.js similarity index 59% rename from gui/app/models/user-permission.js rename to gui/app/models/space-permission.js index 9ca130bb..3ca7342f 100644 --- a/gui/app/models/user-permission.js +++ b/gui/app/models/space-permission.js @@ -15,10 +15,17 @@ import attr from 'ember-data/attr'; export default Model.extend({ orgId: attr('string'), - who: attr('string'), - whoId: attr('string'), - action: attr('string'), - scope: attr('string'), - location: attr('string'), - refId: attr('string') + folderId: attr('string'), + userId: attr('string'), + fullname: attr('string'), // client-side usage only, not from API + + spaceView: attr('boolean'), + spaceManage: attr('boolean'), + spaceOwner: attr('boolean'), + documentAdd: attr('boolean'), + documentEdit: attr('boolean'), + documentDelete: attr('boolean'), + documentMove: attr('boolean'), + documentCopy: attr('boolean'), + documentTemplate: attr('boolean') }); diff --git a/gui/app/pods/document/index/route.js b/gui/app/pods/document/index/route.js index 801db9cd..f1155e38 100644 --- a/gui/app/pods/document/index/route.js +++ b/gui/app/pods/document/index/route.js @@ -30,7 +30,7 @@ export default Ember.Route.extend(AuthenticatedRouteMixin, { pages: this.get('documentService').getPages(this.modelFor('document').document.get('id')), links: this.modelFor('document').links, sections: this.modelFor('document').sections, - isEditor: this.get('folderService').get('canEditCurrentFolder') + permissions: this.get('folderService').get('permissions') }); } }); diff --git a/gui/app/pods/document/index/template.hbs b/gui/app/pods/document/index/template.hbs index 0d1ab648..d75dcb78 100644 --- a/gui/app/pods/document/index/template.hbs +++ b/gui/app/pods/document/index/template.hbs @@ -1,9 +1,10 @@ {{#layout/zone-container}} {{#layout/zone-sidebar}} {{document/sidebar-zone folders=model.folders folder=model.folder document=model.document - pages=model.pages sections=model.section links=model.links isEditor=model.isEditor tab=tab + pages=model.pages sections=model.section links=model.links permissions=model.permissions tab=tab onDocumentDelete=(action 'onDocumentDelete') onSaveTemplate=(action 'onSaveTemplate') - onPageSequenceChange=(action 'onPageSequenceChange') onPageLevelChange=(action 'onPageLevelChange') onGotoPage=(action 'onGotoPage')}} + onPageSequenceChange=(action 'onPageSequenceChange') onPageLevelChange=(action 'onPageLevelChange') + onGotoPage=(action 'onGotoPage')}} {{/layout/zone-sidebar}} {{#layout/zone-content}}
@@ -15,10 +16,10 @@
{{/link-to}} - {{document/document-heading document=model.document isEditor=model.isEditor onSaveDocument=(action 'onSaveDocument')}} + {{document/document-heading document=model.document permissions=model.permissions onSaveDocument=(action 'onSaveDocument')}} {{document/document-view document=model.document links=model.links pages=model.pages - folder=model.folder folders=model.folders sections=model.sections isEditor=model.isEditor pageId=pageId - onSavePage=(action 'onSavePage') onInsertSection=(action 'onInsertSection') + folder=model.folder folders=model.folders sections=model.sections permissions=model.permissions pageId=pageId + onSavePage=(action 'onSavePage') onInsertSection=(action 'onInsertSection') onSavePageAsBlock=(action 'onSavePageAsBlock') onDeleteBlock=(action 'onDeleteBlock') onGotoPage=(action 'onGotoPage') onCopyPage=(action 'onCopyPage') onMovePage=(action 'onMovePage') onDeletePage=(action 'onPageDeleted')}} diff --git a/gui/app/pods/document/route.js b/gui/app/pods/document/route.js index a82e0532..42a46935 100644 --- a/gui/app/pods/document/route.js +++ b/gui/app/pods/document/route.js @@ -34,7 +34,7 @@ export default Ember.Route.extend(AuthenticatedRouteMixin, { this.set('folder', folder); this.get('folderService').setCurrentFolder(folder).then(() => { - this.set('isEditor', this.get('folderService').get('canEditCurrentFolder')); + this.set('permissions', this.get('folderService').get('permissions')); resolve(); }); }); @@ -49,7 +49,7 @@ export default Ember.Route.extend(AuthenticatedRouteMixin, { folder: this.get('folder'), document: this.get('document'), page: this.get('pageId'), - isEditor: this.get('isEditor'), + permissions: this.get('permissions'), links: this.get('linkService').getDocumentLinks(this.get('documentId')), sections: this.get('sectionService').getAll() }); diff --git a/gui/app/pods/document/section/route.js b/gui/app/pods/document/section/route.js index 293085de..dc97645f 100644 --- a/gui/app/pods/document/section/route.js +++ b/gui/app/pods/document/section/route.js @@ -16,13 +16,13 @@ export default Ember.Route.extend(AuthenticatedRouteMixin, { documentService: Ember.inject.service('document'), folderService: Ember.inject.service('folder'), userService: Ember.inject.service('user'), - + model(params) { return Ember.RSVP.hash({ folders: this.modelFor('document').folders, folder: this.modelFor('document').folder, document: this.modelFor('document').document, - isEditor: this.get('folderService').get('canEditCurrentFolder'), + permissions: this.get('folderService').get('permissions'), links: this.modelFor('document').links, sections: this.modelFor('document').sections, page: this.get('documentService').getPage(this.modelFor('document').document.get('id'), params.page_id), diff --git a/gui/app/pods/document/section/template.hbs b/gui/app/pods/document/section/template.hbs index f42e207f..138b7ec7 100644 --- a/gui/app/pods/document/section/template.hbs +++ b/gui/app/pods/document/section/template.hbs @@ -7,7 +7,7 @@ arrow_back {{model.document.name}} {{/link-to}} - {{document/document-heading document=model.document isEditor=false}} + {{document/document-heading document=model.document permissions=model.permissions}} {{document/document-editor document=model.document folder=model.folder page=model.page meta=model.meta onCancel=(action 'onCancel') onAction=(action 'onAction')}} diff --git a/gui/app/pods/folder/index/route.js b/gui/app/pods/folder/index/route.js index 59966be1..cf79792b 100644 --- a/gui/app/pods/folder/index/route.js +++ b/gui/app/pods/folder/index/route.js @@ -19,7 +19,7 @@ export default Ember.Route.extend(AuthenticatedRouteMixin, { return Ember.RSVP.hash({ folder: this.modelFor('folder').folder, isEditor: this.modelFor('folder').isEditor, - isFolderOwner: this.modelFor('folder').isFolderOwner, + permissions: this.modelFor('folder').permissions, folders: this.modelFor('folder').folders, documents: this.modelFor('folder').documents, templates: this.modelFor('folder').templates diff --git a/gui/app/pods/folder/index/template.hbs b/gui/app/pods/folder/index/template.hbs index 1353e57c..321282d0 100644 --- a/gui/app/pods/folder/index/template.hbs +++ b/gui/app/pods/folder/index/template.hbs @@ -1,14 +1,17 @@ {{#layout/zone-container}} {{#layout/zone-sidebar}} - {{folder/sidebar-zone folders=model.folders folder=model.folder isFolderOwner=model.isFolderOwner isEditor=model.isEditor tab=tab - onAddSpace=(action 'onAddSpace')}} + {{folder/sidebar-zone folders=model.folders folder=model.folder + permissions=model.permissions tab=tab onAddSpace=(action 'onAddSpace')}} {{/layout/zone-sidebar}} {{#layout/zone-content}} - {{folder/folder-heading folder=model.folder isFolderOwner=model.isFolderOwner isEditor=model.isEditor}} - {{folder/folder-toolbar folders=model.folders isFolderOwner=model.isFolderOwner folder=model.folder hasSelectedDocuments=hasSelectedDocuments + {{folder/folder-heading folder=model.folder permissions=model.permissions}} + + {{folder/folder-toolbar folders=model.folders folder=model.folder + permissions=model.permissions hasSelectedDocuments=hasSelectedDocuments onDeleteDocument=(action 'onDeleteDocument') onMoveDocument=(action 'onMoveDocument')}} + {{folder/documents-list documents=model.documents folders=model.folders folder=model.folder templates=model.templates - isFolderOwner=model.isFolderOwner isEditor=model.isEditor selectedDocuments=(mut selectedDocuments) + permissions=model.permissions selectedDocuments=(mut selectedDocuments) onDeleteSpace=(action 'onDeleteSpace') onImport=(action 'onImport')}} {{/layout/zone-content}} {{/layout/zone-container}} \ No newline at end of file diff --git a/gui/app/pods/folder/route.js b/gui/app/pods/folder/route.js index 3fc2b9be..5f2f6214 100644 --- a/gui/app/pods/folder/route.js +++ b/gui/app/pods/folder/route.js @@ -26,10 +26,8 @@ export default Ember.Route.extend(AuthenticatedRouteMixin, { this.get('folderService').getFolder(this.get('folderId')).then((folder) => { this.set('folder', folder); - this.get('folderService').setCurrentFolder(folder).then(() => { - this.set('isEditor', this.get('folderService').get('canEditCurrentFolder')); - this.set('isFolderOwner', this.get('session.user.id') === folder.get('userId')); - + this.get('folderService').setCurrentFolder(folder).then((data) => { + this.set('permissions', data); resolve(); }); }); @@ -39,8 +37,7 @@ export default Ember.Route.extend(AuthenticatedRouteMixin, { model(params) { return Ember.RSVP.hash({ folder: this.get('folder'), - isEditor: this.get('isEditor'), - isFolderOwner: this.get('isFolderOwner'), + permissions: this.get('permissions'), folders: this.get('folderService').getAll(), documents: this.get('documentService').getAllByFolder(params.folder_id), templates: this.get('templateService').getSavedTemplates(params.folder_id) diff --git a/gui/app/pods/folder/settings/route.js b/gui/app/pods/folder/settings/route.js index 6019e69c..c289356a 100644 --- a/gui/app/pods/folder/settings/route.js +++ b/gui/app/pods/folder/settings/route.js @@ -18,8 +18,7 @@ export default Ember.Route.extend(AuthenticatedRouteMixin, { return Ember.RSVP.hash({ folder: this.modelFor('folder').folder, - isEditor: this.modelFor('folder').isEditor, - isFolderOwner: this.modelFor('folder').isFolderOwner, + permissions: this.modelFor('folder').permissions, folders: this.modelFor('folder').folders }); } diff --git a/gui/app/serializers/user-permission.js b/gui/app/serializers/space-permission.js similarity index 100% rename from gui/app/serializers/user-permission.js rename to gui/app/serializers/space-permission.js diff --git a/gui/app/services/folder.js b/gui/app/services/folder.js index 244820b3..24331f5e 100644 --- a/gui/app/services/folder.js +++ b/gui/app/services/folder.js @@ -25,7 +25,7 @@ export default BaseService.extend({ // selected folder currentFolder: null, - canEditCurrentFolder: false, + permissions: {}, // Add a new folder. add(payload) { @@ -114,7 +114,6 @@ export default BaseService.extend({ // reloads and caches folders. reload() { - return this.get('ajax').request(`space`, { method: "GET" }).then((response) => { @@ -137,7 +136,7 @@ export default BaseService.extend({ let data = []; data = response.map((obj) => { - let data = this.get('store').normalize('user-permission', obj); + let data = this.get('store').normalize('space-permission', obj); return this.get('store').push(data); }); @@ -171,7 +170,6 @@ export default BaseService.extend({ let folderId = folder.get('id'); this.set('currentFolder', folder); this.get('localStorage').storeSessionItem("folder", folderId); - this.set('canEditCurrentFolder', false); let userId = this.get('sessionService.user.id'); if (userId === "") { @@ -180,37 +178,11 @@ export default BaseService.extend({ let url = `space/${folderId}/permissions/user`; - return this.get('ajax').request(url).then((folderPermissions) => { - // safety check - this.set('canEditCurrentFolder', false); - - if (folderPermissions.length === 0) { - return; - } - - let result = []; - - folderPermissions.forEach((item) => { - if (item.folderId === folderId) { - result.push(item); - } - }); - - let canEdit = false; - - result.forEach((permission) => { - if (permission.userId === userId) { - canEdit = permission.canEdit; - } - - if (permission.userId === "" && !canEdit) { - canEdit = permission.canEdit; - } - }); - - Ember.run(() => { - this.set('canEditCurrentFolder', canEdit && this.get('sessionService.authenticated')); - }); + return this.get('ajax').request(url).then((response) => { + let data = this.get('store').normalize('space-permission', response); + let data2 = this.get('store').push(data); + this.set('permissions', data2); + return data2; }); }, }); diff --git a/gui/app/templates/components/document/document-heading.hbs b/gui/app/templates/components/document/document-heading.hbs index 5188d190..52f8b62b 100644 --- a/gui/app/templates/components/document/document-heading.hbs +++ b/gui/app/templates/components/document/document-heading.hbs @@ -1,5 +1,5 @@ {{#unless editMode}} -
+

{{document.name}}

{{document.excerpt}}
diff --git a/gui/app/templates/components/document/sidebar-view-attachments.hbs b/gui/app/templates/components/document/sidebar-view-attachments.hbs index b376babd..27c93871 100644 --- a/gui/app/templates/components/document/sidebar-view-attachments.hbs +++ b/gui/app/templates/components/document/sidebar-view-attachments.hbs @@ -13,7 +13,7 @@ {{ a.filename }} - {{#if isEditor}} + {{#if permissions.documentEdit}}
delete
diff --git a/gui/app/templates/components/document/sidebar-zone.hbs b/gui/app/templates/components/document/sidebar-zone.hbs index 5abf6e46..a170ec5b 100644 --- a/gui/app/templates/components/document/sidebar-zone.hbs +++ b/gui/app/templates/components/document/sidebar-zone.hbs @@ -10,7 +10,7 @@
attach_file
- {{#if isEditor}} + {{#if permissions.documentEdit}}
timeline @@ -22,21 +22,21 @@ {{#if document.template}}
Template
{{/if}} - {{document/tag-editor documentTags=document.tags isEditor=isEditor onChange=(action 'onTagChange')}} + {{document/tag-editor documentTags=document.tags permissions=permissions onChange=(action 'onTagChange')}}
@@ -55,7 +55,7 @@ {{else}}
  • Pin
  • {{/if}} - {{#if isEditor}} + {{#if permissions.documentEdit}}
  • {{#link-to 'document.history'}}History{{/link-to}}
  • @@ -63,14 +63,14 @@ {{/if}} {{/if}} - {{#if isEditor}} + {{#if permissions.documentTemplate}}
  • Template
  • {{/if}} - {{#if isEditor}} + {{#if permissions.documentDelete}}
  • Delete
  • {{/if}} @@ -90,13 +90,17 @@ {{/unless}} {{/if}} - {{#if isEditor}} + {{#if permissions.documentDelete}} {{#if menuOpen}} {{#dropdown-dialog target="delete-document-button" position="bottom left" button="Delete" color="flat-red" onAction=(action 'onDeleteDocument')}}

    Are you sure you want to delete this document?

    There is no undo, so be careful.

    {{/dropdown-dialog}} + {{/if}} + {{/if}} + {{#if permissions.documentTemplate}} + {{#if menuOpen}} {{#dropdown-dialog target="save-template-button" position="bottom left" button="Save as Template" color="flat-green" onAction=(action 'onSaveTemplate') focusOn="new-template-name" }}
    diff --git a/gui/app/templates/components/folder/documents-list.hbs b/gui/app/templates/components/folder/documents-list.hbs index 61290bfd..94e81a16 100644 --- a/gui/app/templates/components/folder/documents-list.hbs +++ b/gui/app/templates/components/folder/documents-list.hbs @@ -33,7 +33,7 @@ {{/each}}
    -{{folder/start-document folder=folder templates=templates isEditor=isEditor onImport=(action 'onImport') onHideDocumentWizard=(action 'onHideDocumentWizard')}} +{{folder/start-document folder=folder templates=templates permissions=permissions onImport=(action 'onImport') onHideDocumentWizard=(action 'onHideDocumentWizard')}} {{#if emptyState}} {{#if canCreate}} diff --git a/gui/app/templates/components/folder/folder-heading.hbs b/gui/app/templates/components/folder/folder-heading.hbs index da8977c0..ddf43013 100644 --- a/gui/app/templates/components/folder/folder-heading.hbs +++ b/gui/app/templates/components/folder/folder-heading.hbs @@ -1,5 +1,5 @@ {{#unless editMode}} -
    +

    {{folder.name}}

    {{else}} diff --git a/gui/app/templates/components/folder/folder-toolbar.hbs b/gui/app/templates/components/folder/folder-toolbar.hbs index 1b80f4e4..393f9f2b 100644 --- a/gui/app/templates/components/folder/folder-toolbar.hbs +++ b/gui/app/templates/components/folder/folder-toolbar.hbs @@ -1,19 +1,12 @@ -{{#if showToolbar}} - + +
    diff --git a/gui/app/templates/components/folder/permission-admin.hbs b/gui/app/templates/components/folder/permission-admin.hbs index 0a90ba72..a8c160b6 100644 --- a/gui/app/templates/components/folder/permission-admin.hbs +++ b/gui/app/templates/components/folder/permission-admin.hbs @@ -11,25 +11,25 @@
    {{permission.fullname}}
    Space:  - +    - +    - +         Document:  - +    - +    - +    - +    - +    - +   
    diff --git a/gui/app/templates/components/folder/sidebar-zone.hbs b/gui/app/templates/components/folder/sidebar-zone.hbs index 424efc24..8f1e22ae 100644 --- a/gui/app/templates/components/folder/sidebar-zone.hbs +++ b/gui/app/templates/components/folder/sidebar-zone.hbs @@ -7,7 +7,7 @@
    {{#if session.authenticated}} - {{#if isFolderOwner}} + {{#if permissions.spaceManage}} {{#if isAuthProviderDocumize}}
    person_add @@ -54,7 +54,7 @@