5.15.1 • Published 2 months ago

@strapi/permissions v5.15.1

Weekly downloads
-
License
SEE LICENSE IN LI...
Repository
github
Last release
2 months ago

Strapi Permissions

Highly customizable permission engine made for Strapi

Get Started

yarn add @strapi/permissions
const permissions = require('@strapi/permissions');

const engine = permissions.engine.new({ providers });

const ability = await engine.generateAbility([
  { action: 'read' },
  { action: 'delete', subject: 'foo' },
  { action: 'update', subject: 'bar', properties: { fields: ['foobar'] } },
  {
    action: 'create',
    subject: 'foo',
    properties: { fields: ['foobar'] },
    conditions: ['isAuthor'],
  },
]);

ability.can('read'); // true
ability.can('publish'); // false
ability.can('update', 'foo'); // false
ability.can('update', 'bar'); // true
  • You need to give both an action and a condition provider as parameters when instantiating a new permission engine instance. They must be contained in a providers object property.
  • You can also pass an abilityBuilderFactory to customize what kind of ability the generateAbility method will return. By default it'll use a @casl/ability builder.

You can also register to some hooks for each engine instance. See lib/engine/hooks.js -> createEngineHooks for available hooks.

const permissions = require('@strapi/permissions');

const engine = permissions.engine
  .new({ providers })
  .on('before-format::validate.permission', ({ permission }) => {
    if (permission.action === 'read') {
      return false;
    }
  });

const ability = await engine.generateAbility([
  { action: 'read' },
  { action: 'delete', subject: 'foo' },
  { action: 'update', subject: 'bar', properties: { fields: ['foobar'] } },
  {
    action: 'create',
    subject: 'foo',
    properties: { fields: ['foobar'] },
    conditions: ['isAuthor'],
  },
]);

ability.can('read'); // false since the validation hook prevents the engine from registering the permission
ability.can('publish'); // false
ability.can('update', 'foo'); // false
ability.can('update', 'bar'); // true

The format.permission hook can be used to modify the permission.

const permissions = require('@strapi/permissions');

const engine = permissions.engine
  .new({ providers })
  .on('before-format::validate.permission', ({ permission }) => {
    if (permission.action === 'modify') {
      return false;
    }
  })
  .on('after-format::validate.permission', ({ permission }) => {
    if (permission.action === 'update') {
      return false;
    }
  })
  .on('format.permission', ({ permission }) => {
    if (permission.action === 'update') {
      return {
        ...permission,
        action: 'modify',
      };
    }
    if (permission.action === 'delete') {
      return {
        ...permission,
        action: 'remove',
      };
    }
    return permission;
  });

const ability = await engine.generateAbility([{ action: 'update' }, { action: 'delete' }]);

ability.can('update'); // false
ability.can('modify'); // true, because create was changed to 'modify'

ability.can('delete'); // false, doesn't exist because it was changed by format.permission
ability.can('remove'); // true, before-format::validate.permission validates before format.permission changed it
5.14.0

3 months ago

5.15.0

2 months ago

5.11.3

5 months ago

5.15.1

2 months ago

4.25.22

5 months ago

5.12.7

4 months ago

5.12.6

4 months ago

5.12.5

4 months ago

5.12.4

4 months ago

5.12.3

5 months ago

5.12.2

5 months ago

5.12.1

5 months ago

5.12.0

5 months ago

5.13.0-beta.1

4 months ago

5.13.0-beta.0

4 months ago

5.13.1

3 months ago

5.13.0

3 months ago

4.25.21

5 months ago

5.12.0-beta.0

5 months ago

5.12.0-beta.1

5 months ago

5.12.0-beta.2

5 months ago

5.11.2

5 months ago

5.11.1

5 months ago

5.11.0

5 months ago

4.25.20

7 months ago

4.25.17

9 months ago

4.25.16

9 months ago

4.25.19

7 months ago

4.25.18

8 months ago

5.10.4

6 months ago

5.10.3

6 months ago

5.10.2

6 months ago

5.10.1

6 months ago

5.10.0

6 months ago

5.8.1

7 months ago

5.8.0

7 months ago

5.4.2

9 months ago

5.4.1

9 months ago

5.4.0

9 months ago

5.6.0

8 months ago

5.7.0-beta.0

8 months ago

5.9.0

7 months ago

5.3.0

9 months ago

5.5.2

8 months ago

5.5.1

8 months ago

5.5.0

8 months ago

