具有Core扩展挂钩的安全PermissionFailure重定向

时间:2013-03-27 21:21:07

标签: silverstripe

我正在使用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'])
        );

我希望用户在被拒绝访问文件的权限时被定向到家庭或我的自定义登录表单页面。

我尝试通过extend挂接到该方法:

class SecurityExtension extends Extension {
function permissionDenied($member) {
    $this->owner->redirect('member-login/login/?BackURL=/thevault/home/');
}
}

然后在我的_config.php文件中分配此扩展名:

Object::add_extension('Security', 'SecurityExtension');

不幸的是,我的代码未被访问,并且该方法继续将用户重定向到管理员登录页面。 extend和param上面的注释似乎表明它是用于记录成员的,所以我不确定是否可以使用此钩子进行重定向。如果没有,是否有更优雅的解决方案在Security :: PermissionFailure上设置自定义重定向?我想避免破解扩展程序。

另外,我还尝试将set_login_url设置为自定义登录表单。虽然这确实将非授权用户重定向到我的自定义登录表单,但它也会将/ admin重定向到自定义登录表单 - 这是我不想要的。

1 个答案:

答案 0 :(得分:0)

我今天也遇到了这个问题。我刚试过

Config::inst()->update('Security', 'login_url', '/myCustomLoginFormURL');

在mysite / _config.php中它可以工作:)