如何在Silverstripe中为公共网站和CMS设置canView

时间:2017-08-02 02:55:37

标签: php silverstripe

我们在Silverstripe项目中的会员级上有自定义扩展程序:

public function canView($member = null) {
    if ($this->Link() && $this->isPublished()) {
        return true;
    } else {
        return false;
    }
}

只有通过$this->isPublished() == true专门发布会员详细信息才能查看会员详细信息。

这种方法一直运行良好,但最近对Silverstripe 3.6.1的升级似乎打破了它。 CMS管理员无法再创建新成员(返回403 / Forbidden错误),除非canView被覆盖为“true”:

public function canView($member = null) {
   return true;
}

如何设置:

  1. 在公共网站上,会员详细信息只能在以下情况下查看 $this->isPublished() == true
  2. 在CMS中,用户可以查看所有会员详细信息     管理员权限。
  3. 提前谢谢。

1 个答案:

答案 0 :(得分:2)

如果您在“扩展程序”中实施权限方法,则可以返回:

  • true:授予权限
  • false:拒绝许可
  • null:不要影响权限(例如,其他扩展或DataObject的基本方法将发挥作用)

在您的情况下,返回false似乎是错误的,因为如果第一个条件未满足,则拒绝查看对象。这意味着,管理员在这些情况下无法看到CMS中的对象,他显然应该这样做。

实现此目的的正确方法如下:

public function canView($member = null) {
    if ($this->Link() && $this->isPublished()) {
        return true;
    } else {
        // fall back to default permissions
        return null;
    }
}