Я буду ссылаться на эту статью https://medium.com/dailyjs/managing-user-permissions-in-your-react-app-a93a94ff9b40
Я буду реализовывать аутентификацию на основе ролей для определенных маршрутов в своем приложении для реагирования и столкнулся с CASL. Я вижу, что у них есть реализация реакции, но есть определенная область, которая меня смущает. Пожалуйста, посмотрите код ниже, и я объясню позже.
import { AbilityBuilder } from 'casl'
function subjectName(item) {
if (!item || typeof item === 'string') {
return item
}
return item.__type
}
export default AbilityBuilder.define({ subjectName }, can => {
can(['read', 'create'], 'Todo')
can(['update', 'delete'], 'Todo', { assignee: 'me' })
});
Область сверху, которая меня смущает, — это «Задачи» в функции экспорта по умолчанию can(['read', 'create'], 'Todo')
Что это за «Тодо»? В статье он описывает это так: «Второй аргумент — это тип объекта, в нашем случае Todo, к которому применимо это правило». Откуда он берет этот тип объекта, откуда subjectName?
Я осмотрелся, а также нашел пример с использованием вошедшего в систему пользователя через избыточность (ближе к моей многообещающей реализации) и нашел этот https://github.com/stalniy/casl/issues/148
Что я хочу реализовать: Моя заявка предназначена для колледжа и представляет собой ремейк веб-сайта грантов для исследователей университетского уровня. (Исследователи IE могут видеть доступные гранты, подавать заявки на них и т. д.), и у меня будут администраторы, которые смогут входить в это же приложение и иметь возможность загружать гранты и принимать/отклонять заявки на гранты для исследователей. Поэтому мне нужно иметь возможность защищать маршруты от определенных ролей пользователя.
Как я надеюсь, это будет работать: Пользователь входит в систему. Если исследователь -> разрешить ему видеть все гранты и подавать заявки на них, а также просматривать их статус если админ -> посмотреть заявки на гранты и принять/отклонить их По существу скрыть маршруты для обоих людей. (администратор не может подать заявку на грант, исследователь не может принимать заявки и т. д.)
Любая информация о том, как реализовать это в реакции, будет принята с благодарностью.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете прочитать комментарии в github.com/stalniy/casl/issues/135, чтобы понять, что такое Todo. Короче говоря, это имя объекта, к которому вы хотите определить доступ.
subjectName— это функция, которая может извлекать имя объекта из экземпляра объекта при проверке разрешений с помощьюability.can(...)