Как разрешить большему количеству пользователей редактировать статью с помощью casl react

#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:

Вы можете найти подробную информацию об этом в Поддерживаемых операторах и в общих условиях

В вашем конкретном примере:

  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
    })
     
  2. Проверьте разрешения:
     // 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