5.15.1 • Published 11 days ago

@strapi/permissions v5.15.1

Weekly downloads
-
License
SEE LICENSE IN LI...
Repository
github
Last release
11 days 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

25 days ago

5.15.0

18 days ago

5.11.3

3 months ago

5.15.1

11 days ago

4.25.22

3 months ago

5.12.7

2 months ago

5.12.6

2 months ago

5.12.5

2 months ago

5.12.4

2 months ago

5.12.3

3 months ago

5.12.2

3 months ago

5.12.1

3 months ago

5.12.0

3 months ago

5.13.0-beta.1

2 months ago

5.13.0-beta.0

2 months ago

5.13.1

1 month ago

5.13.0

2 months ago

4.25.21

3 months ago

5.12.0-beta.0

3 months ago

5.12.0-beta.1

3 months ago

5.12.0-beta.2

3 months ago

5.11.2

3 months ago

5.11.1

3 months ago

5.11.0

4 months ago

4.25.20

5 months ago

4.25.17

7 months ago

4.25.16

7 months ago

4.25.19

5 months ago

4.25.18

6 months ago

5.10.4

4 months ago

5.10.3

4 months ago

5.10.2

4 months ago

5.10.1

4 months ago

5.10.0

4 months ago

5.8.1

5 months ago

5.8.0

5 months ago

5.4.2

7 months ago

5.4.1

7 months ago

5.4.0

7 months ago

5.6.0

6 months ago

5.7.0-beta.0

6 months ago

5.9.0

5 months ago

5.3.0

8 months ago

5.5.2

6 months ago

5.5.1

6 months ago

5.5.0

7 months ago

5.7.0

6 months ago

4.25.15

8 months ago

5.2.0

8 months ago

5.1.1

8 months ago

4.25.14

8 months ago

5.1.0

8 months ago

4.25.13

9 months ago

4.25.12

9 months ago

5.0.2-beta.0

9 months ago

5.0.6

8 months ago

5.0.5

9 months ago

5.0.4

9 months ago

5.0.3

9 months ago

5.0.2

9 months ago

5.0.1

9 months ago

5.0.0-rc.9

11 months ago

5.0.0-rc.0

12 months ago

5.0.0-rc.1

12 months ago

5.0.0-rc.2

12 months ago

5.0.0-rc.3

12 months ago

5.0.0-rc.4

11 months ago

5.0.0-rc.5

11 months ago

5.0.0-rc.6

11 months ago

5.0.0-rc.7

11 months ago

5.0.0-rc.8

11 months ago

4.25.11

9 months ago

4.25.10

10 months ago

5.0.0-rc.20

10 months ago

5.0.0-rc.21

9 months ago

5.0.0-rc.22

9 months ago

5.0.0-rc.23

9 months ago

5.0.0-rc.24

9 months ago

5.0.0-rc.25

9 months ago

5.0.0-rc.26

9 months ago

5.0.0-rc.27

9 months ago

5.0.0-rc.28

9 months ago

5.0.0-rc.29

9 months ago

5.0.0-rc.30

9 months ago

5.0.0-rc.10

10 months ago

5.0.0-rc.11

10 months ago

5.0.0-rc.12

10 months ago

5.0.0-rc.13

10 months ago

5.0.0-rc.14

10 months ago

5.0.0-rc.15

10 months ago

5.0.0-rc.16

10 months ago

5.0.0-rc.17

10 months ago

5.0.0-rc.18

10 months ago

5.0.0-rc.19

10 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

12 months ago

5.0.0-beta.16

12 months ago

5.0.0-beta.13

1 year ago

5.0.0-beta.14

1 year ago

5.0.0-beta.17

12 months ago

4.25.0

1 year ago

5.0.0

9 months ago

4.25.5

11 months ago

4.25.6

11 months ago

4.25.7

11 months ago

4.25.8

10 months ago

4.25.1

1 year ago

4.25.2

12 months ago

4.25.3

12 months ago

4.25.4

11 months ago

4.25.9

10 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

1 year ago

4.20.0

1 year ago

4.19.1

1 year ago

4.19.0

1 year ago

4.17.1

1 year ago

4.18.1-beta.0

1 year ago

4.18.1-beta.1

1 year ago

4.18.0

1 year ago

4.17.0

1 year 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

2 years ago

4.7.0-beta.0

2 years ago

4.5.4

3 years ago

4.5.6

2 years ago

4.5.5

2 years ago

4.6.0-alpha.1

3 years ago

4.6.0

2 years ago

4.6.0-beta.2

2 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