J'ai l'ensemble de données suivant:

La personne:

person: { id:1
          groups:[
                  {id:1 , name: john, permissions : [{id:1 , codename="can_edit"},{id:2,codename="can_write"},{id:3,codename="can_delete"}]} ,
        
                  ]
            }

Ce que je souhaite faire, c'est effectuer un rendu conditionnel en fonction du fait que cet utilisateur dispose d'une autorisation.

             { this.passtest()?
            <Button type="primary" shape="circle" icon={<EditOutlined />}/>
              :
              null
              }

Cela appellera alors la méthode this.passtest() qui contiendra la logique pour vérifier si l'utilisateur a l'autorisation dont j'ai besoin:

   passtest(){
    const passing = this.props.person.groups.forEach(function(group) {
      // Not sure what logic I can put here to return true as long as the permission 'codename' field tallies 
     });

    return passing
  }

J'apprécierais votre aide! Merci!

0
neowenshun 2 juin 2020 à 10:52

3 réponses

Meilleure réponse
passtest(codeName){
    return !!this.props.person.groups.find(group => group.permissions.find(permission => permission.codename === codeName));
}

En utilisant:

{ 
  this.passtest('can_edit')?
  <Button type="primary" shape="circle" icon={<EditOutlined />}/>
  : null
}

Pour le tableau de codeNames:

passtest(codeNames){
  return codeNames.every(
    codeName => !!this.props.person.groups.find(
      group => group.permissions.find(
        permission => permission.codeName === codeName
      )
    )
  )
}

En utilisant:

{ 
  this.passtest(['can_edit', 'can_write'])?
  <Button type="primary" shape="circle" icon={<EditOutlined />}/>
  : null
}
1
Michael Mishin 2 juin 2020 à 08:33
   passtest(){
    const passing = this.props.person.groups.forEach(function(group) {
      group.permissions.forEach((permission) => {
        // do a check in here for each permission
        if (permission.codename === 'can_edit') {
            return true
        }
      })
      return false
     });

    return passing
  }
0
Red Baron 2 juin 2020 à 08:08

Cela dépend de la permission que vous recherchez. si vous en cherchez juste, vous pouvez le faire:

   passtest(){
    const passing = this.props.person.groups.forEach(function(group) {
      return group.permission // this will true if permission array is > 0
     });

    return passing
  }

Ou si vous cherchez quelque chose de plus spécifique

   passtest(){
    const passing = this.props.person.groups.forEach(function(group) {
      if  (group.permissions[0].id === 1) {
         return true
      }
      return false
     });

    return passing
  }

Vous pouvez modifier cette ligne: if(group.permissions[0].id === 1) pour qu'elle corresponde à l'une des autorisations souhaitées

MODIFIER CI-DESSOUS

Si vous modifiez les autorisations pour qu'elles soient structurées comme ceci, cela devrait fonctionner:

permissions : {codename: 'codename'}

0
Red Baron 2 juin 2020 à 08:03