我想从论坛中提出这个问题:
http://www.silverstripe.org/data-model-questions/show/23484
简而言之:
是否可以应用权限方法:
canView, canEdit, canDelete, canCreate etc
通过DataExtension?
我试过但是还不能成功,我想知道我是否遗漏了什么?
子类化可能会这样做,但由于DataExtension中有空权限方法,它们的目的是什么?
public function canEdit($member) {
}
答案 0 :(得分:3)
假设SS3.0 +简短答案,则取决于。
直接DataObject->can[Create|Edit|View|Delete]
方法不能以这种方式扩展,但SiteTree
的后代大多可以。
这里感兴趣的函数是DataObject->extendedCan
,它由所有SiteTree
can *方法调用,但不是DataObject can *方法。
当然,您始终可以确保在DataObject
子类中调用此方法。
请注意,如果多个扩展程序正在扩展这些功能,则会变得非常复杂。以下是DataObject
类的一些重要文档:
处理来自权限更改扩展的三态响应。预计扩展将返回以下三个值之一:
- false:禁止此权限,无论其他扩展名是什么
- true:允许此权限,只要没有其他扩展名返回false
- NULL:不影响结果
值得注意的是,具有ADMIN权限的任何用户都将通过所有这些检查。更改ADMIN用户对象权限的唯一方法是对DataObject
进行子类化。