Skip to content

Commit e4d59b6

Browse files
authored
Added GrantPermissions action to PermissionsController (#780)
* Added GrantPermissions action to PermissionsController * Added test for PermissionController:grantPermissions action
1 parent e4925ee commit e4d59b6

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

src/permissions/PermissionController.test.ts

+21-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import {
3030
RestrictedMethodParameters,
3131
ValidPermission,
3232
} from '.';
33-
3433
// Caveat types and specifications
3534

3635
const CaveatTypes = {
@@ -4492,6 +4491,27 @@ describe('PermissionController', () => {
44924491
);
44934492
});
44944493

4494+
it('action: PermissionsController:grantPermissions', async () => {
4495+
const messenger = getUnrestrictedMessenger();
4496+
const options = getPermissionControllerOptions({
4497+
messenger: getPermissionControllerMessenger(messenger),
4498+
});
4499+
const controller = new PermissionController<
4500+
DefaultPermissionSpecifications,
4501+
DefaultCaveatSpecifications
4502+
>(options);
4503+
4504+
const result = messenger.call('PermissionController:grantPermissions', {
4505+
subject: { origin: 'foo' },
4506+
approvedPermissions: { wallet_getSecretArray: {} },
4507+
});
4508+
4509+
expect(result).toHaveProperty('wallet_getSecretArray');
4510+
expect(
4511+
controller.hasPermission('foo', 'wallet_getSecretArray'),
4512+
).toStrictEqual(true);
4513+
});
4514+
44954515
it('action: PermissionsController:requestPermissions', async () => {
44964516
const messenger = getUnrestrictedMessenger();
44974517
const options = getPermissionControllerOptions({

src/permissions/PermissionController.ts

+14
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,14 @@ export type HasPermission = {
212212
handler: GenericPermissionController['hasPermission'];
213213
};
214214

215+
/**
216+
* Directly grants given permissions for a specificed origin without requesting user approval
217+
*/
218+
export type GrantPermissions = {
219+
type: `${typeof controllerName}:grantPermissions`;
220+
handler: GenericPermissionController['grantPermissions'];
221+
};
222+
215223
/**
216224
* Requests given permissions for a specified origin
217225
*/
@@ -272,6 +280,7 @@ export type PermissionControllerActions =
272280
| GetPermissions
273281
| HasPermission
274282
| HasPermissions
283+
| GrantPermissions
275284
| RequestPermissions
276285
| RevokeAllPermissions
277286
| RevokePermissionForAllSubjects
@@ -690,6 +699,11 @@ export class PermissionController<
690699
(origin: OriginString) => this.hasPermissions(origin),
691700
);
692701

702+
this.messagingSystem.registerActionHandler(
703+
`${controllerName}:grantPermissions` as const,
704+
this.grantPermissions.bind(this),
705+
);
706+
693707
this.messagingSystem.registerActionHandler(
694708
`${controllerName}:requestPermissions` as const,
695709
(subject: PermissionSubjectMetadata, permissions: RequestedPermissions) =>

0 commit comments

Comments
 (0)