From cfa6c42506ff993c122e70ed33cbfe9bdca16bb0 Mon Sep 17 00:00:00 2001 From: Randall Morey Date: Wed, 29 Sep 2021 17:47:48 -0400 Subject: [PATCH] feature: add account set-password ability --- addons/api/addon/abilities/account.js | 15 +++++++++++++++ addons/api/addon/abilities/target.js | 2 +- addons/api/app/abilities/account.js | 1 + addons/api/mirage/factories/account.js | 1 + .../api/tests/unit/abilities/account-test-.js | 17 +++++++++++++++++ 5 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 addons/api/addon/abilities/account.js create mode 100644 addons/api/app/abilities/account.js create mode 100644 addons/api/tests/unit/abilities/account-test-.js diff --git a/addons/api/addon/abilities/account.js b/addons/api/addon/abilities/account.js new file mode 100644 index 000000000..147f73b9f --- /dev/null +++ b/addons/api/addon/abilities/account.js @@ -0,0 +1,15 @@ +import ModelAbility from './model'; + +/** + * Provides abilities for accounts. + */ +export default class AccountAbility extends ModelAbility { + // =permissions + + /** + * @type {boolean} + */ + get canSetPassword() { + return this.hasAuthorizedAction('set-password'); + } +} diff --git a/addons/api/addon/abilities/target.js b/addons/api/addon/abilities/target.js index fb6b30d33..11516c3b5 100644 --- a/addons/api/addon/abilities/target.js +++ b/addons/api/addon/abilities/target.js @@ -1,7 +1,7 @@ import ModelAbility from './model'; /** - * Provides a `connect` ability for targets. + * Provides abilities for targets. */ export default class TargetAbility extends ModelAbility { // =permissions diff --git a/addons/api/app/abilities/account.js b/addons/api/app/abilities/account.js new file mode 100644 index 000000000..e64435a5e --- /dev/null +++ b/addons/api/app/abilities/account.js @@ -0,0 +1 @@ +export { default } from 'api/abilities/account'; diff --git a/addons/api/mirage/factories/account.js b/addons/api/mirage/factories/account.js index 5b7a14c09..f5da7b5af 100644 --- a/addons/api/mirage/factories/account.js +++ b/addons/api/mirage/factories/account.js @@ -9,6 +9,7 @@ export default factory.extend({ 'read', 'update', 'delete', + 'set-password', ], attributes() { switch (this.type) { diff --git a/addons/api/tests/unit/abilities/account-test-.js b/addons/api/tests/unit/abilities/account-test-.js new file mode 100644 index 000000000..afd89329d --- /dev/null +++ b/addons/api/tests/unit/abilities/account-test-.js @@ -0,0 +1,17 @@ +import { module, test } from 'qunit'; +import { setupTest } from 'ember-qunit'; + +module('Unit | Abilities | Account', function (hooks) { + setupTest(hooks); + + test('it reflects when a given account may set password based on authorized_actions', function (assert) { + assert.expect(2); + const service = this.owner.lookup('service:can'); + const model = { + authorized_actions: ['set-password'], + }; + assert.ok(service.can('setPassword target', model)); + model.authorized_actions = []; + assert.notOk(service.can('setPassword target', model)); + }); +});