1
0
Fork 0
mirror of https://github.com/documize/community.git synced 2025-07-25 08:09:43 +02:00

document level permissions

This commit is contained in:
Harvey Kandola 2017-12-26 13:25:10 +00:00
parent f4f32bcfcb
commit b9394a4967
28 changed files with 983 additions and 355 deletions

View file

@ -12,8 +12,9 @@
import { setProperties } from '@ember/object';
import Component from '@ember/component';
import { inject as service } from '@ember/service';
import ModalMixin from '../../mixins/modal';
export default Component.extend({
export default Component.extend(ModalMixin, {
folderService: service('folder'),
userService: service('user'),
appMeta: service(),
@ -120,8 +121,7 @@ export default Component.extend({
}
this.get('folderService').savePermissions(folder.get('id'), payload).then(() => {
$('#space-permission-modal').modal('hide');
$('#space-permission-modal').modal('dispose');
this.modalClose('#space-permission-modal');
});
}
}

View file

@ -0,0 +1,25 @@
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
//
// This software (Documize Community Edition) is licensed under
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
//
// You can operate outside the AGPL restrictions by purchasing
// Documize Enterprise Edition and obtaining a commercial license
// by contacting <sales@documize.com>.
//
// https://documize.com
import Model from 'ember-data/model';
import attr from 'ember-data/attr';
export default Model.extend({
orgId: attr('string'),
documentId: attr('string'),
userId: attr('string'),
fullname: attr('string'), // client-side usage only, not from API
documentEdit: attr('boolean'), // space level setting
documentApprove: attr('boolean'), // space level setting
documentRoleEdit: attr('boolean'), // document level setting
documentRoleApprove: attr('boolean') // document level setting
});

View file

@ -28,8 +28,6 @@ export default Model.extend({
body: attr('string'),
rawBody: attr('string'),
meta: attr(),
protection: attr('number', { defaultValue: 0 }),
approval: attr('number', { defaultValue: 0 }),
tagName: computed('level', function () {
return "h2";

View file

@ -32,7 +32,8 @@ export default Route.extend(AuthenticatedRouteMixin, {
pages: this.get('documentService').getPages(this.modelFor('document').document.get('id')),
links: this.modelFor('document').links,
sections: this.modelFor('document').sections,
permissions: this.modelFor('document').permissions
permissions: this.modelFor('document').permissions,
roles: this.modelFor('document').roles
});
},
@ -44,5 +45,6 @@ export default Route.extend(AuthenticatedRouteMixin, {
controller.set('links', model.links);
controller.set('sections', model.sections);
controller.set('permissions', model.permissions);
controller.set('roles', model.roles);
}
});

View file

@ -1,7 +1,9 @@
{{toolbar/nav-bar}}
{{toolbar/for-document document=document spaces=folders space=folder permissions=permissions
onDocumentDelete=(action 'onDocumentDelete') onSaveTemplate=(action 'onSaveTemplate')}}
{{toolbar/for-document document=document spaces=folders space=folder permissions=permissions roles=roles
onDocumentDelete=(action 'onDocumentDelete')
onSaveTemplate=(action 'onSaveTemplate')
onSaveDocument=(action 'onSaveDocument')}}
<div id="doc-view" class="container">
<div class="row">
@ -15,7 +17,8 @@
</div>
<div class="row">
<div class="col-12">
{{document/document-toc document=document folder=folder pages=pages page=page permissions=permissions currentPageId=pageId tab=tab
{{document/document-toc document=document folder=folder pages=pages page=page
permissions=permissions roles=roles currentPageId=pageId tab=tab
onPageSequenceChange=(action 'onPageSequenceChange') onPageLevelChange=(action 'onPageLevelChange') onGotoPage=(action 'onGotoPage')}}
</div>
</div>

View file

@ -31,6 +31,7 @@ export default Route.extend(AuthenticatedRouteMixin, {
this.set('folders', data.folders);
this.set('folder', data.folder);
this.set('permissions', data.permissions);
this.set('roles', data.roles);
this.set('links', data.links);
resolve();
});
@ -44,6 +45,7 @@ export default Route.extend(AuthenticatedRouteMixin, {
document: this.get('document'),
page: this.get('pageId'),
permissions: this.get('permissions'),
roles: this.get('roles'),
links: this.get('links'),
sections: this.get('sectionService').getAll()
});

View file

@ -0,0 +1,13 @@
import ApplicationSerializer from './application';
export default ApplicationSerializer.extend({
normalize(modelClass, resourceHash) {
return {
data: {
id: resourceHash.userId ? resourceHash.userId : 0,
type: modelClass.modelName,
attributes: resourceHash
}
};
}
});

View file

@ -328,6 +328,7 @@ export default Service.extend({
let data = {
document: {},
permissions: {},
roles: {},
folders: [],
folder: {},
links: [],
@ -337,9 +338,12 @@ export default Service.extend({
doc = this.get('store').push(doc);
let perms = this.get('store').normalize('space-permission', response.permissions);
perms= this.get('store').push(perms);
perms = this.get('store').push(perms);
this.get('folderService').set('permissions', perms);
let roles = this.get('store').normalize('document-role', response.roles);
roles = this.get('store').push(roles);
let folders = response.folders.map((obj) => {
let data = this.get('store').normalize('folder', obj);
return this.get('store').push(data);
@ -347,6 +351,7 @@ export default Service.extend({
data.document = doc;
data.permissions = perms;
data.roles = roles;
data.folders = folders;
data.folder = folders.findBy('id', doc.get('folderId'));
data.links = response.links;

View file

@ -23,6 +23,36 @@
color: $color-dark;
}
}
> .protection-table {
> tbody, > thead {
> tr, > th {
> td, > th {
margin: 0;
padding: 10px 15px;
text-align: center;
}
> td:first-child {
text-align: left;
}
}
}
> thead {
> tr {
> th {
background-color: $color-off-white;
color: $color-gray;
}
> th:first-child {
background-color: $color-white !important;
border: none !important;
}
}
}
}
}
.section-divider {

View file

@ -2,8 +2,8 @@
<div class="document-customfields">
<div class="row">
<div class="col-3 heading">Categories</div>
<div class="col-9 value">
<div class="col-12 col-sm-3 heading">Categories</div>
<div class="col-12 col-sm-9 value">
{{#each selectedCategories as |cat|}}
{{#link-to 'folder' folder.id folder.slug (query-params category=cat.id)}}
{{cat.category}}
@ -27,8 +27,8 @@
</div>
<div class="row">
<div class="col-3 heading">Tags</div>
<div class="col-9 value">
<div class="col-12 col-sm-3 heading">Tags</div>
<div class="col-12 col-sm-9 value">
{{#each tagz as |t index|}}
{{#link-to 'search' (query-params filter=t matchTag=true)}}
{{concat '#' t}}

View file

@ -164,8 +164,6 @@ let PageModel = BaseModel.extend({
title: "",
body: "",
rawBody: "",
protection: constants.ProtectionType.None,
approval: constants.ApprovalType.None,
meta: {},
tagName: computed('level', function () {