Yiiで共有パスワード保護エリアを設定するための最良の方法は何でしょうか?
そのグループの所有者が作成した共有パスワードでアクセスできるグループモデルのビューを探しています。グループメンバーはログインする必要はなく、純粋にこのパスコードを入力する必要があります。
これは、Yiiの組み込みの認証ツールを使用して実行する必要がありますか?-または、誰かが複数のグループにアクセスしたい場合があることを念頭に置いて、より簡単な解決策がありますか。
Yiiで共有パスワード保護エリアを設定するための最良の方法は何でしょうか?
そのグループの所有者が作成した共有パスワードでアクセスできるグループモデルのビューを探しています。グループメンバーはログインする必要はなく、純粋にこのパスコードを入力する必要があります。
これは、Yiiの組み込みの認証ツールを使用して実行する必要がありますか?-または、誰かが複数のグループにアクセスしたい場合があることを念頭に置いて、より簡単な解決策がありますか。
これは、PHPに組み込まれている標準のセッションメカニズムを使用して行うことができます。誰かがパスワードで保護された領域を表示しようとしたときに、セッション変数を確認します。ユーザーがまだパスワードを入力していない場合は、パスワードフォームを使用してページにリダイレクトします(たとえば、コントローラーフィルターを使用して確認できます)。
フォームが送信されたら、パスワードが正しいかどうかを確認し、問題がなければセッションに書き込みます。グループIDによってセッションキーを区別できます。
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) {
}
}