我正在使用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 重定向到自定义登录表单 - 这是我不想要的。