Yii Framework Forum: Gerarchia Utenti - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Gerarchia Utenti Rate Topic: -----

#1 User is offline   big_73 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 08-January 16
  • Location:Milano

Posted 18 January 2016 - 06:15 AM

Ciao a tutti,
ho una domanda: avete mai gestito un progetto dove avete implementato la visibilità sui record in funzione di una gerarchia utenti?
mi spiego meglio quello che ho in mente: clienti/ordini/appuntamenti/documenti ... visibili al proprietario (colui che ha creato il record) ed al suo superiore (responsabile d'area per intenderci meglio); due figure che, con gerarchia sottostante, vedono solo i loro dipendenti (due responsabili d'area vedono solo i loro sottoposti).
E' da un po' che ci lavoro ma non trovo soluzione se non lavorando sul DB creando una function con un cursore.
Avete idee per poterlo gestire diversamente? volevo usare php (non ho ancora completa dimestichezza con questo linguaggio).
Grazie in anticipo.
0

#2 User is offline   markux 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 109
  • Joined: 26-November 10
  • Location:Grosseto

Posted 19 January 2016 - 08:52 AM

un paio di anni fa ho realizzato una cosa simile: utilizzando RBAC in yii ho risolto molto bene il problema http://www.yiiframew...al-rbac-scheme/

come interfaccia utilizzai questo modulo http://www.yiiframew.../extension/auth

l'unica cosa più complicata fu scrivere il codice per ricreare le gerarchie (X è un sottoposto di Y? ecc.)
0

#3 User is offline   big_73 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 08-January 16
  • Location:Milano

Posted 29 January 2016 - 07:31 AM

View Postmarkux, on 19 January 2016 - 08:52 AM, said:

un paio di anni fa ho realizzato una cosa simile: utilizzando RBAC in yii ho risolto molto bene il problema http://www.yiiframew...al-rbac-scheme/

come interfaccia utilizzai questo modulo http://www.yiiframew.../extension/auth

l'unica cosa più complicata fu scrivere il codice per ricreare le gerarchie (X è un sottoposto di Y? ecc.)


markux grazie mille per la risposta, non la vedo semplicissima (almeno per me), continuo ad usare la function creata a DB che al momento mi sta dando soddisfazioni

:lol: :lol: :lol: :lol:
0

#4 User is offline   Giando 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 15
  • Joined: 27-March 13
  • Location:Rome

Posted 01 February 2016 - 03:41 PM

Per avere un sistema di ACL avanzato, come viene chiamato questo tipo di sistema nei maggiori CMS Open Source, la soluzione migliore secondo me è installare queste due estensioni:

Yii2 User
Yii2 RBAC

La prima è un'estensione per la gestione degli utenti e la seconda per quella dei permessi.
Pur essendo in versioni non ancora stabili funzionano piuttosto bene e sono fatti apposta dallo stesso utente per interoperare.
Giando
Web Devoloper & Designer
http://www.gogodigital.it
0

#5 User is offline   big_73 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 08-January 16
  • Location:Milano

Posted 02 February 2016 - 09:08 AM

View PostGiando, on 01 February 2016 - 03:41 PM, said:

Per avere un sistema di ACL avanzato, come viene chiamato questo tipo di sistema nei maggiori CMS Open Source, la soluzione migliore secondo me è installare queste due estensioni:

Yii2 User
Yii2 RBAC

La prima è un'estensione per la gestione degli utenti e la seconda per quella dei permessi.
Pur essendo in versioni non ancora stabili funzionano piuttosto bene e sono fatti apposta dallo stesso utente per interoperare.


grazie mille, provo ad approfondire Yii2 User, RBAC già lo uso.
ci lavoro stay tuned...
grazie ancora
0

#6 User is offline   Collateral 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 21-August 16

Posted 21 August 2016 - 02:36 AM

Anche io ho lo stesso problema....

