Silverstripe ModelAdmin数据对象的权限

Silverstripe ModelAdmin数据对象的权限,silverstripe,Silverstripe,当用户不是管理员,但其分配的组有权访问ModelAdmin时,菜单中会列出model Admin页面&用户可以访问该页面,但索引视图中不会显示任何记录 要显示记录,需要在模型中设置权限。文档中说要这样做: 类类别扩展数据对象{ // ... 公共函数canView($member=null){ 返回权限::check('CMS\u ACCESS\u CMSMain','any',$member); } 公共函数canEdit($member=null){ 返回权限::check('CMS\u

当用户不是管理员,但其分配的组有权访问ModelAdmin时,菜单中会列出model Admin页面&用户可以访问该页面,但索引视图中不会显示任何记录

要显示记录,需要在模型中设置权限。文档中说要这样做:

类类别扩展数据对象{
// ...
公共函数canView($member=null){
返回权限::check('CMS\u ACCESS\u CMSMain','any',$member);
}
公共函数canEdit($member=null){
返回权限::check('CMS\u ACCESS\u CMSMain','any',$member);
}
公共函数canDelete($member=null){
返回权限::check('CMS\u ACCESS\u CMSMain','any',$member);
}
公共函数canCreate($member=null){
返回权限::check('CMS\u ACCESS\u CMSMain','any',$member);
}
}
但是,这不起作用,因为$member为Null。将这些方法设置为返回true将显示记录。这安全吗?还是说有人可以编辑这些记录?以用户身份登录,其组无权访问该模型管理员,这似乎不允许他们访问列表页面,但这似乎是错误的

公共函数canView($member=null){
返回null;
}
公共函数canEdit($member=null){
返回true;
}
公共函数canDelete($member=null){
返回true;
}
公共函数canCreate($member=null){
返回true;
}

允许组查看和编辑modelAdmin记录的最佳方式是什么?

下面的示例是您希望遵循的,但使用不同的权限名称。示例中的权限名称是用户是否有权访问
CMSMain
,这是CMS处理页面的部分

要获取权限的名称,您需要获取ModelAdmin的类名(比如,
CategoryAdmin
)并在它前面加上
CMS\u ACCESS\u
(在本例中,这将提供
CMS\u ACCESS\u CategoryAdmin


对于
$member
null
,这只是默认值。因此,
$member
只有在没有传入值的情况下才是
null
。这实际上并不重要,因为
Permission::check
专门处理传入的
null
值,并使用当前登录的用户。

谢谢编辑,我不知道我可以标记语言。以后就可以了。:)好的,谢谢,这一切都是有意义的&工作正常。我在dev小组上看到了一个讨论,讨论的内容是如何让这个问题少一些陈词滥调。不过看起来还可以。安全第一。