ورود

View Full Version : تغیر پست فقط توسط نویسنده



mah.tab
جمعه 16 خرداد 1393, 03:09 صبح
برای اینکه فقط کسی که پست گذاشته بتونه اون پست رو آپدیت یا پاک کنه,
ساده ترین راه چی هست؟ آیا این راه مناسب هست؟




public function accessRules(){ return array( array('allow', 'actions'=>array('update'), 'users'=>array('@'), 'expression' => array($this, 'isOwner'), ), );}
public function isOwner($user, $rule){ $model = $this->loadModel($_GET['id']); return $user->id === $model->post_id

MMSHFE
جمعه 16 خرداد 1393, 11:30 صبح
اینقدر دردسر نمیخواد. توی متد actionUpdate این کد رو بنویسید:

if(Yii::app()->user->id !== $model->user->id) {
throw new CHttpException(403, 'Unauthorized access');
}

salehforum
جمعه 16 خرداد 1393, 13:39 عصر
جالبه آقای شهرکی
من هم دقیقا همین کد رو به کار بردم واسه این موضوع اما توی view این کار رو کردم:


if(Yii::app()->user->id == $model->user_id) {
$this->renderPartial('_form', array('model'=>$model));
} else {
throw new CHttpException(403,'این ارسال مربوط به شما نیست!');

>@>mehr
جمعه 16 خرداد 1393, 14:30 عصر
جالبه آقای شهرکی
من هم دقیقا همین کد رو به کار بردم واسه این موضوع اما توی view این کار رو کردم:


if(Yii::app()->user->id == $model->user_id) {
$this->renderPartial('_form', array('model'=>$model));
} else {
throw new CHttpException(403,'این ارسال مربوط به شما نیست!');



دوست عزیز اگه فقط داخل ویو این کد رو بنویسین راه برای اپدیت پست خواهد بود.
بهتره از روشی که استاد شهرکی گفتن استفاده کنید.
و یک پیشنهاد کلی تر اینکه رو رعایت کنید و اعمالی که باید در کنترلر کنترل شوند را فقط آنجا اعمال کنید, اینطوری احتمال خطا پایین تر میاد

MMSHFE
جمعه 16 خرداد 1393, 15:24 عصر
درسته. بهتره ویو رو درگیر کارهای کنترلی نکنید. کنترلر برای این مقاصد توی MVC درنظر گرفته شده.

salehforum
جمعه 16 خرداد 1393, 17:00 عصر
آخه من دقیقا فقط برای آپدیت می خواستم این اتفاق بیفته اما از نظر ساختارMVC درست میفرمایید.
بله چشم