【问题标题】:Yii - Access Rules IssueYii - 访问规则问题
【发布时间】:2013-07-02 11:15:43
【问题描述】:

我已经使用 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(旧的,我知道,他们正在努力)

问候

【问题讨论】:

    标签: php yii access-rules


    【解决方案1】:

    显然,Anonymous 函数仅在 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 Framework Forum中的用户Keith

    问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多