كيفية تمرير الحجج للوصول إلى تعبيرات القواعد في وحدة تحكم إطار YII

StackOverflow https://stackoverflow.com/questions/3005708

  •  25-09-2019
  •  | 
  •  

سؤال

OW لتمرير الوسائط إلى تجارب الوصول إلى التجارب لا يعمل الكود أدناه لأن $ owner_id غير محدد في الفصل حيث يتم تقييم التعبير. أي أفكار كيفية اصلاحها؟

public function accessRules(){
$owner_id = $this->loadModel()->owner_id;
return array(
...
        array('allow', 
                'actions'=>array('update'),
                'expression'=>'$user->id==$owner_id',
));
}
هل كانت مفيدة؟

المحلول

من الصعب للغاية معرفة ما تحاول القيام به أو ما هي المشكلة ، لكنني سأستخدم "{}" واقتباسات مزدوجة بدلاً من عروض أسعار واحدة عند إنشاء صفيفك بحيث يتم تفسير متغيراتك بشكل صحيح:


public function accessRules(){
$owner_id = $this->loadModel()->owner_id;
return array(
...
        array('allow', 
                'actions'=>array('update'),
                'expression'=>"{$user->id}=={$owner_id}",
));
}


نصائح أخرى

يمكنك استخدام

 array('allow',
            'actions'=>array('update'),
            'users'=>array(Yii::app()->user->name),
            'expression' => '(Yii::app()->user->id == ($_GET[\'id\']))',
                    ),
function isPostOwner() {
        $post = Post::model()->findByPk($_GET['post_id']);
        $owner_id = $post->owner_id;
        if(Yii::app()->user->id === $owner_id)
            return true;
        return false;
}

في هذا الرمز في FindBypk Function $ _get ['post_id'] هذه القيمة من أين ستحصل

يمكنك إنشاء وظيفة في وحدة التحكم الحالية والاتصال بها في التعبير نفسه.

مثال مع منشور مدونة:

ضع هذه الوظيفة في وحدة التحكم الحالية حيث توجد قواعد الوصول الخاصة بك.

function isPostOwner() {
        $post = Post::model()->findByPk($_GET['post_id']);
        $owner_id = $post->owner_id;
        if(Yii::app()->user->id === $owner_id)
            return true;
        return false;
}

وفي قسم الوصول ، يمكنك القيام بذلك:

public function accessRules(){
        return array(
        ...
                array('allow', 
                        'actions'=>array('update'),
                        'expression'=>"Yii::app()->controller->isPostOwner()",
        ));
}

امل ان يساعد.

نظرًا لأن PHP 5.3 يمكن للمرء استخدام وظائف مجهولة بدلاً من الكود في سلسلة

...
'expression' => function ($user) {
  return $user->... == ...;
},
...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top