v1.18.x
Barış Soner Uşaklı 6 years ago
parent 5031bfe8c0
commit 9d1fcf4e36

@ -11,6 +11,7 @@
"search-users": "Search Users",
"search-tags": "Search Tags",
"allow-local-login": "Local Login",
"allow-group-creation": "Group Create",
"find-category": "Find Category",
"access-category": "Access Category",

@ -3,8 +3,6 @@
"private-groups": "Private Groups",
"private-groups.help": "If enabled, joining of groups requires the approval of the group owner <em>(Default: enabled)</em>",
"private-groups.warning": "<strong>Beware!</strong> If this option is disabled and you have private groups, they automatically become public.",
"allow-creation": "Allow Group Creation",
"allow-creation-help": "If enabled, users can create groups <em>(Default: disabled)</em>",
"allow-multiple-badges-help": "This flag can be used to allow users to select multiple group badges, requires theme support.",
"max-name-length": "Maximum Group Name Length",
"cover-image": "Group Cover Image",

@ -178,7 +178,7 @@
}
}
return states.map(function (priv) {
var guestDisabled = ['groups:moderate', 'groups:posts:upvote', 'groups:posts:downvote', 'groups:local:login'];
var guestDisabled = ['groups:moderate', 'groups:posts:upvote', 'groups:posts:downvote', 'groups:local:login', 'groups:group:create'];
var spidersEnabled = ['groups:find', 'groups:read', 'groups:topics:read'];
var disabled =
(member === 'guests' && guestDisabled.includes(priv.name)) ||

@ -8,6 +8,7 @@ var groups = require('../groups');
var user = require('../user');
var helpers = require('./helpers');
var pagination = require('../pagination');
var privileges = require('../privileges');
var groupsController = module.exports;
@ -34,12 +35,15 @@ groupsController.getGroupsFromSet = function (uid, sort, start, stop, callback)
async.waterfall([
function (next) {
groups.getGroupsFromSet(set, uid, start, stop, next);
async.parallel({
groupsData: async.apply(groups.getGroupsFromSet, set, uid, start, stop),
allowGroupCreation: async.apply(privileges.global.can, 'group:create', uid),
}, next);
},
function (groupsData, next) {
function (results, next) {
next(null, {
groups: groupsData,
allowGroupCreation: meta.config.allowGroupCreation,
groups: results.groupsData,
allowGroupCreation: results.allowGroupCreation,
nextStart: stop + 1,
});
},

@ -22,6 +22,7 @@ module.exports = function (privileges) {
{ name: '[[admin/manage/privileges:search-users]]' },
{ name: '[[admin/manage/privileges:search-tags]]' },
{ name: '[[admin/manage/privileges:allow-local-login]]' },
{ name: '[[admin/manage/privileges:allow-group-creation]]' },
];
privileges.global.userPrivilegeList = [
@ -34,6 +35,7 @@ module.exports = function (privileges) {
'search:users',
'search:tags',
'local:login',
'group:create',
];
privileges.global.groupPrivilegeList = privileges.global.userPrivilegeList.map(function (privilege) {

@ -8,6 +8,7 @@ var user = require('../user');
var utils = require('../utils');
var groupsController = require('../controllers/groups');
var events = require('../events');
var privileges = require('../privileges');
var SocketGroups = module.exports;
@ -238,14 +239,22 @@ SocketGroups.kick = isOwner(function (socket, data, callback) {
SocketGroups.create = function (socket, data, callback) {
if (!socket.uid) {
return callback(new Error('[[error:no-privileges]]'));
} else if (!meta.config.allowGroupCreation) {
return callback(new Error('[[error:group-creation-disabled]]'));
} else if (groups.isPrivilegeGroup(data.name)) {
return callback(new Error('[[error:invalid-group-name]]'));
}
data.ownerUid = socket.uid;
groups.create(data, callback);
async.waterfall([
function (next) {
privileges.global.can('group:create', socket.uid, next);
},
function (canCreate, next) {
if (!canCreate) {
return next(new Error('[[error:no-privileges]]'));
}
data.ownerUid = socket.uid;
groups.create(data, next);
},
], callback);
};
SocketGroups.delete = isOwner(function (socket, data, callback) {

@ -0,0 +1,16 @@
'use strict';
var privileges = require('../../privileges');
module.exports = {
name: 'Update category watch data',
timestamp: Date.UTC(2019, 0, 4),
method: function (callback) {
var meta = require('../../meta');
if (parseInt(meta.config.allowGroupCreation, 10) === 1) {
privileges.global.give(['groups:create'], 'registered-users', callback);
} else {
setImmediate(callback);
}
},
};

@ -18,17 +18,6 @@
[[admin/settings/group:private-groups.warning]]
</p>
<div class="checkbox">
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="allowGroupCreation">
<span class="mdl-switch__label"><strong>[[admin/settings/group:allow-creation]]</strong></span>
</label>
</div>
<p class="help-block">
[[admin/settings/group:allow-creation-help]]
</p>
<div class="checkbox">
<label class="mdl-switch mdl-js-switch mdl-js-ripple-effect">
<input class="mdl-switch__input" type="checkbox" data-field="allowMultipleBadges">

@ -743,6 +743,7 @@ describe('Categories', function () {
'upload:post:file': false,
signature: false,
'local:login': false,
'group:create': false,
});
done();
@ -787,6 +788,7 @@ describe('Categories', function () {
'groups:upload:post:file': false,
'groups:signature': true,
'groups:local:login': true,
'groups:group:create': false,
});
done();

@ -985,31 +985,21 @@ describe('Groups', function () {
});
it('should fail to create group if group creation is disabled', function (done) {
var oldValue = meta.config.allowGroupCreation;
meta.config.allowGroupCreation = 0;
socketGroups.create({ uid: 1 }, {}, function (err) {
assert.equal(err.message, '[[error:group-creation-disabled]]');
meta.config.allowGroupCreation = oldValue;
socketGroups.create({ uid: testUid }, {}, function (err) {
assert.equal(err.message, '[[error:no-privileges]]');
done();
});
});
it('should fail to create group if name is privilege group', function (done) {
var oldValue = meta.config.allowGroupCreation;
meta.config.allowGroupCreation = 1;
socketGroups.create({ uid: 1 }, { name: 'cid:1:privileges:groups:find' }, function (err) {
assert.equal(err.message, '[[error:invalid-group-name]]');
meta.config.allowGroupCreation = oldValue;
done();
});
});
it('should create/update group', function (done) {
var oldValue = meta.config.allowGroupCreation;
meta.config.allowGroupCreation = 1;
socketGroups.create({ uid: adminUid }, { name: 'createupdategroup' }, function (err, groupData) {
meta.config.allowGroupCreation = oldValue;
assert.ifError(err);
assert(groupData);
var data = {
@ -1041,10 +1031,7 @@ describe('Groups', function () {
});
it('should fail to create a group with name guests', function (done) {
var oldValue = meta.config.allowGroupCreation;
meta.config.allowGroupCreation = 1;
socketGroups.create({ uid: adminUid }, { name: 'guests' }, function (err) {
meta.config.allowGroupCreation = oldValue;
assert.equal(err.message, '[[error:invalid-group-name]]');
done();
});

Loading…
Cancel
Save