From 933e2727649d2af0b2922390bfc485399544ad12 Mon Sep 17 00:00:00 2001 From: Zhihe Li Date: Wed, 1 Nov 2023 12:06:40 -0400 Subject: [PATCH] =?UTF-8?q?fix:=20=F0=9F=90=9B=20Add=20read:self=20permiss?= =?UTF-8?q?ion=20for=20sessions=20in=20ability=20check=20(#1974)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- addons/api/addon/abilities/session.js | 5 ++++- .../api/tests/unit/abilities/session-test.js | 11 ++++++++++ .../projects/sessions/index-test.js | 20 +++++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/addons/api/addon/abilities/session.js b/addons/api/addon/abilities/session.js index dbe7d26a1..ba9e7301f 100644 --- a/addons/api/addon/abilities/session.js +++ b/addons/api/addon/abilities/session.js @@ -18,6 +18,9 @@ export default class SessionAbility extends ModelAbility { * @type {boolean} */ get canRead() { - return (this.model.isActive || this.model.isPending) && super.canRead; + return ( + (this.model.isActive || this.model.isPending) && + (this.hasAuthorizedAction('read:self') || super.canRead) + ); } } diff --git a/addons/api/tests/unit/abilities/session-test.js b/addons/api/tests/unit/abilities/session-test.js index f983491e6..2d2d2ab75 100644 --- a/addons/api/tests/unit/abilities/session-test.js +++ b/addons/api/tests/unit/abilities/session-test.js @@ -97,4 +97,15 @@ module('Unit | Ability | session', function (hooks) { assert.false(canService.can('read session', session)); }); + + test('can read a session that has read:self', function (assert) { + assert.expect(1); + + const session = store.createRecord('session', { + authorized_actions: ['read:self'], + status: STATUS_SESSION_ACTIVE, + }); + + assert.true(canService.can('read session', session)); + }); }); diff --git a/ui/desktop/tests/acceptance/projects/sessions/index-test.js b/ui/desktop/tests/acceptance/projects/sessions/index-test.js index 022eedfc8..2d052ed74 100644 --- a/ui/desktop/tests/acceptance/projects/sessions/index-test.js +++ b/ui/desktop/tests/acceptance/projects/sessions/index-test.js @@ -189,6 +189,26 @@ module('Acceptance | projects | sessions', function (hooks) { .isVisible(); }); + test('can link to an active session with read:self permissions', async function (assert) { + assert.expect(1); + this.server.schema.sessions.all().destroy(); + this.server.create('session', { + authorized_actions: ['read:self'], + scope: instances.scopes.project, + target: instances.target, + status: STATUS_SESSION_ACTIVE, + user: instances.user, + }); + + await visit(urls.sessions); + + assert + .dom( + 'tbody tr:first-child td:first-child [data-test-session-detail-link]' + ) + .isVisible(); + }); + test('can link to a pending session', async function (assert) { assert.expect(1); instances.session.update({ status: STATUS_SESSION_PENDING });