如何在Silverstripe中限制对$ has_one Member的对象访问?

问题描述 投票:3回答:1

我正在开发一个Silverstripe 4.3.1项目,该项目有一个通过$has_one连接的所有者成员的对象:

class Object extends DataObject
{
    private static $has_one = [
        'Member' => Member::class,
    ];

我们希望限制向Admins和所有者成员查看/编辑对象的能力。

这是我们使用的代码:

public function canView($member = null)
{
    return Permission::check('ADMIN') or
        $this->Member()->ID === Security::getCurrentUser()->ID or
        $this->Member()->ID === $member->ID;
}

public function canEdit($member = null)
{
    return Permission::check('ADMIN') or
        $this->Member()->ID === Security::getCurrentUser()->ID or
        $this->Member()->ID === $member->ID;
}

从我可以告诉它过去的工作,但最近的框架升级或代码更改打破了它。

我们目前收到以下PHP错误:

Trying to get property of non-object在包含$this->Member()->ID的线路上

有人能指出我正确的方向来解决这些错误吗?

php silverstripe silverstripe-4
1个回答
2
投票

可能有些qazxsw poi实例没有qazxsw poi集。在那些情况下,调用Object会出错,因为Member返回null。

首先,我们应该检查this->Member()->ID是否适用于Member()。如果不是,我们可以返回虚假。

$this->Member()
© www.soinside.com 2019 - 2024. All rights reserved.