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:
parent
f4f32bcfcb
commit
b9394a4967
28 changed files with 983 additions and 355 deletions
|
@ -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');
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
25
gui/app/models/document-role.js
Normal file
25
gui/app/models/document-role.js
Normal 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
|
||||
});
|
|
@ -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";
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
});
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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()
|
||||
});
|
||||
|
|
13
gui/app/serializers/document-role.js
Normal file
13
gui/app/serializers/document-role.js
Normal 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
|
||||
}
|
||||
};
|
||||
}
|
||||
});
|
|
@ -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;
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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}}
|
||||
|
|
|
@ -164,8 +164,6 @@ let PageModel = BaseModel.extend({
|
|||
title: "",
|
||||
body: "",
|
||||
rawBody: "",
|
||||
protection: constants.ProtectionType.None,
|
||||
approval: constants.ApprovalType.None,
|
||||
meta: {},
|
||||
|
||||
tagName: computed('level', function () {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue