ユーザー認証は、システムのセキュリティを確保し、不正アクセスを防ぐことができる最初の防衛線です。 Yiiでは、 Yii \ base \ ActionFilterからミドルウェアとして継承されたクラスを作成して、解除されていないユーザーをインターセプトできます。
認証フィルターのサンプルコードは次のとおりです。
namespace app\filters;
use Yii;
use yii\base\ActionFilter;
class AuthFilter extends ActionFilter
{
public function beforeAction($action)
{
$user = Yii::$app->user;
if ($user->isGuest) {
$user->loginRequired();
return false;
}
return parent::beforeAction($action);
}
}
このフィルターは、ユーザーが保護された操作にアクセスする前にチェックし、ログインしていない場合はログインページにリダイレクトします。
次に、フィルターをコントローラーにバインドする必要があります。
namespace app\controllers;
use yii\web\Controller;
use app\filters\AuthFilter;
class SiteController extends Controller
{
public function behaviors()
{
return [
'auth' => [
'class' => AuthFilter::class,
'only' => ['admin'],
],
];
}
public function actionAdmin()
{
return 'Admin Area';
}
}
上記の例では、 AuthFilterは管理アクションにのみ適用され、認証されたユーザーのみがコンテンツのこの部分にアクセスできるようにします。
ユーザー認証は、ログインしたユーザーがリソースにアクセスする許可を持っているか、特定の操作を実行する許可を持っているかを判断するために使用されます。 YIIフレームワークでは、フィルターを使用して承認ロジックを完了することもできます。
これは、ユーザーの承認を実装するフィルターの例です。
namespace app\filters;
use Yii;
use yii\base\ActionFilter;
use yii\web\ForbiddenHttpException;
class AccessControlFilter extends ActionFilter
{
public function beforeAction($action)
{
$user = Yii::$app->user;
if (!$user->can($action->id)) {
throw new ForbiddenHttpException('You are not allowed to perform this action.');
}
return parent::beforeAction($action);
}
}
このフィルターは、$ user-> can()メソッドを使用して、ユーザーが現在のアクションを実行する許可を持っているかどうかを判断します。許可がない場合、 403の禁止された例外がスローされます。
認証フィルターは、認証と同様に適用されます。
namespace app\controllers;
use yii\web\Controller;
use app\filters\AccessControlFilter;
class SiteController extends Controller
{
public function behaviors()
{
return [
'access' => [
'class' => AccessControlFilter::class,
'only' => ['admin'],
],
];
}
public function actionAdmin()
{
return 'Admin Area';
}
}
このようにして、特定のコントローラー操作へのユーザーのアクセスを柔軟に制御できます。
この記事では、YIIフレームワークにユーザー認証と許可制御を実装するために、フィルターメカニズム(つまりミドルウェア)を使用する方法について説明します。この方法には明確な構造があるだけでなく、アプリケーション全体のセキュリティも向上します。フィルタークラスを作成し、コントローラーで構成することにより、開発者は非常に制御可能なアクセス管理ロジックを実装できます。これは、安全なWebアプリケーションを構築する上で重要なプラクティスの1つです。