Вы впервые слышите о CASL? Вы можете прочитать Что такое CASL?.
Я рад сообщить, что CASL 4.0 был выпущен несколько дней назад и принес на наш стол несколько мощных возможностей:
Тип Безопасность
@casl/*
пакеты были переписаны на TypeScript. Это делает ваши приложения более безопасными, а опыт разработчиков - более приятным. Посмотрим, как:
Я знаю, знаю ... Я был одним из тех скептиков, которым до недавнего времени не нравился TypeScript. Теперь это действительно мощно, особенно логика вывода!
Начиная с 4.0 Ability
класс принимает 2 общих параметра:
- возможности приложения (действия, определенные для субъектов)
- форма условий
Это позволяет вам ограничить действия, которые могут быть применены к указанным предметам. Например, в приложении блога, в котором есть сущности Article
, Comment
и User
, вошедший в систему пользователь может:
read
,create
,update
,delete
Article
sread
,create
,update
Comment
sread
другоеUser
s
И мы можем выразить это как
Или даже строже
Это позволяет 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 в популярные фреймворки:
- Управление разрешениями пользователей в приложении Angular
- Vue ACL с CASL
- Управление разрешениями пользователей в приложении React
- Приложение Разрешения в Aurelia
- Авторизация в приложении Expressjs
- Простая авторизация API с помощью CASL и Feathers
Несмотря на то, что они немного устарели, CASL за время своего существования не претерпел значительных изменений, поэтому они по-прежнему актуальны.
Спасибо за доверие к CASL! Надеюсь, CASL упростил управление разрешениями в вашем приложении