60 lines
1.3 KiB
JavaScript
60 lines
1.3 KiB
JavaScript
import { Ability } from 'ember-can';
|
|
|
|
/**
|
|
* Generic ability provides abilities common to all models in the API.
|
|
*/
|
|
export default class ModelAbility extends Ability {
|
|
// =permissions
|
|
|
|
/**
|
|
* @type {boolean}
|
|
*/
|
|
get canRead() {
|
|
return this.hasAuthorizedAction('read');
|
|
}
|
|
|
|
/**
|
|
* @type {boolean}
|
|
*/
|
|
get canUpdate() {
|
|
return this.hasAuthorizedAction('update');
|
|
}
|
|
|
|
/**
|
|
* @type {boolean}
|
|
*/
|
|
get canDelete() {
|
|
return this.hasAuthorizedAction('delete');
|
|
}
|
|
|
|
/**
|
|
* To save an existing model (already persisted to the API), it must contain
|
|
* the the `update` authorized action.
|
|
*
|
|
* For now, new models _always_ have this ability. The reason is because the
|
|
* `create` action is authorized on collections, not individual records. So
|
|
* this function can't actually tell from a model instance if create
|
|
* is allowed.
|
|
*
|
|
* @type {boolean}
|
|
*/
|
|
get canSave() {
|
|
if (this.model.isNew || (!this.model.isNew && this.canUpdate)) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
// =methods
|
|
|
|
/**
|
|
* Returns true if the given action is contained in the ability model's
|
|
* `authorized_actions` array.
|
|
* @param {string} action
|
|
* @return {boolean}
|
|
*/
|
|
hasAuthorizedAction(action) {
|
|
return this.model.authorized_actions?.includes(action);
|
|
}
|
|
}
|