5.7.0

7 months ago

4.25.15

10 months ago

5.2.0

10 months ago

5.1.1

10 months ago

4.25.14

10 months ago

5.1.0

10 months ago

4.25.13

11 months ago

4.25.12

11 months ago

5.0.2-beta.0

11 months ago

5.0.6

10 months ago

5.0.5

10 months ago

5.0.4

10 months ago

5.0.3

10 months ago

5.0.2

11 months ago

5.0.1

11 months ago

5.0.0-rc.9

1 year ago

5.0.0-rc.0

1 year ago

5.0.0-rc.1

1 year ago

5.0.0-rc.2

1 year ago

5.0.0-rc.3

1 year ago

5.0.0-rc.4

1 year ago

5.0.0-rc.5

1 year ago

5.0.0-rc.6

1 year ago

5.0.0-rc.7

1 year ago

5.0.0-rc.8

1 year ago

4.25.11

11 months ago

4.25.10

12 months ago

5.0.0-rc.20

11 months ago

5.0.0-rc.21

11 months ago

5.0.0-rc.22

11 months ago

5.0.0-rc.23

11 months ago

5.0.0-rc.24

11 months ago

5.0.0-rc.25

11 months ago

5.0.0-rc.26

11 months ago

5.0.0-rc.27

11 months ago

5.0.0-rc.28

11 months ago

5.0.0-rc.29

11 months ago

5.0.0-rc.30

11 months ago

5.0.0-rc.10

1 year ago

5.0.0-rc.11

12 months ago

5.0.0-rc.12

12 months ago

5.0.0-rc.13

12 months ago

5.0.0-rc.14

11 months ago

5.0.0-rc.15

11 months ago

5.0.0-rc.16

11 months ago

5.0.0-rc.17

11 months ago

5.0.0-rc.18

11 months ago

5.0.0-rc.19

11 months ago

4.24.3

1 year ago

4.24.4

1 year ago

4.24.5

1 year ago

5.0.0-beta.11

1 year ago

5.0.0-beta.12

1 year ago

5.0.0-beta.10

1 year ago

5.0.0-beta.15

1 year ago

5.0.0-beta.16

1 year ago

5.0.0-beta.13

1 year ago

5.0.0-beta.14

1 year ago

5.0.0-beta.17

1 year ago

4.25.0

1 year ago

5.0.0

11 months ago

4.25.5

1 year ago

4.25.6

1 year ago

4.25.7

1 year ago

4.25.8

1 year ago

4.25.1

1 year ago

4.25.2

1 year ago

4.25.3

1 year ago

4.25.4

1 year ago

4.25.9

12 months ago

5.0.0-beta.8

1 year ago

5.0.0-beta.9

1 year ago

4.24.2

1 year ago

5.0.0-beta.7

1 year ago

4.24.1

1 year ago

5.0.0-beta.6

1 year ago

4.23.2

1 year ago

4.24.0

1 year ago

5.0.0-beta.5

1 year ago

4.23.1

1 year ago

5.0.0-beta.4

1 year ago

4.23.1-alpha.0

1 year ago

4.23.0

1 year ago

5.0.0-beta.3

1 year ago

4.22.1

1 year ago

4.22.0

1 year ago

5.0.0-beta.2

1 year ago

5.0.0-alpha.7

1 year ago

5.0.0-alpha.6

1 year ago

5.0.0-alpha.8

1 year ago

4.21.1

1 year ago

5.0.0-beta.1

1 year ago

5.0.0-alpha.5

1 year ago

5.0.0-alpha.4

1 year ago

5.0.0-alpha.3

1 year ago

4.21.0

1 year ago

5.0.0-beta.0

1 year ago

5.0.0-alpha.2

1 year ago

5.0.0-alpha.1

1 year ago

5.0.0-alpha.0

1 year ago

4.20.5

1 year ago

4.20.4

1 year ago

4.20.3

1 year ago

4.20.2

1 year ago

4.20.1

2 years ago

4.20.0

2 years ago

4.19.1

2 years ago

4.19.0

2 years ago

4.17.1

2 years ago

4.18.1-beta.0

2 years ago

4.18.1-beta.1

2 years ago

4.18.0

2 years ago

4.17.0

2 years ago

4.16.1

2 years ago

4.16.2

2 years ago

4.16.0

2 years ago

4.14.5

2 years ago

4.14.6

2 years ago

4.14.1

2 years ago

4.14.2

2 years ago

