Yii - การอนุญาต
กระบวนการตรวจสอบว่าผู้ใช้มีสิทธิ์เพียงพอที่จะทำบางสิ่งเรียกว่า authorization. Yii มี ACF (Access Control Filter) ซึ่งเป็นวิธีการอนุญาตที่ใช้เป็นไฟล์yii\filters\AccessControl. ปรับเปลี่ยนพฤติกรรม () ฟังก์ชั่นของ SiteController -
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หนังบู๊. ผู้ใช้ที่ได้รับการรับรองความถูกต้องทั้งหมด (ที่มีบทบาท“ @”) จะได้รับอนุญาตให้เข้าถึงผู้ติดต่อและเกี่ยวกับการดำเนินการ
หากคุณไปที่ URL http://localhost:8080/index.php?r=site/aboutคุณจะเห็นหน้านี้ แต่ถ้าคุณเปิด URL http://localhost:8080/index.php?r=site/contactคุณจะถูกเปลี่ยนเส้นทางไปยังหน้าเข้าสู่ระบบเนื่องจากมีเพียงผู้ใช้ที่ได้รับการรับรองความถูกต้องเท่านั้นที่สามารถเข้าถึงไฟล์ contact หนังบู๊.
กฎการเข้าถึงรองรับตัวเลือกมากมาย -
allow - กำหนดว่านี่คือกฎ "อนุญาต" หรือ "ปฏิเสธ"
actions - กำหนดว่าการกระทำใดที่กฎนี้ตรงกับ
controllers - กำหนดตัวควบคุมที่ตรงกับกฎนี้
roles- กำหนดบทบาทของผู้ใช้ที่ตรงกับกฎนี้ ได้รับการยอมรับสองบทบาทพิเศษ -
? - ตรงกับผู้ใช้ทั่วไป
@ - จับคู่ผู้ใช้ที่ได้รับการรับรองความถูกต้อง
ips - กำหนดที่อยู่ IP ที่ตรงกับกฎนี้
verbs - กำหนดวิธีการร้องขอ (POST, GET, PUT และอื่น ๆ ) ที่ตรงกับกฎนี้
matchCallback - กำหนดฟังก์ชันเรียกใช้ PHP ที่ควรเรียกใช้เพื่อตรวจสอบว่าควรใช้กฎนี้หรือไม่
denyCallback - กำหนดฟังก์ชันเรียกใช้ PHP ที่ควรเรียกใช้เมื่อกฎนี้ปฏิเสธการเข้าถึง
รหัสผ่าน
Step 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);
}
Step 2 - ป้อน URL http://localhost:8080/index.php?r=site/authคุณจะเห็นสิ่งต่อไปนี้