#javascript #casl
#javascript #casl
Вопрос:
Я использую CASL rect для настройки авторизации в моем проекте javascript.
Приятно, когда я спрашиваю, имеет ли пользователь доступ к редактированию статьи, потому что он является автором.
Но когда у меня более одного автора, как я могу проверить, что текущий пользователь может редактировать эту статью?
<Can I='edit' a={{ editor_ids: article.editor_ids, type: 'Article' }}
Я не понимаю, как проверить, что текущий идентификатор пользователя находится в editor_ids в способности.
can('edit', 'Article', { editor_ids: ....something here for currentUser.id .... })
Ответ №1:
Вы можете найти подробную информацию об этом в Поддерживаемых операторах и в общих условиях
В вашем конкретном примере:
- Определение способности:
import { defineAbility } from '@casl/ability' const options = { // https://casl.js.org/v4/en/guide/subject-type-detection detectSubjectType: /* logic to detect subject type */ } export const createAbilityFor = (currentUser) => defineAbility(options, (can) => { can('edit', 'Article', { editor_ids: currentUser.id }) // can edit article if user.id is in editor_ids })
- Проверьте разрешения:
// createAbilityFor is a function from prev example const currentUser = { id: 1 } const ability = createAbilityFor(currentUser); ability.can('edit', { type: 'Article', editor_ids: [1, 2, 3] }) // true ability.can('edit', { type: 'Article', editor_ids: [3, 4, 5] }) // false