0

在 Yii 中设置共享密码保护区的最佳方法是什么?

我正在寻找一个组模型的视图,可以通过该组所有者创建的共享密码访问该模型-组成员不必登录,只需输入此密码即可。

这仍然应该使用 Yii 的内置身份验证工具来完成吗?- 或者是否有更简单的解决方案,请记住有人可能想要访问多个组。

4

2 回答 2

0

您可以使用 PHP 中内置的标准会话机制来执行此操作。当有人试图查看受密码保护的区域时,请检查会话变量,如果用户尚未输入密码,则将他重定向到带有密码表单的某个页面(例如,您可以使用控制器过滤器进行检查)。

提交表单后,检查密码的正确性,如果一切正常,将其写入会话中。您可以按组 ID 区分会话密钥。

于 2012-07-11T15:48:16.123 回答
0

您可以使用 Yii 过滤器功能在执行控制器操作之前触发代码,并阻止您不想允许的操作。

我将为您的所有组页面创建一个通用控制器,并在需要时从该控制器继承其他控制器。

在过滤器中,我将设置代码来检查/提示密码,并将其保持在会话中。

例如,我们有一个过滤器设置来检测用户是否接受了我们修订的条款和条件。过滤器将检测并阻止对控制器的访问,直到用户不确认为止。

class TocConfirmFilter extends CFilter {

    /**
     * Initializes the filter.
     * This method is invoked after the filter properties are initialized
     * and before {@link preFilter} is called.
     * You may override this method to include some initialization logic.
     */
    public function init() {

    }

    /**
     * Performs the pre-action filtering.
     * @param CFilterChain the filter chain that the filter is on.
     * @return boolean whether the filtering process should continue and the action
     * should be executed.
     */
    protected function preFilter($filterChain) {

        // do not perform this filter on this action
        if ($filterChain->action->controller->id . '/' . $filterChain->action->id == 'public/onePublicPage') {
            return true;
        }


        if (isset(Yii::app()->user->id)) {
            $user = user::model()->findbyPk(Yii::app()->user->id);
            if ($user === null)
                throw new CHttpException(404, 'The requested user does not exist.');
            if ($user->tocconfirmed == 0) {
                Yii::app()->getRequest()->redirect(Yii::app()->createAbsoluteUrl('authorize/confirm'));
                return false;
            }
        }
        return true;
    }

    /**
     * Performs the post-action filtering.
     * @param CFilterChain the filter chain that the filter is on.
     */
    protected function postFilter($filterChain) {

    }

}
于 2012-07-11T16:51:53.903 回答