Permessi

Salve , gestisco la registrazione con il modulo user , e sono admin (tanto che nel menu ho inserito un pannello admin visibile solo se si è admin così:


array('label'=>'Pannello Admin', 'url'=>array('/user/admin'), 'visible'=>Yii::app()->user->isAdmin()),       

e nel menu appare la voce che certifica che sono admin

, ho 2 controller nei quali in uno ho queste acces rule :




public function accessRules()

	{

		return array(

			array('allow',  // allow all users to perform 'index' and 'view' actions

				'actions'=>array('index','view','search','risultati','presentazione'),

				'users'=>array('*'),

			),

			array('allow', // allow authenticated user to perform 'create' and 'update' actions

				'actions'=>array('create'),

				'users'=>array('@'),

			),

			array('allow', // allow admin user to perform 'admin' and 'delete' actions

				'actions'=>array('admin','delete','update'),

				'users'=>array('admin'),

			),

			array('deny',  // deny all users

				'users'=>array('*'),

			),

		);

	}



Quando tento di accedere a controller admin mi da errore 403 You are not authorized to perform this action.

Oltre a questo , dove posso cambiare il messaggio di errore impostandolo in italiano ?

che significa ?

  1. per la lingua imposta nel config/main.php



'language' => 'it'



  1. Appunto, come diceva robter63: se hai due controller … spiegati meglio … mi sa che non hai messo le accessRules anche nel secondo

le rules che ho incollato sono del controller al quale non mi dà l’accesso alle action riservate ad admin . sono io che sbaglio qualcosa?

mi viene un dubbio.

non so come si chiama il tuo utente, ma




'users'=>array('admin'),




si aspetta un utente con NOME admin e non un utente con PRIVILEGI admin…

può essere questo ?

stai usando RBAC? perchè se si è meglio fare uso delle roles, come nell’esempio dove la role ha un nome fittizio




'roles' => array('anagraphic:agency')



sI sara sicuramdente questo pensavo che admin si riferisse a user is admin.cOme devo fare allora ad esempio per far accedere solo all’utente admin a miocontroller/admin ?

isAdmin() = vero se il NOME utente è ‘admin’

                 array('allow', // allow admin user to perform 'admin' and 'delete' actions


                            'actions'=>array('admin','delete','update'),


                            'users'=>array('admin'),


                    ),

Questa regola è valida per user con nome=‘admin’

Non penso che sia vero , io sono admin di questo sito , nel modulo user (ho superuser 1) , il mio nome non è admin … e nel menu ho inserito :


array('label'=>'Pannello Admin', 'url'=>array('/user/admin'), 'visible'=>Yii::app()->user->isAdmin()),       

Infatti con questo utente appare nel menu principale pannello admin , mentre ho creato un altro utente non superuser e non appare nel menu la voce pannello admin.

Quindi deduco che isAdmin() è true quando superuser=1

Quindi come risolvo ?

intanto guarda il codice che c’è dietro a isAdmin, e postacelo

Eccolo :


public function isAdmin() {

        return Yii::app()->getModule('user')->isAdmin();

    }

HO risolto guardando l’api su google qui :

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

questa la riga che mi interessa :

‘users’=>Yii::app()->getModule(‘user’)->getAdmins(),

Salve continuo qui perchè inerente,

nelle rules del controller ho solo che l’utente admin ha il permesso di eliminare i dati inseriti nel db mentre io vorrei che l’utente non admin possa eliminare i propri inserimenti .Come posso fare?

Come hai fatto attualmente per far si che solo l’utente admin possa fare l’eliminazione?

Qual’è il codice che esegue questo ‘filtraggio’ ?

nelle rules del controller ho che l’action delete la possa eseguire l’utente admin che prendo con il codice di prima getadmins

… posta questo pezzettino di codice … per favore

Eccolo :




public function accessRules()

	{

		return array(

			array('allow',  // allow all users to perform 'index' and 'view' actions

				'actions'=>array('index','view','presentazione','search'),

				'users'=>array('*'),

			),

			array('allow', // allow authenticated user to perform 'create' and 'update' actions

				'actions'=>array('create','update','pannello','filminseriti'),

				'users'=>array('@'),

			),

			array('allow', // allow admin user to perform 'admin' and 'delete' actions

				'actions'=>array('admin','delete'),

				'users'=>Yii::app()->getModule('user')->getAdmins(),

			),

			array('deny',  // deny all users

				'users'=>array('*'),

			),

		);

	}



ora vado alla cieca per la soluzione… allora vediamo… il metodo getAdmins che tipo di risultato dà fuori? un array di CActiveRecord ? se si, immagino siano modelli "user" .

se e dico se va così, potesti semplicemente ‘sommare’ l’array di getAdmins a ClaseUserModel::findByPk passandogli lo user id attualmente loggato.

ma se faccio così gli permetto di cancellare tutto …

io faccio così:

faccio si che in admin l’utente veda SOLO le righe che può toccare

nei metodi create, delete, e update invece,

uso una versione modificato di loadModel. dopo aver caricato il modello mi accerto che l’utente possa modificarlo. Se si bene, altrimenti triggero una CHttpException 505, forbidden