Yii-authorization

提供:Dev Guides
移動先:案内検索

Yii-認証

ユーザーが何かをするのに十分な権限を持っていることを確認するプロセスは、承認*と呼ばれます。 Yiiは、 *yii \ filters \ AccessControl として実装された認証方法であるACF(アクセス制御フィルター)を提供します。 SiteControllerのbehaviors()関数を変更します-

public function behaviors() {
   return [
      'access' => [
         'class' => AccessControl::className(),
         'only' => ['about', 'contact'],
         'rules' => [
            [
               'allow' => true,
               'actions' => ['about'],
               'roles' => ['?'],
            ],
            [
               'allow' => true,
               'actions' => ['contact', 'about'],
               'roles' => ['@'],
            ],
         ],
      ],
   ];
}

上記のコードでは、ACFが動作として添付されています。 唯一のプロパティは、ACFがaboutおよびcontactアクションにのみ適用されることを指定します。 他のすべてのアクションは、アクセス制御の対象ではありません。 ルールプロパティには、アクセスルールが一覧表示されます。 すべてのゲスト(「?」ロールを持つ)は、 about アクションへのアクセスを許可されます。 すべての認証済みユーザー(「@」ロールを持つ)は、連絡先およびアクションに関するアクセスを許可されます。

URL http://localhost:8080/index.php?r = site/about にアクセスするとページが表示されますが、URL http://localhost:8080/index.phpを開くと?r = site/contact 、ログインページにリダイレクトされます。認証されたユーザーのみが contact アクションにアクセスできるためです。

アクセスルールは多くのオプションをサポートしています-

  • allow -これが「許可」ルールか「拒否」ルールかを定義します。
  • アクション-このルールが一致するアクションを定義します。
  • controllers -このルールが一致するコントローラーを定義します。
  • roles -このルールが一致するユーザーロールを定義します。 2つの特別な役割が認識されています-
  • -ゲストユーザーに一致します。
  • @ -認証されたユーザーと一致します。
  • ips -このルールが一致するIPアドレスを定義します。
  • verbs -このルールが一致する要求メソッド(POST、GET、PUTなど)を定義します。
  • matchCallback -このルールを適用する必要があるかどうかを確認するために呼び出す必要があるPHP呼び出し可能関数を定義します。
  • denyCallback -このルールがアクセスを拒否するときに呼び出されるPHP呼び出し可能関数を定義します。

パスワード

  • ステップ1 *-Yiiは、パスワードを操作するための次の便利な方法を提供します。
public function actionAuth() {

   $password = "asd%#G3";

  //generates password hasg
   $hash = Yii::$app->getSecurity()->generatePasswordHash($password);
   var_dump($hash);

  //validates password hash
   if (Yii::$app->getSecurity()->validatePassword($password, $hash)) {
      echo "correct password";
   } else {
      echo "incorrect password";
   }

  //generate a token
   $key = Yii::$app->getSecurity()->generateRandomString();
   var_dump($key);

  //encrypt data with a secret key
   $encryptedData = Yii::$app->getSecurity()->encryptByPassword("mydata", $key);
   var_dump($encryptedData);

  //decrypt data with a secret key
   $data = Yii::$app->getSecurity()->decryptByPassword($encryptedData, $key);
   var_dump($data);

  //hash data with a secret key
   $data = Yii::$app->getSecurity()->hashData("mygenuinedata", $key);
   var_dump($data);

  //validate data with a secret key
   $data = Yii::$app->getSecurity()->validateData($data, $key);
   var_dump($data);
}

ステップ2 *-URL *http://localhost:8080/index.php?r = site/auth を入力すると、次のように表示されます。

パスワード