【问题标题】:Security PermissionFailure Redirect with Core extend hook使用核心扩展挂钩的安全 ​​PermissionFailure 重定向
【发布时间】:2013-03-27 21:21:07
【问题描述】:

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

【问题讨论】:

    标签: silverstripe


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-15
      • 2016-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多