mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-02 12:05:57 +01:00
refactored groups and categories, groups no longer explodes when
attempting to add members to a whitelist that doesn't exist, isEmpty checks (new methods!) and such...
This commit is contained in:
@@ -246,15 +246,15 @@ define(function() {
|
|||||||
readMembers = modalEl.find('#category-permissions-read'),
|
readMembers = modalEl.find('#category-permissions-read'),
|
||||||
writeMembers = modalEl.find('#category-permissions-write');
|
writeMembers = modalEl.find('#category-permissions-write');
|
||||||
socket.emit('api:admin.categories.getPrivilegeSettings', cid, function(err, privilegeList) {
|
socket.emit('api:admin.categories.getPrivilegeSettings', cid, function(err, privilegeList) {
|
||||||
var readLength = privilegeList['+r'].members.length,
|
var readLength = privilegeList['+r'].length,
|
||||||
writeLength = privilegeList['+w'].members.length,
|
writeLength = privilegeList['+w'].length,
|
||||||
readFrag = document.createDocumentFragment(),
|
readFrag = document.createDocumentFragment(),
|
||||||
writeFrag = document.createDocumentFragment(),
|
writeFrag = document.createDocumentFragment(),
|
||||||
liEl = document.createElement('li'),
|
liEl = document.createElement('li'),
|
||||||
x, userObj;
|
x, userObj;
|
||||||
|
|
||||||
for(x=0;x<readLength;x++) {
|
for(x=0;x<readLength;x++) {
|
||||||
userObj = privilegeList['+r'].members[x];
|
userObj = privilegeList['+r'][x];
|
||||||
liEl.setAttribute('data-uid', userObj.uid);
|
liEl.setAttribute('data-uid', userObj.uid);
|
||||||
|
|
||||||
liEl.innerHTML = '<img src="' + userObj.picture + '" title="' + userObj.username + '" />';
|
liEl.innerHTML = '<img src="' + userObj.picture + '" title="' + userObj.username + '" />';
|
||||||
@@ -262,7 +262,7 @@ define(function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for(x=0;x<writeLength;x++) {
|
for(x=0;x<writeLength;x++) {
|
||||||
userObj = privilegeList['+w'].members[x];
|
userObj = privilegeList['+w'][x];
|
||||||
liEl.setAttribute('data-uid', userObj.uid);
|
liEl.setAttribute('data-uid', userObj.uid);
|
||||||
|
|
||||||
liEl.innerHTML = '<img src="' + userObj.picture + '" title="' + userObj.username + '" />';
|
liEl.innerHTML = '<img src="' + userObj.picture + '" title="' + userObj.username + '" />';
|
||||||
|
|||||||
@@ -8,20 +8,42 @@ var Groups = require('./groups'),
|
|||||||
CategoryTools.privileges = function(cid, uid, callback) {
|
CategoryTools.privileges = function(cid, uid, callback) {
|
||||||
async.parallel({
|
async.parallel({
|
||||||
"+r": function(next) {
|
"+r": function(next) {
|
||||||
Groups.exists('cid:' + cid + ':privileges:+r', function(err, exists) {
|
var key = 'cid:' + cid + ':privileges:+r';
|
||||||
|
Groups.exists(key, function(err, exists) {
|
||||||
if (exists) {
|
if (exists) {
|
||||||
Groups.isMemberByGroupName(uid, 'cid:' + cid + ':privileges:+r', next);
|
async.parallel({
|
||||||
|
isMember: function(next) {
|
||||||
|
Groups.isMemberByGroupName(uid, key, next);
|
||||||
|
},
|
||||||
|
isEmpty: function(next) {
|
||||||
|
Groups.isEmptyByGroupName(key, next);
|
||||||
|
}
|
||||||
|
}, next);
|
||||||
} else {
|
} else {
|
||||||
next(null, true);
|
next(null, {
|
||||||
|
isMember: false,
|
||||||
|
isEmpty: true
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
"+w": function(next) {
|
"+w": function(next) {
|
||||||
Groups.exists('cid:' + cid + ':privileges:+w', function(err, exists) {
|
var key = 'cid:' + cid + ':privileges:+w';
|
||||||
|
Groups.exists(key, function(err, exists) {
|
||||||
if (exists) {
|
if (exists) {
|
||||||
Groups.isMemberByGroupName(uid, 'cid:' + cid + ':privileges:+w', next);
|
async.parallel({
|
||||||
|
isMember: function(next) {
|
||||||
|
Groups.isMemberByGroupName(uid, key, next);
|
||||||
|
},
|
||||||
|
isEmpty: function(next) {
|
||||||
|
Groups.isEmptyByGroupName(key, next);
|
||||||
|
}
|
||||||
|
}, next);
|
||||||
} else {
|
} else {
|
||||||
next(null, true);
|
next(null, {
|
||||||
|
isMember: false,
|
||||||
|
isEmpty: true
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@@ -33,10 +55,10 @@ CategoryTools.privileges = function(cid, uid, callback) {
|
|||||||
}
|
}
|
||||||
}, function(err, privileges) {
|
}, function(err, privileges) {
|
||||||
callback(err, !privileges ? null : {
|
callback(err, !privileges ? null : {
|
||||||
"+r": privileges['+r'],
|
"+r": privileges['+r'].isMember,
|
||||||
"+w": privileges['+w'],
|
"+w": privileges['+w'].isMember,
|
||||||
read: privileges['+r'] || privileges.moderator || privileges.admin,
|
read: (privileges['+r'].isMember || privileges['+r'].isEmpty) || privileges.moderator || privileges.admin,
|
||||||
write: privileges['+w'] || privileges.moderator || privileges.admin,
|
write: (privileges['+w'].isMember || privileges['+w'].isEmpty) || privileges.moderator || privileges.admin,
|
||||||
editable: privileges.moderator || privileges.admin,
|
editable: privileges.moderator || privileges.admin,
|
||||||
view_deleted: privileges.moderator || privileges.admin
|
view_deleted: privileges.moderator || privileges.admin
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -105,6 +105,22 @@
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Groups.isEmpty = function(gid, callback) {
|
||||||
|
RDB.scard('gid:' + gid + ':members', function(err, numMembers) {
|
||||||
|
callback(err, numMembers === 0);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
Groups.isEmptyByGroupName = function(groupName, callback) {
|
||||||
|
Groups.getGidFromName(groupName, function(err, gid) {
|
||||||
|
if (err || !gid) {
|
||||||
|
callback(new Error('gid-not-found'));
|
||||||
|
} else {
|
||||||
|
Groups.isEmpty(gid, callback);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
Groups.exists = function(name, callback) {
|
Groups.exists = function(name, callback) {
|
||||||
async.parallel({
|
async.parallel({
|
||||||
exists: function(next) {
|
exists: function(next) {
|
||||||
@@ -169,7 +185,9 @@
|
|||||||
Groups.joinByGroupName = function(groupName, uid, callback) {
|
Groups.joinByGroupName = function(groupName, uid, callback) {
|
||||||
Groups.getGidFromName(groupName, function(err, gid) {
|
Groups.getGidFromName(groupName, function(err, gid) {
|
||||||
if (err || !gid) {
|
if (err || !gid) {
|
||||||
callback(new Error('gid-not-found'));
|
Groups.create(groupName, '', function(err, groupObj) {
|
||||||
|
Groups.join(groupObj.gid, uid, callback);
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
Groups.join(gid, uid, callback);
|
Groups.join(gid, uid, callback);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1016,7 +1016,19 @@ module.exports.init = function(io) {
|
|||||||
"+w": function(next) {
|
"+w": function(next) {
|
||||||
Groups.getByGroupName('cid:' + cid + ':privileges:+w', { expand: true }, next);
|
Groups.getByGroupName('cid:' + cid + ':privileges:+w', { expand: true }, next);
|
||||||
}
|
}
|
||||||
}, callback);
|
}, function(err, data) {
|
||||||
|
if (!err) {
|
||||||
|
callback(null, {
|
||||||
|
"+r": data['+r'].members,
|
||||||
|
"+w": data['+w'].members
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
callback(null, {
|
||||||
|
"+r": [],
|
||||||
|
"+w": []
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
socket.on('api:admin.themes.getInstalled', function(callback) {
|
socket.on('api:admin.themes.getInstalled', function(callback) {
|
||||||
|
|||||||
Reference in New Issue
Block a user