Inserzionista

Salve ho creato un applicazione , la gestione della registrazione la effettuo con il modulo user , avrei bisogno però oltre al superuser di inserire un altro campo inserzionista ,devo inserirlo nella tabella user ? e poi creare metodo getInserzionista nel usermodule ?

se ho capito bene devi inserire semplicemente un campo nella tabella User, giusto?

per farlo digerire a yii devi solo inserire il campo in una delle regole di validazione e tutto sta in piedi da solo.

magari lo aggiungerei al ‘search()’ se ci devi effettuare ricerche sopra.

fatti aiutare da gii e fai il preview di come verrebbero fuori i model ed i file per il crud. fa l’anteprima senza sovrascrivere, se hai già modificato i file.

Ho bisogno di un altro ruolo anche se non mi interessa per cose particolari ma solo per degli if , in pratica vorrei che alcuni utenti inserzionisti abbiano la possibilità di inserire mentre quelli registrati no .Questo lo farei con un if(user->isInserzionista()) allora fagli vedere il form . Il problema è dove mettto isInserzionista , perchè ho provato in usermodule a copiare e modificare i metodi isAdmin() e getAdmin() ma una volta creati e richiamati yii dice che non esiste un metodo chiamato isInserzionista …Tutto questo per evitare di scrivere codice nel controller in cui mi connetto al db faccio una query ecc ecc .

Ho anche visto però che con Yii::app()->user->email; posso accedere all’email dell’user loggato , aggiungendo un campo inserzionista con valore 0 o 1 e con questa sintassi Yii::app()->user->inserzionista posso accedere a quel campo giusto ?

E’ il giusto approccio?

ps ho provato ma mi dice che : La proprietà "RWebUser"."inserzionista" non è definita.

Non conoscendo la struttura della tua applicazione è difficile essere precisi, comunque gli stati persistenti dell’utente loggato (Yii::app()->user) vengono gestiti dalla classe CWebUser che lavora insieme a UserIdentity che si occupa di identificare l’utente loggato.

Estendendo quindi CUserIdentity puoi settare degli stati permanenti al momento del login e quindi anche il tuo "isInserzionista" e ritrovartelo quindi su Yii::app()->user->isInsersionista.

Praticamente, considerando che hai un campo booleano o int1 nel db che si chiama "isInserzionista"




class UserIdentity extends CUserIdentity {

  public function authenticate() {

    // Questo è il tuo modello user

    $record = User::model()->findByAttributes(array('username' => $this->username));


    // i tuoi controlli per verificare l'autenticazione

    ...


    if(AUTENTICATO) {

     ...

     // Qui rendi persistente il campo isIserzionista

     $this->setState('isInserzionista', $record->isInserzionista);

     ...

    }

  }

}



Ci sono poi anche altri metodi ma dipende da come hai impostato la tua app, in generale se ti leggi la documentazioni su quelle classi che ti ho indicato capirai meglio come poter implementare al meglio la soluzione giusta per te!

Devi implementare tu nella tua CWebUser il metodo isInserzionista().

Abbozzo




publica function isInserzionista()

{

   $db_user = Utente::model()->findByPk(Yii::app()->user->id);

   return ($db_user->isInserzionista);


}



oppure, se come me Cuseridentity usa direttamente il modello user, è sufficiente che la implementi dentro al modello, ma sempre il find in base all id devi fare

Ottimo, un altro metodo è quello proposto da realtebo cioè estendere CWebUser e salvare lo stato lo stato nella sessione utente.

Visto che a te lo stato serve per verificare un ruolo, cosa abbastanza importante per quanto riguarda la sicurezza dell’app, ti consiglio di dare una letta aquesto paragrafo e questo paragrafo per comprendere i problemi di sicurezza legati all’uso di cookie e sessioni.

A mio avviso estendere CUserIdentity e gestire tutti gli stati da lì è la soluzione più comoda, ma ora sono passato a Yii2 e tutto è molto meglio :D

iO utilizzo user per l’autenticazione cho aggiunto il campo inserzionista nella stessa tabella di superuser ora devo ricreare il model il controller e tutto il crud di userc posso farlo con gìi?anche se é un modulo? una volta ricreato tutto posso accedere al parametro con la sintassi di prima (delle persistenze)?

scusa, giusto per chiarezza, potresti mica postare il modulo User, io non l’ho mai usato… per cui devo capire in che modo il “modulo” User usa i dati del db. Capito bene ti dico la sintassi corretta, almeno ci provo.

ringraziandoti per la molta disponibilità che sempre dimostri , preciso che , mi interessa capire più che avere codice già pronto ,allego comunque il link del modulo user :

http://code.google.com/p/yii-user/

Grazie .