私は securefiles 拡張機能を使用して、非メンバーがブラウザーでファイルに直接アクセスできないようにしています。
権限チェックが失敗した場合、拡張機能は次のメソッドを呼び出します。
function fileNotAuthorized($body = "") {
Security::permissionFailure($this, $body);
}
Security::PermissionFailure を調べたところ、クラスの最後に拡張フックがあることに気付きました。
// Audit logging hook
$controller->extend('permissionDenied', $member);
デフォルトでは、PermissionFailure メソッドはユーザーを管理ログイン ページにリダイレクトします。
$controller->redirect(
Config::inst()->get('Security', 'login_url')
. "?BackURL=" . urlencode($_SERVER['REQUEST_URI'])
);
ファイルへのアクセス許可が拒否された場合、ユーザーをホームまたはカスタム ログイン フォーム ページに誘導することを希望します。
拡張を介してメソッドにフックしようとしました:
class SecurityExtension extends Extension {
function permissionDenied($member) {
$this->owner->redirect('member-login/login/?BackURL=/thevault/home/');
}
}
次に、この拡張子を _config.php ファイルに割り当てます。
Object::add_extension('Security', 'SecurityExtension');
残念ながら、私のコードはアクセスされておらず、メソッドは引き続きユーザーを管理ログイン ページにリダイレクトします。拡張の上のコメントと渡されるパラメーターは、メンバーのログ記録を目的としているように見えるため、このフックを使用してリダイレクトできるかどうかはわかりません。そうでない場合、Security::PermissionFailure にカスタム リダイレクトを設定するためのより洗練されたソリューションはありますか? 拡張機能のハッキングは避けたいと思います。
ちなみに、set_login_url をカスタム ログイン フォームに設定してみました。これにより、許可されていないユーザーがカスタム ログイン フォームに正しくリダイレクトされますが、/admin もカスタム ログイン フォームにリダイレクトされます。これは望ましくありません。