Menu

Showing posts with label trait. Show all posts
Showing posts with label trait. Show all posts

Thursday, March 19, 2020

[PHP - Laravel] Trait คืออะไร?
[PHP - Laravel] What is Trait?

ปัญหานึงของการเขียนโปรแกรมด้วยภาษา PHP คือ class 1 class สามารถ inherit จาก class อื่นได้เพียง class เดียวเท่านั้น (single inheritance) ทำให้ไม่สามารถ inherit method ที่ต้องการใช้จาก class อื่นๆ เพื่อลดความซ้ำซ้อนของโค้ดได้

Traits เป็นกลไกสำหรับการใช้ code ซ้ำในภาษาที่เป็น single inheritance เช่น PHP

Traits มีความคล้ายคลึงกับ class ต่างกันที่ Traits เป็นเพียงกลุ่มของ method เท่านั้น จึงไม่สามารถเรียกใช้งานแบบ instance ได้ นอกจากนั้น มันยังมีความสามารถเพิ่มเติม คือ การเรียกใช้ class member ของ class ที่เรียกใช้มันได้ โดยไม่ต้อง inherit อีกด้วย

Tuesday, February 25, 2020

[Laravel - Model] การเข้ารหัสและถอดรหัสค่าของฟิลด์ใน Laravel Model โดยใช้ SSH Keys
[Laravel - Model] Field Values Encryption and Decryption in Laravel Model by Using SSH Key

สืบเนื่องจากโพสต์ [Laravel - Model] การเข้ารหัสและถอดรหัสค่าของฟิลด์ใน Laravel Model ที่เราเข้ารหัสข้อมูลก่อนเก็บลงฐานข้อมูล โดยใช้การเข้ารหัสและถอดรหัสของ Laravel ซึ่งใช้ APP_KEY ใน .env เป็น key ทำให้คนที่เข้าถึง application สามารถถอดรหัสข้อมูลได้

เพื่อเพิ่มความปลอดภัยขึ้นไปอีกขั้น เราจะเปลี่ยนจากการใช้ APP_KEY ใน .env เป็น SSH Keys ซึ่งแยกเป็น Public key และ Private key แทน โดยเราจะได้เพียง Public key มาใช้ในการเข้ารหัส แต่คนมีสิทธิ์ดูข้อมูลเท่านั้นที่จะมี Private key เพื่อใช้ถอดรหัสข้อมูล

Wednesday, November 27, 2019

[Laravel - Model] การเข้ารหัสและถอดรหัสค่าของฟิลด์ใน Laravel Model
[Laravel - Model] Field Values Encryption and Decryption in Laravel Model

ในบางกรณี เราต้องการรักษาความลับของข้อมูล โดยอนุญาตให้เฉพาะผู้ที่เกี่ยวข้องเท่านั้นที่สามารถดูและแก้ไขได้ ระบบส่วนใหญ่จึงจำกัดสิทธิ์การใช้งานของแต่ละผู้ใช้งานภายใน application

อย่างไรก็ตาม ระบบดังกล่าวยังคงเก็บข้อมูลจริงลงฐานข้อมูลโดยไม่มีการเข้ารหัสใดๆ ทำให้ Database Admin ยังสามารถเข้าดูข้อมูลและแก้ไขได้

การเข้ารหัสข้อมูลก่อนเก็บลงฐานข้อมูล จึงเป็นการเพิ่มความปลอดภัยของข้อมูลอีกขั้นนึง

สำหรับ Laravel Model ที่มี function กลางสำหรับการดึงค่าข้อมูลและเก็บข้อมูลของ Fields ต่างๆ ทำให้การเข้ารหัสและถอดรหัสนั้นทำได้ง่ายขึ้นมาก เราเพียงเขียน Trait แล้วนำไปใส่ใน Model พร้อมกับกำหนด Fields ที่เราต้องการเข้ารหัสเท่านั้น