Вы впервые слышите о CASL? Вы можете прочитать Что такое CASL?.

Я рад сообщить, что CASL 4.0 был выпущен несколько дней назад и принес на наш стол несколько мощных возможностей:

Тип Безопасность

@casl/* пакеты были переписаны на TypeScript. Это делает ваши приложения более безопасными, а опыт разработчиков - более приятным. Посмотрим, как:

Я знаю, знаю ... Я был одним из тех скептиков, которым до недавнего времени не нравился TypeScript. Теперь это действительно мощно, особенно логика вывода!

Начиная с 4.0 Ability класс принимает 2 общих параметра:

  • возможности приложения (действия, определенные для субъектов)
  • форма условий

Это позволяет вам ограничить действия, которые могут быть применены к указанным предметам. Например, в приложении блога, в котором есть сущности Article, Comment и User, вошедший в систему пользователь может:

  • read, create, update, delete Articles
  • read, create, update Comments
  • read другое Users

И мы можем выразить это как

Или даже строже

Это позволяет TypeScript проверять, что вы не допустили опечаток в действии или названии темы во время компиляции! Более того, IDE (например, VSCode) предложит возможные варианты на выбор:

Подсказки этого типа работают даже в ваших любимых интерфейсных библиотеках благодаря дополнительным пакетам! Итак, вы получите подсказки для Can компонента React и $can функции Vue в шаблонах. Хорошая вещь в VSCode заключается в том, что он использует файлы определения машинописного текста даже для файлов JavaScript, поэтому вы также получите лучшую поддержку IDE для приложений JavaScript. Разве это не круто?

Подробнее о новой поддержке TypeScript в CASL читайте в документации.

Меньший размер библиотеки

Библиотека меньше, ~ 4.5KB mingzip (вместе с sift.js!) И имеет лучшую поддержку для встряхивания дерева. Это было достигнуто благодаря минификатору terser.js и нескольким критическим изменениям, которые вы можете найти в CHANGELOG.

Начиная с 4.0 есть классы, позволяющие создавать Ability экземпляр:

  • PureAbility базовый класс, реализующий базовую логику
  • Ability, который расширяет PureAbility и настраивает его для использования mongoQueryMatcher и fieldPatternMatcher

Это было сделано для того, чтобы иметь возможность избавиться от sift.js зависимости в случае, если вы вообще не используете условия или когда вы реализуете настраиваемый сопоставитель. В результате AbilityBuilder теперь принимает класс способности в качестве первого аргумента. По умолчанию аргумент PureAbility, поэтому, если вы использовали AbilityBuilder.extract, вам нужно будет изменить его с:

const { can, cannot, rules } = AbilityBuilder.extract();
// rule definitions
const ability = new Ability(rules);

to

const { can, cannot, rules } = new AbilityBuilder(Ability);
// rule definitions
const ability = new Ability(rules);

Настройка

В 4.0 вы можете настроить Ability поведение экземпляра. Вы хотите расширить запрос MongoDB с помощью настраиваемого оператора, использовать json-схему или стрелочные функции в качестве условий? Больше не проблема, просто создайте собственный conditionsMatcher.

Чтобы получить более подробную информацию, прочтите Настроить способность в документации.

Лучшая поддержка определения типа объекта

Если вы используете объекты P lain O ld J avaScript O в качестве моделей, у вас есть более простой вариант указать тему напечатайте сейчас. Не нужно указывать пользовательскую функцию detectSubjectType (параметр subjectName был переименован в detectSubjectType), просто используйте subject помощник:

Чтобы лучше понять, как CASL определяет тип объекта, проверьте страницу Определение типа объекта.

Намного лучшая документация

Документация полностью переписана. Во-первых, теперь это одностраничное приложение, написанное на основе замечательных библиотек lit-html и lit-element (окончательный размер приложения в разархивированном виде составляет 47 КБ для современных браузеров! Оно даже каким-то образом работает в IE11). Он доступен для автономного использования, все тексты документации менее 1 МБ, поэтому не волнуйтесь, он не займет много места на вашем диске :)

Теперь он организован и легко расширяется. Он также старается быть дружелюбным к новичкам и имеет разделы с кулинарными книгами и примерами! Для каждого дополнительного пакета теперь есть отдельная страница с документацией, поэтому вам не нужно искать файлы README в репозитории.

Будущее

CASL привлекает все больше и больше разработчиков. Это требует дополнительного времени для написания новых функций, дополнительных пакетов, документации и ответов на вопросы в gitter chat. Помимо того, что я стараюсь делать все это изо всех сил, мне нужно использовать свои уникальные таланты для выполнения важных ролей в организации, иначе моя жена давно бы меня выгнала;)

Мне нравится CASL, и я люблю вносить свой вклад в Open Source. Вот почему я ищу способ больше работать над проектами с открытым исходным кодом. К счастью, есть платформы, которые помогают поддерживать таких, как я. И я рад сообщить, что CASL теперь находится в открытом коллективе!

Если вы хотите получить более подробную информацию о том, что такое Open Collective, и вы можете внести свой вклад, пожалуйста, прочтите Поддержание развития CASL.

Если у вас такое же видение мира и вам нравится CASL, мы приветствуем ваш вклад! Вы не ограничены финансовыми взносами, так как обычно вы можете просто поделиться CASL со своим коллегой из другого проекта, помочь ответить на вопросы в чате gitter и решить проблемы с сортировкой, поделиться своими примерами интеграции CASL, а также внести свой код и документацию! Наконец, вы можете стать основным участником и регулярно поддерживать CASL.

Как мне перейти?

CASL внес несколько критических изменений во все @casl/* пакеты, поэтому пожалуйста, потратьте время на чтение CHANGELOG.md используемых вами пакетов. Вы можете найти все изменения (в том числе критические) в этом файле каждого пакета в casl репозитории.

Если вы обнаружите какие-либо проблемы или что-то неясно, заполните, пожалуйста, вопрос на github.

С чего начать, как новичок?

На данный момент CASL имеет неплохую документацию, поэтому начните с Руководства. Затем перейдите к документации для внешнего или внутреннего пакета по вашему выбору и прочтите ее. Позже вы можете проверить существующие статьи, в которых объясняется, как интегрировать CASL в популярные фреймворки:

Несмотря на то, что они немного устарели, CASL за время своего существования не претерпел значительных изменений, поэтому они по-прежнему актуальны.

Спасибо за доверие к CASL! Надеюсь, CASL упростил управление разрешениями в вашем приложении