ورود

View Full Version : استفاده از ACF در yii2



png_92
چهارشنبه 13 مرداد 1395, 15:17 عصر
سلام
من میخوام از روش ACF (access controll filter) واسه دسترسی کاربران استفاده کنم. 4مدل کاربر دارم. ادمین , سرور , کاربر عضو و مهمان. ی فیلد به نام role تو دیتابیس تعریف کردم. که از نوع int هست و مقدار بین 0 تا 4 میگیره.
قاعدتا هرکسی که ثبت نام میشه خودش نمیتونه برای خودش role تعریف کنه. حالا من میخوام بدونم که از روش ACF چطور استفاده کنم. تا الان تو تابع behaviors() هر کنترلر کدهای زیر رو قرار دادم:


public function behaviors()
{
return [
'verbs' => [
'class' => VerbFilter::className(),
'only' => ['Index', 'View', 'Create', 'Update', 'Delete'],
'rules' => [
[
'allow' => true,
'actions' => ['Create', 'Index'],
'roles' => ['?'],
],
[
'allow' => true,
'actions' => ['Index', 'View', 'Create', 'Update', 'Delete'],
'roles' => ['@'],
],
],
],
];
}



تو این کد @ به معنی همه کاربرانیه که عضو هستن که شامل ادمین و سرور و کاربر عضو میشه. ولی خب سطح دسترسی این سه تاهم باهم فرق داره. چطور اینارو از هم تشخیص بدم.
من چطور بعداز ورود هر کاربر نقش و سطح دسترسی اونو چک کنم؟ از روش rbac هم نمیخوام استفاده کنم.
مرسی

png_92
چهارشنبه 13 مرداد 1395, 16:27 عصر
من به کد بالا matchcallback اضافه کردم و به این تغییر دادم ولی کار نکرد :


public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['Index', 'View', 'Create', 'Update', 'Delete'],
'rules' => [
[
'allow' => false,
'matchCallback' => function () {
return (
Yii::$app->user->identity->role == 3
);
},
'actions' => ['Create'],
],
[
'allow' => true,
'matchCallback' => function () {
return (
Yii::$app->user->identity->role == 0
);
},
'actions' => ['Index', 'View', 'Create', 'Update', 'Delete'],
],
],

'denyCallback' => function ($rule, $action) {
throw new \Exception('You are not allowed to access this page');
}
],
];
}



ینی هرکس لاگین کنه میتونه هرکاری انجام بده. مشکل کجاست دقیقا؟

png_92
جمعه 15 مرداد 1395, 16:10 عصر
مشکل از نام اکشنه که باید با حرف کوچک نوشته شود. (حل شد)




'actions' => ['create','index'],