رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
خطا در AccessControl
#1
سلام دوستان

در DefaultController ماژول admin ، متد behaviors رو بصورت زیر نوشتم:

public function behaviors() {
   return [
       'access' => [
           'class' => AccessControl::className(),
           'only' => ['index','changepass','login','logout','error'],
           'rules' => [
               'actions' => ['index','login','error'],
               'allow' => true,
               'roles' => '?',
           ],
           'rules' => [
               'actions' => ['changepass','logout'],
               'allow' => true,
               'roles' => '@',
           ],
       ],
   ];
}

در فایل پیوست تصویر خطا رو قرار دادم.
دلیل ایجاد شدن این خطا چیه؟

متشکرم.


فایل‌های پیوست تصاویر بندانگشتی
   
پاسخ
تشکر شده توسط:
#2
rules یک آرایه است که هر خونه از اون، خودش یه آرایه جداگانه است و داخلش actions و... رو داره:
public function behaviors() {
    return [
        'access' => [
            'class' => AccessControl::className(),
            'only' => ['index','changepass','login','logout','error'],
            'rules' => [
                [
                    'actions' => ['index','login','error'],
                    'allow' => true,
                    'roles' => '?',
                ],
                [
                    'actions' => ['changepass','logout'],
                    'allow' => true,
                    'roles' => '@',
                ],
            ],
        ],
    ];
}
پاسخ
تشکر شده توسط: abdollah110110
#3
roles یک آرایه است (ایراد در کد پست اول بود که باعث شد کد پست دوم نیز دارای خطا باشد).

public function behaviors() {
   return [
       'access' => [
           'class' => AccessControl::className(),
           'only' => ['index','changepass','login','logout','error'],
           'rules' => [
               [
                   'actions' => ['index','login','error'],
                   'allow' => true,
                   'roles' => ['?'],
               ],
               [
                   'actions' => ['changepass','logout'],
                   'allow' => true,
                   'roles' => ['@'],
               ],
           ],
       ],
   ];
}
پاسخ
تشکر شده توسط:
#4
چرا بجای ریدایرکت شدن به admin/default/login، به site/login ریدایرکت میشود؟

توی کلاس yiifiltersAccessControl یه فیلد به نام user تعریف شده است که مقدار پیشفرضش همون user است.

public $user = 'user';

برای تغییر مقدار این فیلد، یه کلاس بصورت زیر تعریف میکنیم:

namespace appmodulesadmincomponents;

use Yii;
use yiibaseAction;
use yiibaseActionFilter;
use yiidiInstance;
use yiiwebUser;
use yiiwebForbiddenHttpException;
use yiifiltersAccessControl;

class AdminAccessControl extends AccessControl {

   public function init() {
       $this->user = 'admin';
       parent::init();
   }

}

در متد behaviors از کنترلر default ، بجای AccessControl از AdminAccessControl استفاده میکنیم:

public function behaviors() {
   return [
       'access' => [
           'class' => AdminAccessControl::className(),
           'rules' => [
               [
                   'actions' => ['login','error'],
                   'allow' => true,
                   'roles' => ['?'],
               ],
               [
                   'allow' => true,
                   'roles' => ['@'],
               ],
           ],
       ],
   ];
}

حالا متد behaviors بدرستی کار میکند.
پاسخ
تشکر شده توسط:
#5
چون داره با کامپوننت user کار میکنه. شما باید این شکلی بگین که از کامپوننت ادمین استفاده کنه لازم نیست یه کلاس جدید مشتق کنید - مستندات رو مطالعه کنید) :
public function behaviors() {
   return [
       'access' => [
           'class' => AdminAccessControl::className(),
           'user' => 'admin',
           'rules' => [
               [
                   'actions' => ['login','error'],
                   'allow' => true,
                   'roles' => ['?'],
               ],
               [
                   'allow' => true,
                   'roles' => ['@'],
               ],
           ],
       ],
   ];
}
پاسخ
تشکر شده توسط: abdollah110110




کاربران در حال بازدید این موضوع: 2 مهمان