0

我已经使用 Yii 几个月了,它很棒,但是我在控制器中实现访问规则时遇到了麻烦,但奇怪的是,仅在生产中。

首先,在组件内部,我声明了一个类 UserApplications,我将在其中查看用户是否有权访问某个页面。

例如,此类中的一种方法是:

class UserApplications extends CApplicationComponent{

public function userEmail($id){

    $included = ApplicationUser::model()->find('id_app=:id_app AND id_user=:id_user', array('id_app' => 5, 'id_util' => $id));

    if (isset($included)){
        return TRUE;
    }else{
        return FALSE;
    }

}
}

这样,我查看用户是否可以访问电子邮件应用程序。如果记录存在,则返回 TRUE,否则返回 FALSE。

然后在我的 config->main.php 我有:

'components'=>array(
    'user_apps'=>array('class'=>'UserApplications'),

最后,在我的电子邮件控制器中,我有类似的东西:

 public function accessRules()
    {   
        return array(
            array('allow',
                    'actions'=>array('index', 'logout'),
                    'users'=>array('@'),
                    'expression'=>'Yii::app()->user_apps->userEmail('.Yii::app()->user->getId().')==TRUE',
            ),            
            array('deny',
                    'users'=>array('*'),
                    'deniedCallback' => function() {
                        $this->redirect(array('/site/index'));                            
                    },
            ),
        );
    }

这在开发中有效。我单击链接,如果不允许我进入应用程序,我会被重定向到网站的索引。

但是,在生产中,我得到的只是 HTTP 500 内部服务器错误。它无助于启用

defined('YII_DEBUG') or define('YII_DEBUG',true);

在 index.php 文件中,因为我仍然收到 500 错误,根本没有错误消息。

就像我说的,在开发中,一切都很好。

任何想法为什么会有这种行为?访问规则内部是否依赖于特定的 PHP 函数,这些函数仅适用于确定的 PHP 本身及更高版本?Yii 的要求只说 5.1 及以上,而我的部署服务器是 5.2.17(旧的,我知道,他们正在努力)

问候

4

1 回答 1

2

显然,匿名函数仅在 PHP 5.3 中可用。

解决方案是:

    return array(
        array('allow',
                'actions'=>array('index', 'logout'),
                'users'=>array('@'),
                'expression'=>'Yii::app()->user_apps->userEmail('.Yii::app()->user->getId().')==TRUE',
        ),            
        array('deny',  // deny all users
                'users'=>array('*'),
                'deniedCallback' => array($this, 'redirecting'),
        ),
    );
}

public function redirecting(){
    $this->redirect(array('/site/index'));
}

感谢Yii 框架论坛中的用户Keith

问候

于 2013-07-02T13:39:40.490 回答