Domanda

Per prima cosa descriverò rougthly contesto. Voglio avere un'applicazione symfony dove posso creare vari settori. In ciascuna delle aree, si possono avere diversi tipi di utenti (o ruoli). Ogni utente può avere più ruoli in diversi settori.

Per illustrare la questione, definiremo:

  • 2 aree:. "Area 1" e "Area 2"
  • 2 utenti:. "User 1" e "Utente 2"
  • 2 ruoli:. "Venditore" e "acquirente"
  • "Utente 1" è un venditore e un acquirente in "Area 1"
  • "Utente 2" è un venditore e un acquirente in "Area 1" e un acquirente solo in "Area 2"

La mia domanda è: che è il modo migliore per controllare in pagine con restrizioni se un utente appartiene ad una determinata zona e se ha il ruolo richiesto in quella zona

.

Dopo averci pensato un po 'su di esso, ho fatto quanto segue:

  1. Quando si crea una zona, ho anche creare una sfGuardGroup per ogni ruolo e uno sfGuardGroup globale per l'area, ogni suffisso con l'area id. Quindi, nel nostro esempio, avremo i ruoli:
    • Area-1, i venditori-1, gli acquirenti-1 per l'area 1
    • Area-2, i venditori-2, gli acquirenti-2 per l'area 2
  2. Gli utenti vengono aggiunti ai gruppi interessati. Quindi, nel nostro esempio:
    • Utente 1 apparterrà ai gruppi zona-1, i venditori e gli acquirenti-1-1
    • Utente 2 apparterrà ai gruppi zona-1, i venditori-1, gli acquirenti-1, zona-2 e gli acquirenti-2
  3. l'URL, so in quale zona ci troviamo, per esempio:

A quel punto, sono di tipo bloccato come io non riesco a capire il posto migliore per attuare il controllo di autorizzazione: modificare il filtro di guardia? Modificare le azioni?

È stato utile?

Soluzione

L'implementazione richiesta non è supportata da sfGuard quindi vi consiglio di creare un nuovo, ulteriore, filtro di sicurezza.

È possibile creare un nuovo filtro di zecca che si estende sfFilter , quindi aggiungere in filter.yml dopo il filtro di sicurezza esistente. Ciò significa che tutte le funzionalità di sicurezza esistente fornito da sfGuard continua.

È quindi possibile determinare quale area che viene richiesto, cercando nel nome del modulo e l'azione nome attuale (come si accede questi è diverso dipende da quale versione di symfony che si sta utilizzando, sguardo in sfBasicSecurityFilter per un indizio) quindi confrontare che con i ruoli che l'utente corrente ha utilizzando sfGuardSecurityUser .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top