@bennerinformatics/ember-fw-gc
Version:
A set of components, controllers, routes, and helpers used in all Group-Control managed FW App System applications
64 lines (56 loc) • 1.91 kB
JavaScript
import Mixin from '@ember/object/mixin';
import {inject as injectService} from '@ember/service';
/**
* Mixin that encapsulates some of the route restriction behavior.
*
* If a roles array and a rejectedRoute property are specified, this mixin
* will ensure the user has adequate permissions before proceeding to the route.
* Mixin designed to be used by a route. Routes that use this mixin **MUST**
* also use the PermissionsMixin
*
* Usage: (in a routes file)
* ```javascript
* import Ember from 'ember';
* import PermissionsMixin from '@bennerinformatics/ember-fw-gc/mixins/permissions';
* import RestrictedRouteMixin from '@bennerinformatics/ember-fw-gc/mixins/restricted-route';
*
* export default Ember.Route.extend(PermissionsMixin, RestrictedRouteMixin, {
* // your code here
* });
* ```
*
* This mixin is used by the [RestrictedRoute](RestrictedRoute.html) in your app, which means that any route which extends `RestrictedRoute` in the
* Informatics Apps automatically incorporates this mixin.
*
* @public
* @class RestrictedRouteMixin
* @extends Ember.Mixin
* @module Mixins
*/
export default Mixin.create({
/**
* Array of roles to be passed to the match function
*
* @public
* @property roles
* @type {Array}
*/
roles: [],
/**
* Route to transition to if the roles check fails. This may have more use case to override than in AuthRoute.
*
* @public
* @property rejectedRoute
* @type {String}
* @default index
*/
rejectedRoute: 'index',
session: injectService(),
beforeModel(transition) {
let superResult = this._super(transition);
if (this.get('session.isAuthenticated')) {
this.permit(this.get('roles'), this.get('rejectedRoute'));
}
return superResult;
}
});