|
|
@@ -758,12 +758,17 @@ module.exports = function(crowi) {
|
|
|
});
|
|
|
};
|
|
|
|
|
|
- pageSchema.statics.updateGrant = function(page, grant, userData) {
|
|
|
+ pageSchema.statics.updateGrant = function (page, grant, userData, grantUserGroup) {
|
|
|
var Page = this;
|
|
|
+ var PageGroupRelation = crowi.model('PageGroupRelation');
|
|
|
+ var provGrant = page.grant;
|
|
|
|
|
|
+ if (grant == GRANT_USER_GROUP && grantUserGroup == null) {
|
|
|
+ grant = GRANT_PUBLIC;
|
|
|
+ }
|
|
|
return new Promise(function(resolve, reject) {
|
|
|
page.grant = grant;
|
|
|
- if (grant == GRANT_PUBLIC) {
|
|
|
+ if (grant == GRANT_PUBLIC || grant == GRANT_USER_GROUP) {
|
|
|
page.grantedUsers = [];
|
|
|
} else {
|
|
|
page.grantedUsers = [];
|
|
|
@@ -776,11 +781,51 @@ module.exports = function(crowi) {
|
|
|
return reject(err);
|
|
|
}
|
|
|
|
|
|
+ // グループから外れたとき、関係性を削除
|
|
|
+ if (provGrant == GRANT_USER_GROUP && provGrant != grant) {
|
|
|
+ PageGroupRelation.removeRelationByUserGroupAndPage(grantUserGroup, page, function (err, result) {
|
|
|
+ if (err) {
|
|
|
+ return reject(err);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ // グループに紐づけられたとき、関係性を生成
|
|
|
+ if (provGrant != GRANT_USER_GROUP && grant == GRANT_USER_GROUP) {
|
|
|
+ UserGroupRelation.createRelation(userGroupData, page, function (err, relationData) {
|
|
|
+ if (err) {
|
|
|
+ return reject(err);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
return resolve(data);
|
|
|
});
|
|
|
});
|
|
|
};
|
|
|
|
|
|
+ pageSchema.statics.updateGrantUserGroup = function(page, userGroupData) {
|
|
|
+ var Page = this
|
|
|
+ , UserGroupRelation = crowi.model('UserGroupRelation');
|
|
|
+
|
|
|
+ return new Promise(function (resolve, reject) {
|
|
|
+ page.grant = GRANT_USER_GROUP;
|
|
|
+
|
|
|
+ page.save(function (err, data) {
|
|
|
+ debug('Page.updateGrant, saved grantedUsers.', err, data);
|
|
|
+ if (err) {
|
|
|
+ return reject(err);
|
|
|
+ }
|
|
|
+
|
|
|
+ UserGroupRelation.createRelation(userGroupData, page, function(err, relationData) {
|
|
|
+ if (err) {
|
|
|
+ return reject(err);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return resolve(data);
|
|
|
+ });
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
// Instance method でいいのでは
|
|
|
pageSchema.statics.pushToGrantedUsers = function(page, userData) {
|
|
|
|
|
|
@@ -837,7 +882,8 @@ module.exports = function(crowi) {
|
|
|
, Revision = crowi.model('Revision')
|
|
|
, format = options.format || 'markdown'
|
|
|
, grant = options.grant || GRANT_PUBLIC
|
|
|
- , redirectTo = options.redirectTo || null;
|
|
|
+ , redirectTo = options.redirectTo || null
|
|
|
+ , grantUserGroup = options.grantUserGroup || null;
|
|
|
|
|
|
// force public
|
|
|
if (isPortalPath(path)) {
|
|
|
@@ -867,6 +913,13 @@ module.exports = function(crowi) {
|
|
|
return reject(err);
|
|
|
}
|
|
|
|
|
|
+ if (newPage.grant == Page.GRANT_USER_GROUP && grantUserGroup != null) {
|
|
|
+ UserGroupRelation.createRelation(grantUserGroup, newPage, function (err, relationData) {
|
|
|
+ if (err) {
|
|
|
+ return reject(err);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
var newRevision = Revision.prepareRevision(newPage, body, user, {format: format});
|
|
|
Page.pushRevision(newPage, newRevision, user).then(function(data) {
|
|
|
resolve(data);
|
|
|
@@ -884,6 +937,7 @@ module.exports = function(crowi) {
|
|
|
var Page = this
|
|
|
, Revision = crowi.model('Revision')
|
|
|
, grant = options.grant || null
|
|
|
+ , grantUserGroup = options.grantUserGroup || null;
|
|
|
;
|
|
|
// update existing page
|
|
|
var newRevision = Revision.prepareRevision(pageData, body, user);
|
|
|
@@ -892,7 +946,7 @@ module.exports = function(crowi) {
|
|
|
Page.pushRevision(pageData, newRevision, user)
|
|
|
.then(function(revision) {
|
|
|
if (grant != pageData.grant) {
|
|
|
- return Page.updateGrant(pageData, grant, user).then(function(data) {
|
|
|
+ return Page.updateGrant(pageData, grant, user, grantUserGroup).then(function(data) {
|
|
|
debug('Page grant update:', data);
|
|
|
resolve(data);
|
|
|
pageEvent.emit('update', data, user);
|