رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
چطور مجوز delete فقط به admin بدم (حل شد)
#1
سلام
من میخوام فقط کاربر admin  مجوز حذف داشته باشه کد زیر رو که اجرا میکنم فقط برای حذف موقع تایید حذف میگه دسترسی نداره


public function behaviors()
   {
       return [
           'access' => [
               'class' => AccessControl::className(),
               'only' => ['create',  'update', 'delete','view','index'],
               'rules' => [
                    
                   [
                       'actions' => ['view','index'],
                       'allow' => true,
                       'roles' => ['?'],
                   ],
                   [
                       'actions' => [  'create','update','view','index'],
                       'allow' => true,
                       'roles' => ['@'],
                   ],
                   [
                       'actions' => ['create',  'update', 'delete','view','index'],
                       'allow' => true,
                       'roles' => ['admin'],
//'verbs' => ['POST'],
                   ],
               ],
           ],
            
           'verbs' => [
               'class' => VerbFilter::className(),
               'actions' => [
                   'delete' => ['post'],
//'roles' => ['admin'],
               ],
           ],
       ];
   }


ممنون میشم اگر منو راهنمایی کنید
پاسخ
تشکر شده توسط:
#2
منظورتون رو از «موقع تأیید حذف» میشه توضیح بدین؟ خود لینک حذف و کادری که برای حذف باز میشه با Javascript هست و رفتاری که الآن توی سؤالتون گفتین، کاملاً منطقیه. مگه اینکه شما چیز دیگری مدنظر داشته باشین.
پاسخ
تشکر شده توسط: shpegah
#3
مشکل اینجاست که عمل حذف توسط admin اتفاق نمیفته وخطا میده
مشکل کد بالا کجاست که این امر طبیعیه ؟
مگرنه اینکه بهش گفتیم فقط ادمین بتونه حذف کنه ؟
پاسخ
تشکر شده توسط:
#4
باید لینک بصورت Post باشه. بخش Verbs رو حذف کنید تا بتونید با Get کار کنید.
پاسخ
تشکر شده توسط:
#5
متاسفانه درست نشد
ببینید درست عمل کردم
درفایل configweb  کد زیر را گذاشتم
'authManager' => [
 'class' => 'yiirbacDbManager',
 ],

ودر دیتابیسی که با migration خودش ایجاد کردم
admins را در auth_items
و admin را در auth_assignment
ودر auth_item_child هم auth_name=admins , user_id=admin
گذاشتم
درrule هم delete= data رو گذاشتم
یک سوال برای نام role باید از نامی که در item_rule هست استفاده کنیم یا item_name در auth_item ؟
البته من هردو را امتحان کردم نشد
پاسخ
تشکر شده توسط:
#6
ظاهرا مشکل از نحوه پیکربندی RBAC هستش. برای اینکار بعد از اینکه جداول RBAC تو سط migration ایجاد شد موارد زیر رو انجام بدید:
۱- در جدول auth_item رکورد جدید وارد کنید که مقدار ستون name برابر admin و مقدار ستون type برابر 1 باشد.
۲- با فرض اینکه شما میخواهید به کاربر شماره 1 دسترسی ادمین بدهید در جدول auth_assignment رکورد جدید وارد کنید که مقدار ستون item_name آن برابر admin و مقدار ستون user_id آن برابر 1 باشد.
۳- حالا در کلاس کنترل میتوانید به action مورد نظر role ادمین رو بصورت زیر بدید:
public function behaviors()
{
   return [
       'access' => [
           'class' => AccessControl::className(),
           'only' => ['create', 'update', 'delete', 'view', 'index'],
           'rules' => [

               [
                   'actions' => ['view', 'index'],
                   'allow' => true,
                   'roles' => ['?'],
               ],
               [
                   'actions' => ['create', 'update', 'view', 'index'],
                   'allow' => true,
                   'roles' => ['@'],
               ],
               [
                   'actions' => ['delete'],
                   'allow' => true,
                   'roles' => ['admin'],
               ],
           ],
       ],

       'verbs' => [
           'class' => VerbFilter::className(),
           'actions' => [
               'delete' => ['post'],
           ],
       ],
   ];
}
...
پاسخ
تشکر شده توسط: shpegah
#7
ممنون
من هم دقیقا همین کارارو کردم اما نشد

جدول auth_rule جنبه اطلاعاتی داره ؟ نقشی در برنامه نداره ؟
پاسخ
تشکر شده توسط:
#8
جدول auth_rule جنبه اطلاعاتی نداره برای مواردی که مثلا میخواهید هر کاربر post هایی رو که خودش ایجاد کرده رو بتونه ویرایش کنه کاربرد داره.
مثال های مختلف از RBAC در این لینک توضیح داده شده.
http://www.yiiframework.com/doc-2.0/guid...ation.html


برای اینکه مشکل مشخص بشه ببینید خروجی کد زیر چی هستش؟
Yii::$app->user->can('admin');

اگه RBAC درست باشه باید مقدار خروجی true باشه.
...
پاسخ
تشکر شده توسط: shpegah
#9
این تاپیک رو بخونید: http://forum.ncis.ir/Thread-Yii2-RBAC
پاسخ
تشکر شده توسط: shpegah
#10
ممنون از شما حل شد
اصلا مشکل نه از behavior بود نه از rbac
مشکل از login بود چون user_id نوع استرینگ بود من فکرکرده بودم باید    با  username   یکی باشه در حالیکه باید use_id=100 در جدول auth_assiagnment میذاشتم که درست شد

(لازم به ذکر است از مدل پیش فرض خود yii2 یعنی user.php استفاده کردم که در آنجا برای admin مقداز id=100 است)
پاسخ
تشکر شده توسط:




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