4.14.3

2 years ago

4.14.4

2 years ago

4.14.0

2 years ago

4.13.6

2 years ago

4.13.7

2 years ago

4.13.2

2 years ago

4.13.3

2 years ago

4.13.4

2 years ago

4.13.5

2 years ago

4.14.0-beta.0

2 years ago

4.13.0

2 years ago

4.13.1

2 years ago

4.15.4

2 years ago

4.15.5

2 years ago

4.15.0

2 years ago

4.15.1

2 years ago

4.15.2

2 years ago

4.15.3

2 years ago

4.15.5-alpha.1

2 years ago

4.15.5-alpha.0

2 years ago

4.15.5-alpha.3

2 years ago

4.15.5-alpha.2

2 years ago

4.15.5-alpha.5

2 years ago

4.15.5-alpha.4

2 years ago

4.14.0-alpha.0

2 years ago

4.15.5-alpha.6

2 years ago

4.12.7

2 years ago

4.12.4

2 years ago

4.12.5

2 years ago

4.12.6

2 years ago

4.12.0

2 years ago

4.12.1

2 years ago

4.12.2

2 years ago

4.11.4

2 years ago

4.11.5

2 years ago

4.11.6

2 years ago

4.11.7

2 years ago

4.11.3

2 years ago

4.13.0-beta.0

2 years ago

4.12.0-beta.1

2 years ago

4.12.0-beta.0

2 years ago

4.12.0-beta.5

2 years ago

4.12.0-beta.4

2 years ago

4.12.0-beta.3

2 years ago

4.15.0-alpha.0

2 years ago

4.13.0-alpha.0

2 years ago

4.13.0-alpha.1

2 years ago

4.13.0-alpha.2

2 years ago

4.15.3-alpha.0

2 years ago

4.15.3-alpha.1

2 years ago

4.15.3-alpha.2

2 years ago

4.15.3-alpha.3

2 years ago

4.10.8

2 years ago

4.11.0

2 years ago

4.11.1

2 years ago

4.11.2

2 years ago

4.10.8-exp.0

2 years ago

4.11.0-exp.2

2 years ago

4.11.0-exp.1

2 years ago

4.11.0-exp.0

2 years ago

4.11.1-beta.1

2 years ago

4.11.1-beta.0

2 years ago

4.11.1-beta.2

2 years ago

4.11.0-alpha.0

2 years ago

4.11.0-beta.1

2 years ago

4.11.0-beta.0

2 years ago

4.10.5

2 years ago

4.10.6

2 years ago

4.10.7

2 years ago

4.10.2

2 years ago

4.10.3

2 years ago

4.10.4

2 years ago

4.9.0

2 years ago

4.9.2

2 years ago

4.9.1

2 years ago

4.8.1

2 years ago

4.8.0

2 years ago

4.8.2

2 years ago

4.9.0-beta.2

2 years ago

4.10.2-alpha.0

2 years ago

4.10.1

2 years ago

4.10.0

2 years ago

4.9.0-beta.1

2 years ago

4.10.0-beta.0

2 years ago

4.10.0-beta.1

2 years ago

4.7.0

2 years ago

4.7.1

2 years ago

4.6.2

2 years ago

4.9.0-alpha.0

2 years ago

4.6.1

3 years ago

4.7.0-beta.0

3 years ago

4.5.4

3 years ago

4.5.6

3 years ago

4.5.5

3 years ago

4.6.0-alpha.1

3 years ago

4.6.0

3 years ago

4.6.0-beta.2

3 years ago

4.6.0-beta.1

3 years ago

4.6.0-beta.0

3 years ago

0.0.0-f2796222c3

3 years ago

4.5.3

3 years ago

4.5.0-beta.0

3 years ago

4.6.0-alpha.0

3 years ago

0.0.0-2574c22b30

3 years ago

4.4.3

3 years ago

4.4.2

3 years ago

0.0.0-76149f2f84

3 years ago

4.4.5

3 years ago

4.4.4

3 years ago

4.4.7

3 years ago

4.4.6

3 years ago

0.0.0-de3d4081f5

3 years ago

4.5.0

3 years ago

4.5.2

3 years ago

4.5.1

3 years ago

4.4.1

3 years ago

4.4.0

3 years ago

4.4.0-rc.1

3 years ago

4.4.0-rc.0

3 years ago

4.4.0-beta.4

3 years ago

4.4.0-beta.1

3 years ago

0.0.0

3 years ago