Я использую расширение защищенных файлов, чтобы пользователи не могли напрямую обращаться к файлам в своем браузере.Безопасность PermissionFailure Перенаправление с помощью удлинителя ядра
Если проверка разрешения не удается, расширение вызывает следующий метод:
function fileNotAuthorized($body = "") {
Security::permissionFailure($this, $body);
}
Я смотрел на безопасности :: 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 в пользовательскую форму входа, которую я не хочу.