Ereditare i permessi da phpbb3

Salve a tutti,

Sto lavorando su un sito che come forum utilizza phpbb3, tutta la gestione dell’utente e’ delegata al forum.

Le informazioni dell’utente le leggo grazie a model che ho creato sulla base della tabella utenti del forum, ho quindi accesso a tutte le info che mi servono tra le quali anche l’user group.

Ora ho necessita’ di limitare alcune funzionalita’ del mio sito soltanto agli amministratori, come crare, aggiornare o eliminare dei post.

Quello che avrei in mente e’ di evitare l’implementazione di RBAC di yii e semplicemente di creare una funziona all’interno della user model che restituisca se un utente e’ amministratore sulla base delle informazioni dei gruppi del forum e utilizzare poi questa funzione all’intero delle procedure Create Update Delete del controller.

Siccome non sono molto esperto di yii vorrei avere un vostro parere se questo mio ragionamento e’ corretto e se puo’ essere migliorato in qualche modo.

Grazie,

Dado.

Hai un sistema che è phpbb3. Quello che io credo tu debba fare, è modificare l’autenticazione di yii facendo in modo che utilizzi la tabella utenti di php. Una volta fatta questa operazione, suppongo sia sufficiente conoscere la struttura tabellare di phpbb3 per risalire al ruolo dell’utente connesso in un dato momento.

Si il tutto gia’ funziona, riesco ad autenticarmi utilizzando le credenziali di phpbb3.

La domanda che volevo porvi e’ come procedereste voi effettuare il controllo dei privilegi, siccome sono alle prime armi con yii e il controllo delle credenziali e’ una parte delicata per quanto riguarda l’aspetto della sicurezza volevo appunto avere un vostro parere.

Sembra funzionare, ho aggiunto la seguente funzione allo user model:




  /**

   * @return group id of a user.

   */

  public function getRole()

  {

    $this->user_id = Yii::app()->user->getId();

    $user = phpBBUser::model()->findByPk($this->user_id);

    $group = $user->group_id;

    return $group;

  }



e in ogni azione che lo richiede faccio un check:




$role=phpBBUser::model()->getRole();

if($role == '389')

{

  ...

}



Esiste un metodo un po’ piu’ elegante o questa soluzione soddisfa anche voi?

Oltre a questo c’e’ un modo per impostare di default una variabile in main.php che contenga l’id del gruppo admin in modo da poter richiamare questa variabile invece che il numero hardcoded?

Grazie,

Dado.

[EDIT]

Il secondo punto sono riuscito a risolverlo impostando il parametro in param.php:


  

// administrator group id

  'adminGroupId'=>389,



per poi richiamare il valore:


Yii::app()->params['adminGroupId']

La tua soluzione funziona, quindi è ok. Renderei più leggibile il codice, ed al posto di un 389 poco semantico, aggiungerei dei valori di costante alla classe user. Lo scopo potrebbe essere questo:




$role=phpBBUser::model()->getRole();

if($role == phpBBUser::ROLE_ADMIN)

{

  ...

}



Questo codice è più leggibile e più facilmente manutenibile. Supponi di passare a qualcuno questo codice o di rileggerlo tra un anno. Ed è facile che accada: non penso che le politiche di accesso cambino con frequenza. In questo modo è immediato il significato.

Scusa la mia ignoranza, come faccio a settare phpBBUser::ROLE_ADMIN all’interno della model?




class phpBBUser

{

    const ROLE_ADMIN = 'backlog';

}