mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 16:46:12 +01:00
fix: regression via c1b3079d93
Also refactored privilege render logic so that it no longer needs a server-side hack to render column count
This commit is contained in:
@@ -81,12 +81,8 @@ get:
|
|||||||
type: boolean
|
type: boolean
|
||||||
isSystem:
|
isSystem:
|
||||||
type: boolean
|
type: boolean
|
||||||
columnCountUser:
|
|
||||||
type: number
|
|
||||||
columnCountUserOther:
|
columnCountUserOther:
|
||||||
type: number
|
type: number
|
||||||
columnCountGroup:
|
|
||||||
type: number
|
|
||||||
columnCountGroupOther:
|
columnCountGroupOther:
|
||||||
type: number
|
type: number
|
||||||
categories:
|
categories:
|
||||||
|
|||||||
@@ -24,6 +24,25 @@ get:
|
|||||||
response:
|
response:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
|
labels:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
users:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
type: string
|
||||||
|
description: Language key of the privilege name's user-friendly name
|
||||||
|
groups:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
type: string
|
||||||
|
description: Language key of the privilege name's user-friendly name
|
||||||
users:
|
users:
|
||||||
type: array
|
type: array
|
||||||
items:
|
items:
|
||||||
@@ -60,3 +79,22 @@ get:
|
|||||||
type: boolean
|
type: boolean
|
||||||
isSystem:
|
isSystem:
|
||||||
type: boolean
|
type: boolean
|
||||||
|
keys:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
users:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
description: "Privilege name"
|
||||||
|
groups:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
description: "Privilege name"
|
||||||
|
columnCountUserOther:
|
||||||
|
type: number
|
||||||
|
description: "The number of additional user privileges added by plugins"
|
||||||
|
columnCountGroupOther:
|
||||||
|
type: number
|
||||||
|
description: "The number of additional group privileges added by plugins"
|
||||||
@@ -41,6 +41,25 @@ put:
|
|||||||
response:
|
response:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
|
labels:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
users:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
type: string
|
||||||
|
description: Language key of the privilege name's user-friendly name
|
||||||
|
groups:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
type: string
|
||||||
|
description: Language key of the privilege name's user-friendly name
|
||||||
users:
|
users:
|
||||||
type: array
|
type: array
|
||||||
items:
|
items:
|
||||||
@@ -77,6 +96,25 @@ put:
|
|||||||
type: boolean
|
type: boolean
|
||||||
isSystem:
|
isSystem:
|
||||||
type: boolean
|
type: boolean
|
||||||
|
keys:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
users:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
description: "Privilege name"
|
||||||
|
groups:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
description: "Privilege name"
|
||||||
|
columnCountUserOther:
|
||||||
|
type: number
|
||||||
|
description: "The number of additional user privileges added by plugins"
|
||||||
|
columnCountGroupOther:
|
||||||
|
type: number
|
||||||
|
description: "The number of additional user privileges added by plugins"
|
||||||
delete:
|
delete:
|
||||||
tags:
|
tags:
|
||||||
- categories
|
- categories
|
||||||
@@ -120,6 +158,25 @@ delete:
|
|||||||
response:
|
response:
|
||||||
type: object
|
type: object
|
||||||
properties:
|
properties:
|
||||||
|
labels:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
users:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
type: string
|
||||||
|
description: Language key of the privilege name's user-friendly name
|
||||||
|
groups:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
name:
|
||||||
|
type: string
|
||||||
|
description: Language key of the privilege name's user-friendly name
|
||||||
users:
|
users:
|
||||||
type: array
|
type: array
|
||||||
items:
|
items:
|
||||||
@@ -156,3 +213,22 @@ delete:
|
|||||||
type: boolean
|
type: boolean
|
||||||
isSystem:
|
isSystem:
|
||||||
type: boolean
|
type: boolean
|
||||||
|
keys:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
users:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
description: "Privilege name"
|
||||||
|
groups:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
description: "Privilege name"
|
||||||
|
columnCountUserOther:
|
||||||
|
type: number
|
||||||
|
description: "The number of additional user privileges added by plugins"
|
||||||
|
columnCountGroupOther:
|
||||||
|
type: number
|
||||||
|
description: "The number of additional user privileges added by plugins"
|
||||||
@@ -174,12 +174,8 @@ define('admin/manage/privileges', [
|
|||||||
api.get(`/categories/${cid}/privileges`, {}).then((privileges) => {
|
api.get(`/categories/${cid}/privileges`, {}).then((privileges) => {
|
||||||
ajaxify.data.privileges = { ...ajaxify.data.privileges, ...privileges };
|
ajaxify.data.privileges = { ...ajaxify.data.privileges, ...privileges };
|
||||||
var tpl = parseInt(cid, 10) ? 'admin/partials/privileges/category' : 'admin/partials/privileges/global';
|
var tpl = parseInt(cid, 10) ? 'admin/partials/privileges/category' : 'admin/partials/privileges/global';
|
||||||
Promise.all([
|
app.parseAndTranslate(tpl, { privileges }).then((html) => {
|
||||||
app.parseAndTranslate(tpl, 'privileges.groups', { privileges }),
|
$('.privilege-table-container').html(html);
|
||||||
app.parseAndTranslate(tpl, 'privileges.users', { privileges }),
|
|
||||||
]).then((html) => {
|
|
||||||
$('.privilege-table-container tbody').first().html(html[0]);
|
|
||||||
$('.privilege-table-container tbody').last().html(html[1]);
|
|
||||||
Privileges.exposeAssumedPrivileges();
|
Privileges.exposeAssumedPrivileges();
|
||||||
checkboxRowSelector.updateAll();
|
checkboxRowSelector.updateAll();
|
||||||
|
|
||||||
|
|||||||
@@ -53,14 +53,6 @@ categoriesAPI.getPrivileges = async (caller, cid) => {
|
|||||||
responsePayload = await privileges.categories.list(cid);
|
responsePayload = await privileges.categories.list(cid);
|
||||||
}
|
}
|
||||||
|
|
||||||
// The various privilege .list() methods return superfluous data for the template, return only a minimal set
|
|
||||||
const validKeys = ['users', 'groups'];
|
|
||||||
Object.keys(responsePayload).forEach((key) => {
|
|
||||||
if (!validKeys.includes(key)) {
|
|
||||||
delete responsePayload[key];
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return responsePayload;
|
return responsePayload;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -137,12 +137,10 @@ privsAdmin.list = async function (uid) {
|
|||||||
groupPrivilegeList.splice(idx, 1);
|
groupPrivilegeList.splice(idx, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getLabels() {
|
const labels = await utils.promiseParallel({
|
||||||
return await utils.promiseParallel({
|
|
||||||
users: plugins.hooks.fire('filter:privileges.admin.list_human', privilegeLabels.slice()),
|
users: plugins.hooks.fire('filter:privileges.admin.list_human', privilegeLabels.slice()),
|
||||||
groups: plugins.hooks.fire('filter:privileges.admin.groups.list_human', privilegeLabels.slice()),
|
groups: plugins.hooks.fire('filter:privileges.admin.groups.list_human', privilegeLabels.slice()),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
const keys = await utils.promiseParallel({
|
const keys = await utils.promiseParallel({
|
||||||
users: plugins.hooks.fire('filter:privileges.admin.list', userPrivilegeList.slice()),
|
users: plugins.hooks.fire('filter:privileges.admin.list', userPrivilegeList.slice()),
|
||||||
@@ -150,14 +148,12 @@ privsAdmin.list = async function (uid) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const payload = await utils.promiseParallel({
|
const payload = await utils.promiseParallel({
|
||||||
labels: getLabels(),
|
labels,
|
||||||
users: helpers.getUserPrivileges(0, keys.users),
|
users: helpers.getUserPrivileges(0, keys.users),
|
||||||
groups: helpers.getGroupPrivileges(0, keys.groups),
|
groups: helpers.getGroupPrivileges(0, keys.groups),
|
||||||
});
|
});
|
||||||
payload.keys = keys;
|
payload.keys = keys;
|
||||||
|
|
||||||
// This is a hack because I can't do {labels.users.length} to echo the count in templates.js
|
|
||||||
payload.columnCount = payload.labels.users.length + 3;
|
|
||||||
return payload;
|
return payload;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -54,12 +54,10 @@ privsCategories.privilegeList = privsCategories.userPrivilegeList.concat(privsCa
|
|||||||
|
|
||||||
// Method used in admin/category controller to show all users/groups with privs in that given cid
|
// Method used in admin/category controller to show all users/groups with privs in that given cid
|
||||||
privsCategories.list = async function (cid) {
|
privsCategories.list = async function (cid) {
|
||||||
async function getLabels() {
|
const labels = await utils.promiseParallel({
|
||||||
return await utils.promiseParallel({
|
|
||||||
users: plugins.hooks.fire('filter:privileges.list_human', privsCategories.privilegeLabels.slice()),
|
users: plugins.hooks.fire('filter:privileges.list_human', privsCategories.privilegeLabels.slice()),
|
||||||
groups: plugins.hooks.fire('filter:privileges.groups.list_human', privsCategories.privilegeLabels.slice()),
|
groups: plugins.hooks.fire('filter:privileges.groups.list_human', privsCategories.privilegeLabels.slice()),
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
const keys = await utils.promiseParallel({
|
const keys = await utils.promiseParallel({
|
||||||
users: plugins.hooks.fire('filter:privileges.list', privsCategories.userPrivilegeList.slice()),
|
users: plugins.hooks.fire('filter:privileges.list', privsCategories.userPrivilegeList.slice()),
|
||||||
@@ -67,17 +65,15 @@ privsCategories.list = async function (cid) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const payload = await utils.promiseParallel({
|
const payload = await utils.promiseParallel({
|
||||||
labels: getLabels(),
|
labels,
|
||||||
users: helpers.getUserPrivileges(cid, keys.users),
|
users: helpers.getUserPrivileges(cid, keys.users),
|
||||||
groups: helpers.getGroupPrivileges(cid, keys.groups),
|
groups: helpers.getGroupPrivileges(cid, keys.groups),
|
||||||
});
|
});
|
||||||
payload.keys = keys;
|
payload.keys = keys;
|
||||||
|
|
||||||
// This is a hack because I can't do {labels.users.length} to echo the count in templates.js
|
|
||||||
payload.columnCountUser = payload.labels.users.length + 3;
|
|
||||||
payload.columnCountUserOther = payload.labels.users.length - privsCategories.privilegeLabels.length;
|
payload.columnCountUserOther = payload.labels.users.length - privsCategories.privilegeLabels.length;
|
||||||
payload.columnCountGroup = payload.labels.groups.length + 3;
|
|
||||||
payload.columnCountGroupOther = payload.labels.groups.length - privsCategories.privilegeLabels.length;
|
payload.columnCountGroupOther = payload.labels.groups.length - privsCategories.privilegeLabels.length;
|
||||||
|
|
||||||
return payload;
|
return payload;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -60,7 +60,8 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
<tfoot>
|
<tfoot>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="{privileges.columnCountGroup}">
|
<td colspan="3"></td>
|
||||||
|
<td colspan="{privileges.keys.groups.length}">
|
||||||
<div class="btn-toolbar">
|
<div class="btn-toolbar">
|
||||||
<button type="button" class="btn btn-default pull-right" data-ajaxify="false" data-action="search.group">
|
<button type="button" class="btn btn-default pull-right" data-ajaxify="false" data-action="search.group">
|
||||||
<i class="fa fa-users"></i>
|
<i class="fa fa-users"></i>
|
||||||
@@ -138,7 +139,8 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
<tfoot>
|
<tfoot>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="{privileges.columnCountUser}">
|
<td colspan="3"></td>
|
||||||
|
<td colspan="{privileges.keys.users.length}">
|
||||||
<button type="button" class="btn btn-default pull-right" data-ajaxify="false" data-action="search.user">
|
<button type="button" class="btn btn-default pull-right" data-ajaxify="false" data-action="search.user">
|
||||||
<i class="fa fa-user"></i>
|
<i class="fa fa-user"></i>
|
||||||
[[admin/manage/categories:privileges.search-user]]
|
[[admin/manage/categories:privileges.search-user]]
|
||||||
|
|||||||
@@ -32,7 +32,8 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
<tfoot>
|
<tfoot>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="{privileges.columnCount}">
|
<td colspan="3"></td>
|
||||||
|
<td colspan="{privileges.keys.groups.length}">
|
||||||
<div class="btn-toolbar">
|
<div class="btn-toolbar">
|
||||||
<button type="button" class="btn btn-default pull-right" data-ajaxify="false" data-action="search.group">
|
<button type="button" class="btn btn-default pull-right" data-ajaxify="false" data-action="search.group">
|
||||||
<i class="fa fa-users"></i>
|
<i class="fa fa-users"></i>
|
||||||
@@ -84,7 +85,8 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
<tfoot>
|
<tfoot>
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="{privileges.columnCount}">
|
<td colspan="3"></td>
|
||||||
|
<td colspan="{privileges.keys.users.length}">
|
||||||
<button type="button" class="btn btn-default pull-right" data-ajaxify="false" data-action="search.user">
|
<button type="button" class="btn btn-default pull-right" data-ajaxify="false" data-action="search.user">
|
||||||
<i class="fa fa-user"></i>
|
<i class="fa fa-user"></i>
|
||||||
[[admin/manage/categories:privileges.search-user]]
|
[[admin/manage/categories:privileges.search-user]]
|
||||||
|
|||||||
Reference in New Issue
Block a user