如何在 Silverstripe 中限制对 $has_one 成员的对象访问?
How to limit object access to $has_one Member in Silverstripe?
我正在开发一个 Silverstripe 4.3.1 项目,该项目有一个对象,其所有者成员通过 $has_one
:
附加
class Object extends DataObject
{
private static $has_one = [
'Member' => Member::class,
];
我们希望将查看/编辑对象的能力限制为管理员和所有者成员。
这是我们使用的代码:
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
的行上
任何人都可以指出正确的方向来解决这些错误吗?
可能某些 Object
实例没有 Member
集。在这些情况下,调用 this->Member()->ID
将出错,因为 Member()
returns null.
首先我们应该检查 $this->Member()
是否用于 Object
。如果不是,我们可以 return false.
public function canView($member = null)
{
if (Permission::check('ADMIN')) {
return true;
}
if (!$this || !$this->exists()) {
return false;
}
if (!$this->Member() || !$this->Member()->exists()) {
return false;
}
if ($this->Member()->ID === $member->ID) {
return true;
}
if ($this->Member()->ID === Security::getCurrentUser()->ID) {
return true;
}
return false;
}
public function canEdit($member = null)
{
if (Permission::check('ADMIN')) {
return true;
}
if (!$this || !$this->exists()) {
return false;
}
if (!$this->Member() || !$this->Member()->exists()) {
return false;
}
if ($this->Member()->ID === $member->ID) {
return true;
}
if ($this->Member()->ID === Security::getCurrentUser()->ID) {
return true;
}
return false;
}
我正在开发一个 Silverstripe 4.3.1 项目,该项目有一个对象,其所有者成员通过 $has_one
:
class Object extends DataObject
{
private static $has_one = [
'Member' => Member::class,
];
我们希望将查看/编辑对象的能力限制为管理员和所有者成员。
这是我们使用的代码:
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
任何人都可以指出正确的方向来解决这些错误吗?
可能某些 Object
实例没有 Member
集。在这些情况下,调用 this->Member()->ID
将出错,因为 Member()
returns null.
首先我们应该检查 $this->Member()
是否用于 Object
。如果不是,我们可以 return false.
public function canView($member = null)
{
if (Permission::check('ADMIN')) {
return true;
}
if (!$this || !$this->exists()) {
return false;
}
if (!$this->Member() || !$this->Member()->exists()) {
return false;
}
if ($this->Member()->ID === $member->ID) {
return true;
}
if ($this->Member()->ID === Security::getCurrentUser()->ID) {
return true;
}
return false;
}
public function canEdit($member = null)
{
if (Permission::check('ADMIN')) {
return true;
}
if (!$this || !$this->exists()) {
return false;
}
if (!$this->Member() || !$this->Member()->exists()) {
return false;
}
if ($this->Member()->ID === $member->ID) {
return true;
}
if ($this->Member()->ID === Security::getCurrentUser()->ID) {
return true;
}
return false;
}