Gate 超級管理員擁有全部許可權踩坑點

winter-ice發表於2019-05-19

文件中是這樣寫的:

Gate 攔截檢查

有時,你可能希望將所有能力授予特定使用者。所以你可以在所有其他授權檢查之前使用 before 方法來定義執行的回撥:

Gate::before(function ($user, $ability) {
if ($user->isSuperAdmin()) {
return true;
}
});

如果 before 回撥方法返回的是非 null 的結果,則結果將被視為檢查結果。

注意這句話 如果 before 回撥方法返回的是非 null 的結果,則結果將被視為檢查結果。

這句話是重點啊,如果直接定義

Gate::before(function ($user, $ability) {
    return $user->id === 1;
});

這樣會導致失敗是返回的是false而不是null,會直接導致後續授權驗證失效。找了很久錯誤才發現,怪我沒仔細看文件。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章