CASL v5.1.0-next.12 Release Notes

Release Date: 2020-11-18 // over 3 years ago
  • 5.1.0-next.12 (2020-11-18)

    ๐Ÿ› Bug Fixes

    • ability: replaces getters with functions to ensure terser properly minifies them (386ecb6)
    • extra: makes permittedFieldsOf to iterate from the end of array (81e6409)

    ๐Ÿ”จ Code Refactoring

    • extra: makes fieldsFrom option to be mandatory for permittedFieldsOf [skip release] (df29b0d)
    • types: restricts which utility types are exported by library (e98618f)

    โช Reverts

    • ๐Ÿ— builder: reverts back AbilityBuilder generic parameter (aa7b45f)

    ๐Ÿ’ฅ BREAKING CHANGES

    types: types AliasesMap, TaggedInterface, AbilityTupleType, ToAbilityTypes, AnyObject are no longer exported by the library

    extra: makes fieldsFrom option to be mandatory for permittedFieldsO f. This reduces confusion around why permittedFieldsOf returns empty array when user can manage entity fields. So, now this logic is just explicit and clear

    Before

    import { defineAbility } from '@casl/ability';import { permittedFieldsOf } from '@casl/ability/extra';const ability = defineAbility((can) =\> {can('read', 'Article');});const fields = permittedFieldsOf(ability, 'read', 'Article'); // []
    

    After

    import { defineAbility } from '@casl/ability';import { permittedFieldsOf } from '@casl/ability/extra';const ability = defineAbility((can) =\> {can('read', 'Article');});const ARTICLE\_FIELDS = ['id', 'title', 'description'];const fields = permittedFieldsOf(ability, 'read', 'Article', {fieldsFrom: rule =\> rule.fields || ARTICLE\_FIELDS}); // ['id', 'title', 'description']