사용자 인증은 시스템의 보안을 보장하고 무단 액세스를 방지 할 수있는 첫 번째 방어선입니다. 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 프레임 워크에서 사용자 인증 및 권한 제어를 구현하는 방법에 대해 설명합니다. 이 방법에는 명확한 구조가있을뿐만 아니라 전체 애플리케이션의 보안을 향상시킵니다. 개발자는 필터 클래스를 생성하고 컨트롤러에서 구성하여 제어 가능한 액세스 관리 로직을 구현할 수 있으며, 이는 안전한 웹 애플리케이션을 구축 할 때의 주요 관행 중 하나입니다.