|
|
|
@ -1,7 +1,6 @@
|
|
|
|
|
import Route from '@ember/routing/route'; |
|
|
|
|
import { get, setProperties, action } from '@ember/object'; |
|
|
|
|
import { inject as service } from '@ember/service'; |
|
|
|
|
import HTTPError from 'consul-ui/utils/http/error'; |
|
|
|
|
|
|
|
|
|
// paramsFor
|
|
|
|
|
import { routes } from 'consul-ui/router'; |
|
|
|
@ -50,27 +49,6 @@ export default class BaseRoute extends Route {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Inspects a custom `abilities` array on the router for this route. Every |
|
|
|
|
* abililty needs to 'pass' for the route not to throw a 403 error. Anything |
|
|
|
|
* more complex then this (say ORs) should use a single ability and perform |
|
|
|
|
* the OR logic in the test for the ability. Note, this ability check happens |
|
|
|
|
* before any calls to the backend for this model/route. |
|
|
|
|
*/ |
|
|
|
|
async beforeModel() { |
|
|
|
|
// remove any references to index as it is the same as the root routeName
|
|
|
|
|
const routeName = this.routeName |
|
|
|
|
.split('.') |
|
|
|
|
.filter(item => item !== 'index') |
|
|
|
|
.join('.'); |
|
|
|
|
const abilities = get(routes, `${routeName}._options.abilities`) || []; |
|
|
|
|
if (abilities.length > 0) { |
|
|
|
|
if (!abilities.every(ability => this.permissions.can(ability))) { |
|
|
|
|
throw new HTTPError('403'); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* By default any empty string query parameters should remove the query |
|
|
|
|
* parameter from the URL. This is the most common behavior if you don't |
|
|
|
|