[SQL] 單一連線多資料庫設計模式 – (Multiple Catalogs Databases)

Intro 一個專案會有遇到需要操作多個資料庫的情境,然而多資料庫分離的Type一般分兩類: 同一Application分主資料庫和附屬資料庫,如分myapp與myapp_log兩個DB。 異質系統,若非API串接,也是有可能直接SQL Connection跨過去連線異質資料庫。 異質系統資料庫連線 異質系統連線沒甚麼設計模式,基本上必定需要另外設定一個連線,以PHP Yii2 Framework連線異質MySQL為例: return [ ‘components’ => [ ‘db’ => [ ‘class’ => ‘yii\db\Connection’, ‘dsn’ => ‘mysql:host=localhost;dbname=myapp’, ‘username’ => ‘user’, ‘password’ => ‘pass’, ‘charset’ => ‘utf8’, ], ‘dbOtherApp’ => [ ‘class’ => ‘yii\db\Connection’, ‘dsn’ […]

[PHP] Yii2 – RBAC原理指南 – Role Based Access Control Guide

Intro Yii RBAC可以整合User Component提供完整的權限控管,官方文件可以參考: Yii2 – Role Based Access Control (RBAC) 概念 RBAC關聯架構 Items分為Role與Module,用Type區分,但皆可直接Assign給User Items裡的Role即為Module的父集合,一個Role可以對多個Modules 一個User可以對多個Items,意即一人可以有多個Role再聯集多個指定Module 在介面概念上,Roles為一區塊可多選,選取或取消將影響Module區塊的Children選項並考慮其他已選Role聯集 RBAC系統架構 User為獨立Component與資料Model,RBAC與之整合 RBAC主要包含assignment(User-items)、items(角色與模組兩種Type)、rules(資料級別規則) RBAC三個Model提供PhpManager(檔案管理)與DbManager(資料庫)載體選擇,皆支援Data Building方法 Data Building提供操作器管理RBAC資料 驗證實作 設定好RBAC後,可以調用yii\web\User::can()做Module驗證判斷。 另外可以搭配ACF做Controller級別驗證,注意ACF中的roles即為RBAC的items: public function behaviors() { return [ ‘access’ => [ ‘class’ => AccessControl::className(), ‘rules’ […]

[Disk] 電腦硬碟原理(MBR/GPT) – Computer Disk Principle

Intro GPT – GUID Partition Table 磁碟分割格式 MBR(512B)與GPT(2048B)為Disk表頭Index,往後才能分割Partition。 磁碟分割區即為該顆磁碟Index,紀錄包含整個磁碟資訊如UUID、Size、Partitions。 透過韌體支援分辨與讀取BIOS/MBR(512B)與UEFI/GPT(2048B)磁碟分割區 Partitions資訊包含start、End、Sector資訊 一般OS啟動時會Cache磁碟分割區,透過Rescan更新 透過Linux dd為理想Byte to Byte對烤工具 大到小Disk copy需捨棄溢位磁區,並對size做矯正,另外UUID會相同,建議修改

[Ubuntu] Ubuntu Desktop Guide – 桌面環境指南

Intro Ubuntu Desktop Grub2 Menu /etc/default/grub: 設為最後一次記憶開機區 # Modify GRUB_DEFAULT=saved # Add GRUB_SAVEDEFAULT=true 指定開機區 # Modify GRUB_DEFAULT=”Windows NT/2000/XP (loader) (on /dev/sda1)” 名稱可從 `grep menuentry /boot/grub/grub.cfg~ 查找 最後Restart: $ sudo update-grub Display Scale $ sudo apt install gnome-tweak-tool $ gnome-tweaks IME […]

[Redis] Memory cache Redis 架設教學指南

Intro Redis 快速安裝檔 安裝 $ sudo apt install redis-server That’s all 進階設定 開啟驗證 新增密碼設定 /etc/redis/redis.conf: requirepass your-password-here Redis驗證僅使用密碼,不需要帳號 Bind IP驗證 /etc/redis.conf: bind 192.168.1.100 10.0.0.1 不支援子網遮罩,不需要就註解掉,自行設防火牆。 管理介面套件 phpRedisAdmin Additoins TTL (Time to live) Redis – TTL key EXPIRE key seconds [ […]

[Postfix] SMTP Mail Server 架設教學指南 – Postfix with Ubuntu

Install | Authentication | DKIM | Relay Server | Maintenance | Mailtools Intro 簡易郵件傳輸通訊協定 SMTP 是什麼? | Cloudflare Postfix Wiki Postfix 為目前 Linux 熱門郵件傳傳輸軟體 (MTA),可供如mail, sendmail (PHP mail底層)作為預設 MTA 以用來發信。 本篇為純送信 Mail Server 應用指南,OS 環境為 Ubuntu 16.04。 Postfix – Ubuntu […]

[PHP] 處理二進制資料 – Binary Data Pack/Unpack

Intro PHP支援二進制的資料處理,應用上在跟低階語言(如C語言)做資料介接就幫上許多。 PHP函式 pack() 封裝 Data to BIN unpack 分析 BIN to Data $bin = pack(“Sa3”, 50, ‘abc’); file_put_contents(‘data.bin’, $bin); $bin = file_get_contents(‘data.bin’); $data = unpack(“SShort/a3Char3”, $bin); print_r($data); Array ( [Short] => 50 [Char[3]] => abc )

[JS][jQuery] Events Hooking – 元件觸發事件開發

Intro JS基本的Callback這篇就不多談,現在主要是開發JS元件的Events Pattern。 例如Bootstrap Modal Events Pattern 以jQuery實作,自定義Event Namespace 利用jQuery Event及jQuery Trigger <a>Ancher</a> <!– jQuery required –> <script> $(“a”).click(function(){ alert(‘Click’); var e = $.Event(“namespace”); $(this).trigger(e); // Or directly `$(this).trigger(“namespace”);` }); $(“body”).on(“namespace”, function(){ alert(‘A’) }) $(“body”).on(“namespace”, function(){ alert(‘B’) }) $(“a”).on(“namespace”, function(){ […]

[Google][API] Error: 這個應用程式未經驗證 (This app isn’t verified)

Intro Google OAuth 應用授權大概在2017-07-18後會遇到以下問題: 這個應用程式未經驗證 這個應用程式尚未經過 Google 驗證。除非你認識且信任開發人員,否則請勿繼續執行。 隱藏進階設定 Google 尚未審查這個應用程式,因此無法確認其是否通過驗證。未經驗證的應用程式可能會對你的個人資料造成危害。 瞭解詳情 前往「yidas.com」(不安全) 解決方法 Google – OAuth Client Verification