ارسالها: 252
موضوعها: 83
تاریخ عضویت: اردیبهشت 1394
اعتبار:
0
تشکرها: 313
22 بار تشکر شده در 22 پست
سلام
در فایل Controller.php دو تا متد بصورت زیر تعریف کردم:
public function filters(){
return array('accessControl');
}
public function accessRules(){
return array(
array('allow',
'controllers' => array('site', 'posts'),
'actions' => array('error','index', 'view', 'contact', 'about', 'month'),
'users' => '*',
),
array('deny'),
);
}
چون پروژه ام وبلاگ هست میخوام کاربران به همه اکشنها دسترسی داشته باشند چون نیازی به لاگین نیست. فقط مدیر باید لاگین کنه که اونم در ماژول admin ، دسترسیها رو مشخص میکنم.
الآن مشکل بروز خطاییه که با افزودن دو متد بالا بوجود میاد. در عکسی که ضمیمه کردم خطا رو میبینید.
ارسالها: 252
موضوعها: 83
تاریخ عضویت: اردیبهشت 1394
اعتبار:
0
تشکرها: 313
22 بار تشکر شده در 22 پست
در adminController متد زیر رو تعریف کردم ولی changePass رو برای کاربر لاگین نکرده نشون میده البته وقتی که قسمت deny غیر فعال باشه. وقتی deny فعال هست به هیچکدوم از اکشنهای ماژول دسترسی ندارم و url به site/error منتقل میشه که اونم باید به default/errorAdmin منتقل بشه:
ارسالها: 252
موضوعها: 83
تاریخ عضویت: اردیبهشت 1394
اعتبار:
0
تشکرها: 313
22 بار تشکر شده در 22 پست
adminController در پوشه components ماژول قرار داره که همه کنترلرهای دیگه ماژول از جمله default از اون مشتق میشن.
برای اینکه این متدها رو در چندین کنترلر مختلف تعریف نکنم، در adminController ، نام کنترلرها رو وارد میکنم و نام اکشنها رو هم میدم. اینجوری این متدها برای همه کنترلرها به ارث برده میشن.
ارسالها: 3,701
موضوعها: 140
تاریخ عضویت: اردیبهشت 1394
اعتبار:
134
تشکرها: 195
3447 بار تشکر شده در 2120 پست
خطا رو توی AdminModule تنظیم کردین که روی admin/default/errorAdmin باشه؟ کد کامل کنترلر adminController و default رو بگذارین. adminController رو توی پوشه components گذاشتین؟
ارسالها: 252
موضوعها: 83
تاریخ عضویت: اردیبهشت 1394
اعتبار:
0
تشکرها: 313
22 بار تشکر شده در 22 پست
یه اشتباهی که داشتم این بود که adminError رو errorAdmin نوشته بودم اصلاحش کردم ولی هنوز همان مشکلاتی که در پست 5 گفتم وجود دارن.
این کد کلاس adminController هست که در پوشه modules/admin/components قرار دادم:
class AdminController extends Controller {
public $layout='/layouts/main';
public function init() {
Yii::app()->errorHandler->errorAction = 'admin/default/adminError';
}
public function filters(){
return array('accessControl');
}
public function accessRules(){
return array(
array('allow',
'controllers' => array('default'),
'actions' => array('adminError','index','adminLogin'),
'users' =>array('*'),
),
array('allow',
'controllers' => array('default'),
'actions' => array('changepass'),
'users' =>array('@'),
),
array('deny',
'users' => array('*'),
),
);
}
}
ارسالها: 3,701
موضوعها: 140
تاریخ عضویت: اردیبهشت 1394
اعتبار:
134
تشکرها: 195
3447 بار تشکر شده در 2120 پست
متد init رو اونجا بسازین نه توی کنترلر. کلاس AdminController خودتون رو هم توی مسیر modules/admin/components/AdminController.php بسازین و مستقیماً از CController مشتق کنید.