Accessrules()

salam

this is my code:




class UserManageController extends Controller

{

    


        

    

            public function accessRules()

            {

                $staff = Rool::model()->find('sid=:i',array(':i'=>yii::app()->session['sid']));

                $p = $staff->role;

            

                return array(

                        array('allow', 

                        'actions'=>array('accept','delete','edit'),

                        'expression'=> $p.' > 1',

                        ),

                        array('allow',

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

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

                        ),

                       array('deny', 

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

                        ),

       


                       

                );

             }


//..... where is my actions....

}



vali accessRules() , e’mal nemishe.

chi kam neveshtam??

mer30

[rtl]

من تو کد های شما اشکالی نمی بینم.

اما من یه فایل یه اسم EWebUser.php ساختم و تو components گذاشتمش.کد هاش هم اینه:

[/rtl]




<?PHP

class EWebUser extends CWebUser

{

    public function canAccess($minimumLevel)

    {

        //Access this via Yii::app()->user->canAccess(9)

 

        return (Yii::app()->user->isGuest) ? FALSE : $this->level >= $minimumLevel;

    }

 

}

?>



[rtl]اینم از accessRules[/rtl]




public function accessRules()

	{

		return array(

			array('allow', 

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

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

			),

			array('allow', 

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

	            'expression'=>'$user->canAccess(6)'

			),

			array('deny',

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

			),

		);

	}



سلام

مرسی از جوابتون.

اما

$user

از کجا آوردین؟؟

من که اسم مدل خودم رو مینویسم خطا میده که: مدل شما این متد رو نمیشناسه!

1مورد دیگه هم هست ،اینکه

برای کنترلر هم باید فیلتر تعریف کنم؟؟

همین کد زیر کافیه؟؟


public function filters() 

                { 

            return array( 'accessControl' ); // perform access control for CRUD operations 

            }

[rtl]

اولا اینکه برای اینکه متنتون تو فروم rtl بشه متنتون رو توی این تگ بنویسید:

[/rtl]




[rtl][/rtl]



[rtl]

دوما

[/rtl]


$user

[rtl]

به کاربر جاری اشاره می کنه.

سوما برای اینکه کنترلر از این accessRules استفاده کنه باید همچین تابعی تو کنترلرتون باشه:

[/rtl]




public function filters()

	{

		return array(

			'accessControl', // perform access control for CRUD operations

			'postOnly + delete', // we only allow deletion via POST request

		);

	}



[rtl]

قسمت دوم تایع که ‘postOnly + delete’ هست هم به این معنیه که حذف فقط با ارسال post انجام می شه و برای امنیت اکیدا توصیه می شه که این هم تو کد هاتون باشه.وگرنه الزامی به بودنش نیست.

امیدوارم تونسته باشم منظورم رو برسونم.

[/rtl]

[rtl]

در ضمن

[/rtl]


$this->level

[rtl]

را هم با اضافه کردن کد:

[/rtl]


$this->setState('level', $user->type);

[rtl]

به فایل UserIdentity.php در پوشه ی components می تونید ازش استفاده کنید.

و چون هم UserIdentity و هم EWebUser کلاس بیسشان یکی است با

[/rtl]


$this

[rtl]

بهش دسترسی دارید.اما در جاهای دیگه با

[/rtl]




Yii::app()->user->canAccess(9)



[rtl]

یا

[/rtl]




Yii::app()->user->level



[rtl]

بهش دسترسی دارید.

[/rtl]

[right]از اینکه وقت گذاشتید و با حوصله جوابم رو دادید بی نهایت ممنونم

در ضمن متوجه شدم که [/right]


$this->setState('level', $record->name);

[right]در کدهای من جواب نمیده و به جای اون از[/right]


Yii::app()->user->setState('level',$record->name);

[right]استفاده کردم. نمیدونم این اشکال داره یا نه؟!

به هرحال 2باره ازتون سپاسگزارم

ولی فیلترم هنوزم کار نمیکنه

[/right]

[font="Tahoma"][rtl]این رو امتحان کنید:[/rtl][/font]


'expression'=> '$p > 1',

[right]

مرسی اما

واقعا نمیدونم اشکال کارم کجاست ، هر تغییری که میدم اعمال نمیشه .

الان کد زیر هم جواب نمیده:





        public function filters() 

                { 

            

            return array( 'accessControl' ); // perform access control for CRUD operations 

            

            }

    

            public function accessRules()

            {  

            

                return array(

                    

                        array('allow', 

                        'actions'=>array('Accept','delete','Edit','index',),

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

                        'expression'=>'$user->role == 2',

                        

                        ),

                     

                       

       


                       

                );

             }



آیا جای دیگه ای هم هست که باید تغییر بدم تا این کد اعمال بشه ؟؟

[/right]




        public function filters() 

                { 

            

            return array( 'accessControl' ); // perform access control for CRUD operations 

            

            }

    

            public function accessRules()

            {  

            

                return 

					array(

                    

                        array('allow', 

                        'actions'=>array('Accept','delete','Edit','index',),

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

                        'expression'=> $user->role == 2 ? '1==1':'1==2',

                        

                        ),

						array('deny',  // deny all users

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

							'actions'=>array('Accept','delete','Edit','index',),

						),

						

                     

                       

       


                       

                );

			}

             

[right]با سلام

خیلی ممنونم ازتون ، درست شد. فقط با

$user->role

خطا میداد که

user

رو نمیشناسه ، من به جای

$user

از

yii::app()->session[‘role’]

استفاده کردم و مشکلم حل شد.

با سپاس فراوان از همه دوستانی که کمکم کردند[/right]

[RTL]برای اینکه به $user خطا نگیره به این صورت باید ازش استفاده کنی:

Yii::app()->user[/RTL]