From 4506cf6a11f7a810ef79a775f175420850d1839b Mon Sep 17 00:00:00 2001 From: Kane York Date: Mon, 7 Dec 2020 15:13:14 -0800 Subject: [PATCH] FIX: Use standard error handling for requests, special-case moderators (#84) By removing the catch and letting the error propagate to the top-level error handler, we can receive more detailed error reports including exactly which request failed. The assumption that any request failure is a permissions error is replaced by an explicit client-side check before making any requests. --- .../routes/admin-plugins-explorer.js.es6 | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/assets/javascripts/discourse/routes/admin-plugins-explorer.js.es6 b/assets/javascripts/discourse/routes/admin-plugins-explorer.js.es6 index 4bad072..78f95e2 100644 --- a/assets/javascripts/discourse/routes/admin-plugins-explorer.js.es6 +++ b/assets/javascripts/discourse/routes/admin-plugins-explorer.js.es6 @@ -1,40 +1,40 @@ import { ajax } from "discourse/lib/ajax"; +import User from "discourse/models/user"; import DiscourseRoute from "discourse/routes/discourse"; export default DiscourseRoute.extend({ controllerName: "admin-plugins-explorer", model() { + if (!User.currentProp("admin")) { + // display "Only available to admins" message + return { model: null, schema: null, disallow: true, groups: null }; + } + const groupPromise = ajax("/admin/plugins/explorer/groups.json"); const schemaPromise = ajax("/admin/plugins/explorer/schema.json", { cache: true, }); const queryPromise = this.store.findAll("query"); - return groupPromise - .then((groups) => { - let groupNames = {}; - groups.forEach((g) => { - groupNames[g.id] = g.name; - }); - return schemaPromise.then((schema) => { - return queryPromise.then((model) => { - model.forEach((query) => { - query.markNotDirty(); - query.set( - "group_names", - (query.group_ids || []).map((id) => groupNames[id]) - ); - }); - return { model, schema, groups }; - }); - }); - }) - .catch(() => { - schemaPromise.catch(() => {}); - queryPromise.catch(() => {}); - return { model: null, schema: null, disallow: true, groups: null }; + return groupPromise.then((groups) => { + let groupNames = {}; + groups.forEach((g) => { + groupNames[g.id] = g.name; }); + return schemaPromise.then((schema) => { + return queryPromise.then((model) => { + model.forEach((query) => { + query.markNotDirty(); + query.set( + "group_names", + (query.group_ids || []).map((id) => groupNames[id]) + ); + }); + return { model, schema, groups }; + }); + }); + }); }, setupController(controller, model) {