我们在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;
}
如何设置:
$this->isPublished() == true
提前谢谢。
答案 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;
}
}