... ho aggiunto un campo 'refer' alla tabella 'user' del database e al modello 'User' ...
... tramite rbac verifico se l'utente è loggato e se può aprire la pagina di registrazione di un nuovo utente ...
... nel form di registrazione sempre tramite rbac verifico se l'utente ha o no il permesso per creare nuovi utenti, in caso di esito positivo...
... ho modificato il model della form di registrazione in modo tale che salvi il nuovo utente con l'id dell'utente loggato nel campo refer.

E fin qui va tutto alla grande... ed è stato molto semplice. Quindi sono in grado di registrare un ipotetico agente, farlo loggare, fargli registrare un nuovo utente semplice, e salvare l'id dell'agente nel campo 'refer' nei dati di quest'ultimo.


Il problema che ho adesso, è nel rendere visibile all' agente... solo i suoi utenti. Il problema mi si crea perchè voglio implementare il 'filtro' direttamente nel modello, e non nella gridview o altro. Stavo cercando qualche metodo del modello sul quale fare l'override, ma non ne vengo a capo.
0

#7 User is offline   Ventoh 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 13
  • Joined: 15-January 12

Posted 23 August 2016 - 08:18 AM

Quote

Il problema che ho adesso, è nel rendere visibile all' agente... solo i suoi utenti. Il problema mi si crea perchè voglio implementare il 'filtro' direttamente nel modello, e non nella gridview o altro. Stavo cercando qualche metodo del modello sul quale fare l'override, ma non ne vengo a capo.


Il filtro lo implementi giustamente nel model (meglio nella search class del model). Poi dal controller tramite rbac verifichi se l'utente ha i privilegi o meno chiamando il filtro apposito. Se byAgent e ByAll sono i filtri che hai creato, fai una cosa del genere:

$searchModel = new ModelSearch();
if (Yii::$app->user->can('AGENT'))
    $dataProvider = $searchModel->byAgent();
else 
    $dataProvider = $searchModel->byAll();
return $this->render('index', [
    'searchModel' => $searchModel,
    'dataProvider' => $dataProvider,
]);

0

#8 User is offline   Collateral 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 21-August 16

Posted 23 August 2016 - 11:29 AM

Perfetto, me ne sono tirato fuori con un paio di modifiche...

Ho aggiunto una nuova funzione nella UserQuery (che estende ActiveQuery):

    public function byRefer($refer)
    {
        $this->andWhere(['refer' => $refer]);
        return $this;
    }


Dopo ho modificato la UserSearch (che estende User) copiando la funzione originale Search in SearchByRefer con il parametro aggiuntivo Refer sul quale passare l'id dell'utente attualmente loggato:

   public function search($params)
    {
        $query = User::find();

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);

        ......

        return $dataProvider;
    }

    public function searchByRefer($params, $refer)
    {
        $query = User::find()->byRefer($refer);

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);

        ......

        return $dataProvider;
    }


E infine nel controller come suggerito da Ventoh, ho modificato il $dataProvider:

    public function actionIndex()
    {
        $searchModel = new UserSearch();
        //$dataProvider = $searchModel->search(Yii::$app->request->queryParams);
        $dataProvider = $searchModel->searchByRefer(Yii::$app->request->queryParams, \Yii::$app->user->identity->id);

        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }


Non sò se sia la soluzione più corretta, magari tralascio qualcosa premettendo che sono un neofita di Yii. Se dovete sgridarmi, fate pure :lol:

In ogni caso, grazie mille del supporto :))

Piccolo edit... ho aggiunto il controllo RBAC per visualizzare o meno tutti gli utenti


    public function actionIndex()
    {
        $searchModel = new UserSearch();

        if (Yii::$app->user->can('handleAllUsers')) {
            $dataProvider = $searchModel->search(Yii::$app->request->queryParams);
        } else {
            $dataProvider = $searchModel->searchByRefer(Yii::$app->request->queryParams, \Yii::$app->user->identity->id);
        }

        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }

0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users